package com.hpw.myapp.widget.imageselector.view;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.WindowManager;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.hpw.mvpframe.base.CoreBaseActivity;
import com.hpw.myapp.R;
import com.hpw.myapp.widget.imageselector.model.LocalMedia;
import com.hpw.myapp.widget.imageselector.widget.PreviewViewPager;
import java.util.ArrayList;
import java.util.List;
public class ImagePreviewActivity extends CoreBaseActivity {
public static final int REQUEST_PREVIEW = 68;
public static final String EXTRA_PREVIEW_LIST = "previewList";
public static final String EXTRA_PREVIEW_SELECT_LIST = "previewSelectList";
public static final String EXTRA_MAX_SELECT_NUM = "maxSelectNum";
public static final String EXTRA_POSITION = "position";
public static final String OUTPUT_LIST = "outputList";
public static final String OUTPUT_ISDONE = "isDone";
private LinearLayout barLayout;
private RelativeLayout selectBarLayout;
private Toolbar toolbar;
private TextView doneText;
private CheckBox checkboxSelect;
private PreviewViewPager viewPager;
private int position;
private int maxSelectNum;
private List<LocalMedia> images = new ArrayList<>();
private List<LocalMedia> selectImages = new ArrayList<>();
private boolean isShowBar = true;
public static void startPreview(Activity context, List<LocalMedia> images, List<LocalMedia> selectImages, int maxSelectNum, int position) {
Intent intent = new Intent(context, ImagePreviewActivity.class);
intent.putExtra(EXTRA_PREVIEW_LIST, (ArrayList) images);
intent.putExtra(EXTRA_PREVIEW_SELECT_LIST, (ArrayList) selectImages);
intent.putExtra(EXTRA_POSITION, position);
intent.putExtra(EXTRA_MAX_SELECT_NUM, maxSelectNum);
context.startActivityForResult(intent, REQUEST_PREVIEW);
}
@Override
public int getLayoutId() {
return R.layout.activity_image_preview;
}
@Override
public void initView(Bundle savedInstanceState) {
initView();
registerListener();
}
public void initView() {
images = (List<LocalMedia>) getIntent().getSerializableExtra(EXTRA_PREVIEW_LIST);
selectImages = (List<LocalMedia>) getIntent().getSerializableExtra(EXTRA_PREVIEW_SELECT_LIST);
maxSelectNum = getIntent().getIntExtra(EXTRA_MAX_SELECT_NUM, 9);
position = getIntent().getIntExtra(EXTRA_POSITION, 1);
barLayout = (LinearLayout) findViewById(R.id.bar_layout);
selectBarLayout = (RelativeLayout) findViewById(R.id.select_bar_layout);
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle((position + 1) + "/" + images.size());
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.mipmap.ic_back);
doneText = (TextView) findViewById(R.id.done_text);
onSelectNumChange();
checkboxSelect = (CheckBox) findViewById(R.id.checkbox_select);
onImageSwitch(position);
viewPager = (PreviewViewPager) findViewById(R.id.preview_pager);
viewPager.setAdapter(new SimpleFragmentAdapter(getSupportFragmentManager()));
viewPager.setCurrentItem(position);
}
public void registerListener() {
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
toolbar.setTitle(position + 1 + "/" + images.size());
onImageSwitch(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onDoneClick(false);
}
});
checkboxSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked = checkboxSelect.isChecked();
if (selectImages.size() >= maxSelectNum && isChecked) {
Toast.makeText(ImagePreviewActivity.this, getString(R.string.message_max_num, maxSelectNum), Toast.LENGTH_LONG).show();
checkboxSelect.setChecked(false);
return;
}
LocalMedia image = images.get(viewPager.getCurrentItem());
if (isChecked) {
selectImages.add(image);
} else {
for (LocalMedia media : selectImages) {
if (media.getPath().equals(image.getPath())) {
selectImages.remove(media);
break;
}
}
}
onSelectNumChange();
}
});
doneText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onDoneClick(true);
}
});
}
public class SimpleFragmentAdapter extends FragmentPagerAdapter {
public SimpleFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return ImagePreviewFragment.getInstance(images.get(position).getPath());
}
@Override
public int getCount() {
return images.size();
}
}
public void onSelectNumChange() {
boolean enable = selectImages.size() != 0;
doneText.setEnabled(enable);
if (enable) {
doneText.setText(getString(R.string.done_num, selectImages.size(), maxSelectNum));
} else {
doneText.setText(R.string.done);
}
}
public void onImageSwitch(int position) {
checkboxSelect.setChecked(isSelected(images.get(position)));
}
public boolean isSelected(LocalMedia image) {
for (LocalMedia media : selectImages) {
if (media.getPath().equals(image.getPath())) {
return true;
}
}
return false;
}
private void hideStatusBar() {
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
}
private void showStatusBar() {
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
}
public void switchBarVisibility() {
barLayout.setVisibility(isShowBar ? View.GONE : View.VISIBLE);
toolbar.setVisibility(isShowBar ? View.GONE : View.VISIBLE);
selectBarLayout.setVisibility(isShowBar ? View.GONE : View.VISIBLE);
if (isShowBar) {
hideStatusBar();
} else {
showStatusBar();
}
isShowBar = !isShowBar;
}
public void onDoneClick(boolean isDone){
Intent intent = new Intent();
intent.putExtra(OUTPUT_LIST,(ArrayList)selectImages);
intent.putExtra(OUTPUT_ISDONE,isDone);
setResult(RESULT_OK,intent);
finish();
}
}