package net.coding.program.common.photopick;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.Toast;
import net.coding.program.ImagePagerFragment_;
import net.coding.program.R;
import net.coding.program.common.umeng.UmengActivity;
import net.coding.program.maopao.MaopaoAddActivity;
import java.util.ArrayList;
public class PhotoPickDetailActivity extends UmengActivity {
public static final String PICK_DATA = "PICK_DATA";
public static final String ALL_DATA = "ALL_DATA";
public static final String FOLDER_NAME = "FOLDER_NAME";
public static final String PHOTO_BEGIN = "PHOTO_BEGIN";
public static final String EXTRA_MAX = "EXTRA_MAX";
private ArrayList<ImageInfo> mPickPhotos;
private ArrayList<ImageInfo> mAllPhotos;
private ViewPager mViewPager;
private CheckBox mCheckBox;
private int mMaxPick = MaopaoAddActivity.PHOTO_MAX_COUNT;
private MenuItem mMenuSend;
private final String actionbarTitle = "%d/%d";
Cursor mCursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_pick_detail);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Bundle extras = getIntent().getExtras();
mPickPhotos = (ArrayList<ImageInfo>) extras.getSerializable(PICK_DATA);
mAllPhotos = (ArrayList<ImageInfo>) extras.getSerializable(ALL_DATA);
int mBegin = extras.getInt(PHOTO_BEGIN, 0);
mMaxPick = extras.getInt(EXTRA_MAX, 5);
if (mAllPhotos == null) {
String folderName = extras.getString(FOLDER_NAME, "");
String where = folderName;
if (!folderName.isEmpty()) {
where = String.format("%s='%s'",
MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
folderName);
}
mCursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA},
where,
null,
MediaStore.MediaColumns.DATE_ADDED + " DESC");
}
ImagesAdapter adapter = new ImagesAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.viewPager);
mViewPager.setAdapter(adapter);
mViewPager.setCurrentItem(mBegin);
mCheckBox = (CheckBox) findViewById(R.id.checkbox);
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
updateDisplay(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
mCheckBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = mViewPager.getCurrentItem();
String uri = getImagePath(pos);
if (((CheckBox) v).isChecked()) {
if (mPickPhotos.size() >= mMaxPick) {
((CheckBox) v).setChecked(false);
String s = String.format("最多只能选择%d张", mMaxPick);
Toast.makeText(PhotoPickDetailActivity.this, s, Toast.LENGTH_SHORT).show();
return;
}
addPicked(uri);
} else {
removePicked(uri);
}
updateDataPickCount();
}
});
updateDisplay(mBegin);
}
@Override
protected void onDestroy() {
if (mCursor != null) {
mCursor.close();
mCursor = null;
}
super.onDestroy();
}
private void updateDisplay(int pos) {
String uri = getImagePath(pos);
mCheckBox.setChecked(isPicked(uri));
getSupportActionBar().setTitle(String.format(actionbarTitle, pos + 1, getImageCount()));
}
private boolean isPicked(String path) {
for (ImageInfo item : mPickPhotos) {
if (item.path.equals(path)) {
return true;
}
}
return false;
}
private void addPicked(String path) {
if (!isPicked(path)) {
mPickPhotos.add(new ImageInfo(path));
}
}
private void removePicked(String path) {
for (int i = 0; i < mPickPhotos.size(); ++i) {
if (mPickPhotos.get(i).path.equals(path)) {
mPickPhotos.remove(i);
return;
}
}
}
@Override
public void onBackPressed() {
selectAndSend(false);
}
private void selectAndSend(boolean send) {
Intent intent = new Intent();
intent.putExtra("data", mPickPhotos);
intent.putExtra("send", send);
setResult(Activity.RESULT_OK, intent);
finish();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_photo_pick_detail, menu);
mMenuSend = menu.getItem(0);
updateDataPickCount();
return true;
}
private void updateDataPickCount() {
String send = String.format("确定(%d/%d)", mPickPhotos.size(), mMaxPick);
mMenuSend.setTitle(send);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
selectAndSend(false);
return true;
} else if (id == R.id.action_send) {
selectAndSend(true);
return true;
}
return super.onOptionsItemSelected(item);
}
class ImagesAdapter extends FragmentStatePagerAdapter {
ImagesAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
ImagePagerFragment_ fragment = new ImagePagerFragment_();
Bundle bundle = new Bundle();
String path = getImagePath(position);
bundle.putString("uri", ImageInfo.pathAddPreFix(path));
fragment.setArguments(bundle);
return fragment;
}
@Override
public int getCount() {
return getImageCount();
}
}
String getImagePath(int pos) {
if (mAllPhotos != null) {
return mAllPhotos.get(pos).path;
} else {
String path = "";
if (mCursor.moveToPosition(pos)) {
path = ImageInfo.pathAddPreFix(mCursor.getString(1));
}
return path;
}
}
int getImageCount() {
if (mAllPhotos != null) {
return mAllPhotos.size();
} else if (mCursor != null) {
return mCursor.getCount();
} else {
return 0;
}
}
}