package com.yuyh.library.imgsel;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.yuyh.library.imgsel.common.Callback;
import com.yuyh.library.imgsel.common.Constant;
import com.yuyh.library.imgsel.utils.FileUtils;
import com.yuyh.library.imgsel.utils.StatusBarCompat;
import java.io.File;
import java.util.ArrayList;
public class ImgSelActivity extends FragmentActivity implements View.OnClickListener, Callback {
public static final String INTENT_RESULT = "result";
private static final int IMAGE_CROP_CODE = 1;
private static final int STORAGE_REQUEST_CODE = 1;
private ImgSelConfig config;
private RelativeLayout rlTitleBar;
private TextView tvTitle;
private Button btnConfirm;
private ImageView ivBack;
private String cropImagePath;
private ArrayList<String> result = new ArrayList<>();
public static void startActivity(Activity activity, ImgSelConfig config, int RequestCode) {
Intent intent = new Intent(activity, ImgSelActivity.class);
Constant.config = config;
activity.startActivityForResult(intent, RequestCode);
}
public static void startActivity(Fragment fragment, ImgSelConfig config, int RequestCode){
Intent intent = new Intent(fragment.getActivity(), ImgSelActivity.class);
Constant.config = config;
fragment.startActivityForResult(intent, RequestCode);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_img_sel);
Constant.imageList.clear();
config = Constant.config;
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//申请权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
STORAGE_REQUEST_CODE);
} else {
getSupportFragmentManager().beginTransaction()
.add(R.id.fmImageList, ImgSelFragment.instance(config), null)
.commit();
}
initView();
if (!FileUtils.isSdCardAvailable()) {
Toast.makeText(this, "SD卡不可用", Toast.LENGTH_SHORT).show();
}
}
private void initView() {
rlTitleBar = (RelativeLayout) findViewById(R.id.rlTitleBar);
tvTitle = (TextView) findViewById(R.id.tvTitle);
btnConfirm = (Button) findViewById(R.id.btnConfirm);
btnConfirm.setOnClickListener(this);
ivBack = (ImageView) findViewById(R.id.ivBack);
ivBack.setOnClickListener(this);
if (config != null) {
if (config.backResId != -1) {
ivBack.setImageResource(config.backResId);
}
if (config.statusBarColor != -1) {
StatusBarCompat.compat(this, config.statusBarColor);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
&& Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
rlTitleBar.setBackgroundColor(config.titleBgColor);
tvTitle.setTextColor(config.titleColor);
tvTitle.setText(config.title);
btnConfirm.setBackgroundColor(config.btnBgColor);
btnConfirm.setTextColor(config.btnTextColor);
}
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btnConfirm) {
if (Constant.imageList != null && !Constant.imageList.isEmpty()) {
exit();
}
} else if (id == R.id.ivBack) {
finish();
}
}
@Override
public void onSingleImageSelected(String path) {
if (config.needCrop) {
crop(path);
} else {
Constant.imageList.add(path);
exit();
}
}
@Override
public void onImageSelected(String path) {
btnConfirm.setText("确定(" + Constant.imageList.size() + "/" + config.maxNum + ")");
}
@Override
public void onImageUnselected(String path) {
btnConfirm.setText("确定(" + Constant.imageList.size() + "/" + config.maxNum + ")");
}
@Override
public void onCameraShot(File imageFile) {
if (imageFile != null) {
if (config.needCrop) {
crop(imageFile.getAbsolutePath());
} else {
Constant.imageList.add(imageFile.getAbsolutePath());
exit();
}
}
}
private void crop(String imagePath) {
File file = new File(FileUtils.createRootPath(this) + "/" + System.currentTimeMillis() + ".jpg");
cropImagePath = file.getAbsolutePath();
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(Uri.fromFile(new File(imagePath)), "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", config.aspectX);
intent.putExtra("aspectY", config.aspectY);
intent.putExtra("outputX", config.outputX);
intent.putExtra("outputY", config.outputY);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, IMAGE_CROP_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_CROP_CODE && resultCode == RESULT_OK) {
Constant.imageList.add(cropImagePath);
exit();
}
super.onActivityResult(requestCode, resultCode, data);
}
public void exit() {
Intent intent = new Intent();
result.clear();
result.addAll(Constant.imageList);
intent.putStringArrayListExtra(INTENT_RESULT, result);
setResult(RESULT_OK, intent);
Constant.imageList.clear();
finish();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case STORAGE_REQUEST_CODE:
if(grantResults.length >= 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
getSupportFragmentManager().beginTransaction()
.add(R.id.fmImageList, ImgSelFragment.instance(config), null)
.commitAllowingStateLoss();
} else {
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
break;
default:break;
}
}
}