package com.eighteengray.procamera.activity; import com.eighteengray.commonutillibrary.ImageUtils; import com.eighteengray.procamera.R; import com.eighteengray.procamera.bean.ImageFolder; import com.eighteengray.procamera.bean.SaveImage; import com.eighteengray.procamera.component.DaggerAlbumComponent; import com.eighteengray.procamera.contract.IAlbumContract; import com.eighteengray.procamera.module.PresenterModule; import com.eighteengray.procamera.presenter.AlbumPresenter; import com.eighteengray.procamera.widget.baserecycler.BaseRecyclerAdapter; import com.eighteengray.procamera.widget.baserecycler.BaseRecyclerViewHolder; import com.eighteengray.procamera.widget.dialogfragment.ImageFoldersDialogFragment; import com.eighteengray.procameralibrary.common.Constants; import com.eighteengray.procameralibrary.dataevent.ImageFolderEvent; import android.content.ContentResolver; import android.content.Intent; import android.graphics.Bitmap; import android.media.ThumbnailUtils; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.TextView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * 修改方案: * AlbumActivity作为View,实现IView方法。 * 通过Dagger注入一个Presenter,AlbumActivity执行Presenter的方法。 * Presenter会先执行business中业务方法拿到数据,然后执行IView更新界面。business中业务方法返回Observerable。 * business中业务方法,会调用model中持久层方法,无论是本地获取数据,还是retrofit/okhttp网络获取数据,全部都封装成Observerable返回。 */ public class AlbumActivity extends BaseActivity implements IAlbumContract.IView { @BindView(R.id.iv_back_album) ImageView iv_back_album; @BindView(R.id.tv_done_album) TextView tv_done_album; @BindView(R.id.rcv_pics_album) RecyclerView rcv_pics_album; BaseRecyclerAdapter<String> picsAdapter; @BindView(R.id.tv_select_album) TextView tv_select_album; private ContentResolver mContentResolver; private int currentImageFolderNum = 1; private ArrayList<ImageFolder> imageFolderArrayList = new ArrayList<>(); @Inject AlbumPresenter albumPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_album); ButterKnife.bind(this); mContentResolver = getContentResolver(); EventBus.getDefault().register(this); initView(); } private void initView() { //图片表格 GridLayoutManager gridLayoutManager = new GridLayoutManager(AlbumActivity.this, 3); rcv_pics_album.setLayoutManager(gridLayoutManager); picsAdapter = new BaseRecyclerAdapter<String>(R.layout.grid_item_picture) { @Override public void setData2ViewR(BaseRecyclerViewHolder baseRecyclerViewHolder, final String item, int position) { Bitmap bitmap = ImageUtils.getBitmapFromPath(item, 400, 400); ImageView imageView = baseRecyclerViewHolder.getViewById(R.id.iv_item_grid); imageView.setImageBitmap(bitmap); imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(AlbumActivity.this, ImageProcessActivity.class); intent.putExtra("imagePath", item); startActivity(intent); } }); } }; rcv_pics_album.setAdapter(picsAdapter); tv_select_album.setText("所有图片"); } @Override protected void onResume() { super.onResume(); DaggerAlbumComponent.builder().presenterModule(new PresenterModule(this)).build().inject(this); //获取数据 albumPresenter.getAlbumData(AlbumActivity.this); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } @OnClick({R.id.iv_back_album, R.id.tv_done_album, R.id.tv_select_album}) public void click(View view) { switch (view.getId()) { case R.id.iv_back_album: finish(); break; case R.id.tv_done_album: finish(); break; case R.id.tv_select_album: ImageFoldersDialogFragment imageFoldersDialogFragment = new ImageFoldersDialogFragment(); Bundle bundle = new Bundle(); bundle.putSerializable(Constants.IMAGEFOLDERS, imageFolderArrayList); bundle.putInt(Constants.CURRENTFOLDERNUM, currentImageFolderNum); imageFoldersDialogFragment.setArguments(bundle); imageFoldersDialogFragment.show(getSupportFragmentManager(), ""); break; } } @Subscribe(threadMode = ThreadMode.MAIN) public void onImageFolderSelected(ImageFolderEvent imageFolderEvent) { currentImageFolderNum = imageFolderEvent.getCurrentImageFolderNum(); if(imageFolderArrayList != null && imageFolderArrayList.size() > 0) { picsAdapter.setData(imageFolderArrayList.get(currentImageFolderNum).getImagePathList()); } tv_select_album.setText(imageFolderArrayList.get(currentImageFolderNum).getName()); } @Override public void setAdapterData(List<ImageFolder> imageFolders) { imageFolderArrayList = (ArrayList<ImageFolder>) imageFolders; if(imageFolderArrayList != null && imageFolderArrayList.size() > 0) { picsAdapter.setData(imageFolderArrayList.get(currentImageFolderNum).getImagePathList()); } } }