package com.ody.photopicker;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.ody.photopicker.entity.Photo;
import com.ody.photopicker.event.OnItemCheckListener;
import com.ody.photopicker.fragment.ImagePagerFragment;
import com.ody.photopicker.fragment.PhotoPickerFragment;
import java.util.ArrayList;
import java.util.List;
import static android.widget.Toast.LENGTH_LONG;
public class PhotoPickerActivity extends AppCompatActivity {
private PhotoPickerFragment pickerFragment;
private ImagePagerFragment imagePagerFragment;
private MenuItem menuDoneItem;
private int maxCount = PhotoPicker.DEFAULT_MAX_COUNT;
/**
* to prevent multiple calls to inflate menu
*/
private boolean menuIsInflated = false;
private boolean showGif = false;
private int columnNumber = PhotoPicker.DEFAULT_COLUMN_NUMBER;
private ArrayList<String> originalPhotos = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean showCamera = getIntent().getBooleanExtra(PhotoPicker.EXTRA_SHOW_CAMERA, true);
boolean showGif = getIntent().getBooleanExtra(PhotoPicker.EXTRA_SHOW_GIF, false);
boolean previewEnabled = getIntent().getBooleanExtra(PhotoPicker.EXTRA_PREVIEW_ENABLED, true);
setShowGif(showGif);
setContentView(R.layout.__picker_activity_photo_picker);
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
setTitle(R.string.__picker_title);
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setDisplayHomeAsUpEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
actionBar.setElevation(25);
}
maxCount = getIntent().getIntExtra(PhotoPicker.EXTRA_MAX_COUNT, PhotoPicker.DEFAULT_MAX_COUNT);
columnNumber = getIntent().getIntExtra(PhotoPicker.EXTRA_GRID_COLUMN, PhotoPicker.DEFAULT_COLUMN_NUMBER);
originalPhotos = getIntent().getStringArrayListExtra(PhotoPicker.EXTRA_ORIGINAL_PHOTOS);
pickerFragment = (PhotoPickerFragment) getSupportFragmentManager().findFragmentByTag("tag");
if (pickerFragment == null) {
pickerFragment = PhotoPickerFragment
.newInstance(showCamera, showGif, previewEnabled, columnNumber, maxCount, originalPhotos);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, pickerFragment, "tag")
.commit();
getSupportFragmentManager().executePendingTransactions();
}
pickerFragment.getPhotoGridAdapter().setOnItemCheckListener(new OnItemCheckListener() {
@Override
public boolean onItemCheck(int position, Photo photo, final int selectedItemCount) {
menuDoneItem.setEnabled(selectedItemCount > 0);
if (maxCount <= 1) {
List<String> photos = pickerFragment.getPhotoGridAdapter().getSelectedPhotos();
if (!photos.contains(photo.getPath())) {
photos.clear();
pickerFragment.getPhotoGridAdapter().notifyDataSetChanged();
}
return true;
}
if (selectedItemCount > maxCount) {
Toast.makeText(getActivity(), getString(R.string.__picker_over_max_count_tips, maxCount),
LENGTH_LONG).show();
return false;
}
menuDoneItem.setTitle(getString(R.string.__picker_done_with_count, selectedItemCount, maxCount));
return true;
}
});
}
/**
* Overriding this method allows us to run our exit animation first, then exiting
* the activity when it complete.
*/
@Override
public void onBackPressed() {
if (imagePagerFragment != null && imagePagerFragment.isVisible()) {
imagePagerFragment.runExitAnimation(new Runnable() {
public void run() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
}
}
});
} else {
super.onBackPressed();
}
}
public void addImagePagerFragment(ImagePagerFragment imagePagerFragment) {
this.imagePagerFragment = imagePagerFragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.container, this.imagePagerFragment)
.addToBackStack(null)
.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!menuIsInflated) {
getMenuInflater().inflate(R.menu.__picker_menu_picker, menu);
menuDoneItem = menu.findItem(R.id.done);
if (originalPhotos != null && originalPhotos.size() > 0) {
menuDoneItem.setEnabled(true);
menuDoneItem.setTitle(
getString(R.string.__picker_done_with_count, originalPhotos.size(), maxCount));
} else {
menuDoneItem.setEnabled(false);
}
menuIsInflated = true;
return true;
}
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
super.onBackPressed();
return true;
}
if (item.getItemId() == R.id.done) {
Intent intent = new Intent();
ArrayList<String> selectedPhotos = pickerFragment.getPhotoGridAdapter().getSelectedPhotoPaths();
intent.putStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS, selectedPhotos);
setResult(RESULT_OK, intent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public PhotoPickerActivity getActivity() {
return this;
}
public boolean isShowGif() {
return showGif;
}
public void setShowGif(boolean showGif) {
this.showGif = showGif;
}
}