package com.netease.nim.uikit.common.media.picker.activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.netease.nim.uikit.R; import com.netease.nim.uikit.common.activity.UI; import com.netease.nim.uikit.common.media.picker.fragment.PickerAlbumFragment; import com.netease.nim.uikit.common.media.picker.fragment.PickerAlbumFragment.OnAlbumItemClickListener; import com.netease.nim.uikit.common.media.picker.fragment.PickerImageFragment; import com.netease.nim.uikit.common.media.picker.fragment.PickerImageFragment.OnPhotoSelectClickListener; import com.netease.nim.uikit.common.media.picker.loader.PickerConfig; import com.netease.nim.uikit.common.media.picker.loader.PickerlImageLoadTool; import com.netease.nim.uikit.common.media.picker.model.AlbumInfo; import com.netease.nim.uikit.common.media.picker.model.PhotoInfo; import com.netease.nim.uikit.common.media.picker.model.PickerContract; import com.netease.nim.uikit.model.ToolBarOptions; import com.netease.nim.uikit.session.constant.Extras; import com.netease.nim.uikit.session.constant.RequestCode; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Inner image picker, no longer use third-part application */ public class PickerAlbumActivity extends UI implements OnAlbumItemClickListener, OnPhotoSelectClickListener, OnClickListener{ private FrameLayout pickerAlbumLayout; private FrameLayout pickerPhotosLayout; private PickerAlbumFragment photoFolderFragment; private PickerImageFragment photoFragment; private RelativeLayout pickerBottomBar; private TextView pickerPreview; private TextView pickerSend; private List<PhotoInfo> hasSelectList = new ArrayList<PhotoInfo>(); private boolean isMutiMode; private boolean isSupportOriginal; private boolean isSendOriginalImage; private int mutiSelectLimitSize; private boolean isAlbumPage; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.nim_picker_album_activity); ToolBarOptions options = new ToolBarOptions(); setToolBar(R.id.toolbar, options); proceedExtra(); initActionBar(); initUI(); } private void proceedExtra(){ Intent intent = getIntent(); if(intent != null){ isMutiMode = intent.getBooleanExtra(Extras.EXTRA_MUTI_SELECT_MODE, false); mutiSelectLimitSize = intent.getIntExtra(Extras.EXTRA_MUTI_SELECT_SIZE_LIMIT, 9); isSupportOriginal = intent.getBooleanExtra(Extras.EXTRA_SUPPORT_ORIGINAL, false); } } private void initActionBar(){ setTitle(R.string.picker_image_folder); } private void initUI(){ // bottom bar pickerBottomBar = (RelativeLayout) findViewById(R.id.picker_bottombar); if(isMutiMode){ pickerBottomBar.setVisibility(View.VISIBLE); }else{ pickerBottomBar.setVisibility(View.GONE); } pickerPreview = (TextView) findViewById(R.id.picker_bottombar_preview); pickerPreview.setOnClickListener(this); pickerSend = (TextView) findViewById(R.id.picker_bottombar_select); pickerSend.setOnClickListener(this); // fragment pickerAlbumLayout = (FrameLayout) findViewById(R.id.picker_album_fragment); pickerPhotosLayout = (FrameLayout) findViewById(R.id.picker_photos_fragment); photoFolderFragment = new PickerAlbumFragment(); switchContent(photoFolderFragment); isAlbumPage = true; } @Override public void OnAlbumItemClick(AlbumInfo info) { // check photo list if has already be choose List<PhotoInfo> photoList = info.getList(); if(photoList == null){ return; } for (PhotoInfo photo : photoList) { if(checkSelectPhoto(photo)){ photo.setChoose(true); }else{ photo.setChoose(false); } } // switch to photo fragment pickerAlbumLayout.setVisibility(View.GONE); pickerPhotosLayout.setVisibility(View.VISIBLE); if (photoFragment == null) { photoFragment = new PickerImageFragment(); photoFragment.setArguments(makeDataBundle(photoList, isMutiMode, mutiSelectLimitSize)); switchContent(photoFragment); } else { int hasSelectSize = hasSelectList.size(); photoFragment.resetFragment(photoList, hasSelectSize); } // update title setTitle(info.getAlbumName()); isAlbumPage = false; } public Bundle makeDataBundle(List<PhotoInfo> photos, boolean mutiMode, int mutiSelectLimitSize) { Bundle bundle = new Bundle(); bundle.putSerializable(Extras.EXTRA_PHOTO_LISTS, new ArrayList<PhotoInfo>(photos)); bundle.putBoolean(Extras.EXTRA_MUTI_SELECT_MODE, mutiMode); bundle.putInt(Extras.EXTRA_MUTI_SELECT_SIZE_LIMIT, mutiSelectLimitSize); return bundle; } @Override public void onPhotoSingleClick(List<PhotoInfo> photos, int position) { if(isMutiMode){ PickerAlbumPreviewActivity.start(this, photos, position, isSupportOriginal, isSendOriginalImage, hasSelectList, mutiSelectLimitSize); }else{ if(photos != null){ PhotoInfo photo = photos.get(position); List<PhotoInfo> selectList = new ArrayList<PhotoInfo>(); selectList.add(photo); setResult(RESULT_OK, PickerContract.makeDataIntent(selectList, false)); finish(); } } } @Override public void onPhotoSelectClick(PhotoInfo selectPhoto) { if(selectPhoto == null) return; // check boolean isChoose = selectPhoto.isChoose(); if(isChoose){ boolean isSelect = checkSelectPhoto(selectPhoto); if(!isSelect){ addSelectPhoto(selectPhoto); } }else{ removeSelectPhoto(selectPhoto); } // update bottom bar updateSelectBtnStatus(); } private boolean checkSelectPhoto(PhotoInfo photo){ boolean isSelect = false; for(int i = 0; i < hasSelectList.size(); i++){ PhotoInfo select = hasSelectList.get(i); if(select.getImageId() == photo.getImageId()){ isSelect = true; break; } } return isSelect; } private void removeSelectPhoto(PhotoInfo photo){ Iterator<PhotoInfo> lIterator = hasSelectList.iterator(); while (lIterator.hasNext()) { PhotoInfo select = lIterator.next(); if(select.getImageId() == photo.getImageId()) { lIterator.remove(); } } } private void addSelectPhoto(PhotoInfo photo){ hasSelectList.add(photo); } private void resetSelectPhotos(List<PhotoInfo> photos){ if(hasSelectList != null){ hasSelectList.clear(); }else{ hasSelectList = new ArrayList<PhotoInfo>(); } hasSelectList.addAll(photos); } private void updateSelectBtnStatus(){ int selectSize = hasSelectList.size(); if(selectSize > 0){ pickerPreview.setEnabled(true); pickerSend.setEnabled(true); pickerSend.setText(String.format(this.getResources().getString( R.string.picker_image_send_select), selectSize)); }else{ pickerPreview.setEnabled(false); pickerSend.setEnabled(false); pickerSend.setText(R.string.picker_image_send); } } @Override public void onClick(View v) { if (v.getId() == R.id.picker_bottombar_preview) { PickerAlbumPreviewActivity.start(this, hasSelectList, 0, isSupportOriginal, isSendOriginalImage, hasSelectList, mutiSelectLimitSize); } else if (v.getId() == R.id.picker_bottombar_select) { setResult(RESULT_OK, PickerContract.makeDataIntent(hasSelectList, isSendOriginalImage)); finish(); } } @Override public void onBackPressed() { if(isAlbumPage){ finish(); }else { backToAlbumPage(); } } private void backToAlbumPage(){ setTitle(R.string.picker_image_folder); isAlbumPage = true; pickerAlbumLayout.setVisibility(View.VISIBLE); pickerPhotosLayout.setVisibility(View.GONE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RequestCode.PICKER_IMAGE_PREVIEW) { if (resultCode == RESULT_OK) { if(data != null){ setResult(RESULT_OK, new Intent(data)); finish(); } } else if(resultCode == PickerAlbumPreviewActivity.RESULT_FROM_USER){ if(data != null){ // update photo fragment isSendOriginalImage = data.getBooleanExtra(Extras.EXTRA_IS_ORIGINAL, false); List<PhotoInfo> list = PickerContract.getPhotos(data); if(photoFragment != null && list != null){ photoFragment.updateGridview(list); } // update select photo list List<PhotoInfo> selectList = PickerContract.getSelectPhotos(data); resetSelectPhotos(selectList); updateSelectBtnStatus(); if(photoFragment != null && hasSelectList != null){ photoFragment.updateSelectedForAdapter(hasSelectList.size()); } } } } } @Override protected void onStart() { super.onStart(); PickerConfig.checkImageLoaderConfig(this); } @Override protected void onDestroy() { super.onDestroy(); PickerlImageLoadTool.clear(); } }