package cn.flightfeather.thirdapp.activity;
|
|
import android.content.DialogInterface;
|
import android.content.Intent;
|
import android.database.Cursor;
|
import android.net.Uri;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.os.Environment;
|
import android.provider.MediaStore;
|
import android.support.v4.content.FileProvider;
|
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AppCompatActivity;
|
import android.view.MenuItem;
|
import android.view.View;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.ping.greendao.gen.MediafileDao;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.io.Serializable;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
import cn.flightfeather.thirdapp.CommonApplication;
|
import cn.flightfeather.thirdapp.R;
|
import cn.flightfeather.thirdapp.bean.Mediafile;
|
import cn.flightfeather.thirdapp.bean.Subtask;
|
import cn.flightfeather.thirdapp.bean.vo.GitlistVo;
|
import cn.flightfeather.thirdapp.task.DownloadAndSetImageTask;
|
import cn.flightfeather.thirdapp.task.SetImageTask;
|
import cn.flightfeather.thirdapp.util.DateFormatter;
|
import cn.flightfeather.thirdapp.util.UUIDGenerator;
|
|
public class GitDetailActivity extends AppCompatActivity {
|
private TextView tv_gitName;
|
private TextView tv_gitDes;
|
private TextView tv_gitTime;
|
private ImageView iv_photo1;
|
private ImageView iv_photo2;
|
private ImageView iv_photo3;
|
private List<ImageView > ivPhotoList;
|
private LinearLayout ll_shareAll;
|
private List<Mediafile> mediaFileList;
|
private GitlistVo gitlistVoCurrent;
|
private Subtask subTaskSelected;
|
private MediafileDao mediafileDao;
|
private CommonApplication application;
|
private final int TAKE_GIT_PHOTO =10;
|
private final int PICK_GIT_PHOTO =11;
|
private final int VIEW_GIT_PHOTO =12;
|
private String inspectionGuid ="";
|
private String scenceAddress = "";
|
private File fileCurrent;
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_git_detail);
|
application = (CommonApplication) getApplication();
|
initUI();
|
initData();
|
}
|
//初始化界面
|
private void initUI() {
|
getSupportActionBar().setTitle("技防措施详情");
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
tv_gitName = (TextView) findViewById(R.id.tv_git_name);
|
tv_gitTime = (TextView) findViewById(R.id.tv_git_time);
|
tv_gitDes = (TextView) findViewById(R.id.tv_git_des);
|
iv_photo1 = (ImageView) findViewById(R.id.iv_git_photo1);
|
iv_photo2 = (ImageView) findViewById(R.id.iv_git_photo2);
|
iv_photo3 = (ImageView) findViewById(R.id.iv_git_photo3);
|
ll_shareAll = (LinearLayout) findViewById(R.id.ll_share_all_git);
|
ll_shareAll.setVisibility(View.GONE);
|
}
|
//初始化数据
|
private void initData() {
|
Intent intent = getIntent();
|
gitlistVoCurrent = (GitlistVo) intent.getSerializableExtra("gitlistVo");
|
subTaskSelected = (Subtask) intent.getSerializableExtra("subTask");
|
inspectionGuid = intent.getStringExtra("inspectionGuid");
|
scenceAddress = intent.getStringExtra("scenseAddress");
|
|
if (gitlistVoCurrent!=null&&subTaskSelected!=null){
|
tv_gitName.setText(gitlistVoCurrent.getName());
|
tv_gitDes.setText(gitlistVoCurrent.getDesc());
|
tv_gitTime.setText(DateFormatter.dateTimeFormat.format(gitlistVoCurrent.getCreatedate()));
|
ivPhotoList = new ArrayList<>();
|
ivPhotoList.add(iv_photo1);
|
ivPhotoList.add(iv_photo2);
|
ivPhotoList.add(iv_photo3);
|
|
mediafileDao = application.getDaoSession().getMediafileDao();
|
mediaFileList = new ArrayList<>();
|
mediaFileList.addAll(gitlistVoCurrent.getMediafileList());
|
mediaFileList.addAll(mediafileDao.queryBuilder().where(MediafileDao.Properties.Businessguid.eq(gitlistVoCurrent.getGuid())).where(MediafileDao.Properties.Remark.eq("未上传")).list());
|
loadImage(mediaFileList);
|
|
}else {
|
Toast.makeText(this, "获取数据失败", Toast.LENGTH_SHORT).show();
|
}
|
|
|
}
|
//加载并显示图片
|
private void loadImage(List<Mediafile> mediafileList){
|
if (mediafileList!=null&&mediafileList.size()>0){
|
for (int i = 0;i<mediafileList.size();i++){
|
Mediafile mediaFile = mediafileList.get(i);
|
File file =getFileFromMediaFile(mediaFile);
|
if (file.exists()){
|
SetImageTask task1 = new SetImageTask(file, ivPhotoList.get(i), this);
|
task1.execute();
|
}else {
|
DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFile,ivPhotoList.get(i),this);
|
task.execute();
|
}
|
|
}
|
}
|
refreshImageListener(false);
|
|
}
|
private File getFileFromMediaFile(Mediafile mediafile){
|
File file = new File(Environment.getExternalStorageDirectory(), (mediafile.getPath() + mediafile.getDescription()));
|
return file;
|
}
|
|
private List<File> getFilesFromMediaFile(List<Mediafile> mediafiles){
|
List<File> files = new ArrayList<>();
|
for (Mediafile m : mediafiles) {
|
File file = new File(Environment.getExternalStorageDirectory(), (m.getPath() + m.getDescription()));
|
files.add(file);
|
}
|
|
return files;
|
}
|
//刷新图片和点击事件
|
private void refreshImageListener(boolean resetImage){
|
if (mediaFileList.size()>0){
|
ivPhotoList.get(mediaFileList.size()-1).setImageResource(R.drawable.icon_add_photo_blank);
|
}
|
for (int i = 0;i<mediaFileList.size();i++){
|
if (resetImage){
|
SetImageTask task1 = new SetImageTask(getFileFromMediaFile(mediaFileList.get(i)), ivPhotoList.get(i), this);
|
task1.execute();
|
}
|
ivPhotoList.get(i).setOnClickListener(showPhotoClicker(getFilesFromMediaFile(mediaFileList),i,mediaFileList));
|
}
|
|
if (mediaFileList.size() < 3) {
|
ImageView iv_addProblemPhoto = ivPhotoList.get(mediaFileList.size());
|
iv_addProblemPhoto.setImageResource(R.drawable.icon_add_photo);
|
iv_addProblemPhoto.setOnClickListener(addPhotoClickListener());
|
if (mediaFileList.size()<2){
|
ivPhotoList.get(mediaFileList.size()+1).setImageResource(R.drawable.icon_add_photo_blank);
|
}
|
}
|
|
|
}
|
|
//添加图片用的点击事件
|
public View.OnClickListener addPhotoClickListener() {
|
View.OnClickListener listener = new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
String[] items = {"拍照", "从相册选取"};
|
AlertDialog.Builder dialog = new AlertDialog.Builder(GitDetailActivity.this);
|
dialog.setItems(items, new DialogInterface.OnClickListener() {
|
@Override
|
public void onClick(DialogInterface dialog, int which) {
|
if (which == 0) {
|
takePhoto(TAKE_GIT_PHOTO);
|
} else if (which == 1) {
|
pickPhoto(PICK_GIT_PHOTO);
|
}
|
}
|
});
|
dialog.show();
|
}
|
};
|
return listener;
|
}
|
|
//从相册中选择图片
|
public void pickPhoto(int type) {
|
Intent intent = new Intent();
|
intent.setAction(Intent.ACTION_PICK);//Pick an item fromthe data
|
intent.setType("image/*");//从所有图片中进行选择
|
startActivityForResult(intent, type);
|
}
|
//拍照
|
public void takePhoto(int type) {
|
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
//判断要跳转的目的地是否为空
|
if (intent.resolveActivity(getPackageManager()) != null) {
|
File path = getNewGitFile();
|
|
if (path!=null){
|
//安卓7.0适配
|
Uri uri;
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
uri = FileProvider.getUriForFile(GitDetailActivity.this, "cn.flightfeather.thirdapp.fileProvider", path);
|
} else {
|
uri = Uri.fromFile(path);
|
}
|
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
|
fileCurrent = path;
|
startActivityForResult(intent, type);
|
}else {
|
Toast.makeText(application, "错误,获取subtask失败", Toast.LENGTH_SHORT).show();
|
}
|
|
}
|
}
|
|
private File getNewGitFile(){
|
File newFile = null;
|
if (subTaskSelected!=null){
|
java.util.Calendar calendar = java.util.Calendar.getInstance();
|
calendar.setTime(subTaskSelected.getExecutionstarttime());
|
String parent = "FlightFeather/Photo/" + subTaskSelected.getDistrictname() + "/" + calendar.get(java.util.Calendar.YEAR) + "年" + (calendar.get(java.util.Calendar.MONTH) + 1) + "月/" + (calendar.get(java.util.Calendar.MONTH) + 1) + "月" + calendar.get(java.util.Calendar.DAY_OF_MONTH) + "日/" + subTaskSelected.getScensename() + "/技防措施/";
|
String fileName = gitlistVoCurrent.getName()+ " "+ UUIDGenerator.generateUUID(4)+".jpg";
|
newFile = new File(Environment.getExternalStorageDirectory(), (parent + fileName));
|
newFile.getParentFile().mkdirs();
|
}else {
|
Toast.makeText(application, "无subtask", Toast.LENGTH_SHORT).show();
|
}
|
|
return newFile;
|
}
|
|
|
//跳转到photoviewer
|
private View.OnClickListener showPhotoClicker(final List<File> files, final int position, final List<Mediafile> mediafiles){
|
View.OnClickListener listener = new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
Intent intent = new Intent(GitDetailActivity.this,PhotoViewerActivity.class);
|
intent.putExtra("position",position);
|
intent.putExtra("type",PhotoViewerActivity.GIT_PHOTO);
|
intent.putExtra(PhotoViewerActivity.PARA_MEDIAS, (Serializable) mediafiles);
|
intent.putExtra("deletable",true);
|
intent.putExtra(PhotoViewerActivity.PARA_FILES, (Serializable) files);
|
startActivityForResult(intent,VIEW_GIT_PHOTO);
|
}
|
};
|
return listener;
|
}
|
|
private Mediafile newMediaFile(File file){
|
Mediafile mediaFile = new Mediafile();
|
mediaFile.setGuid(UUIDGenerator.generate16ShortUUID());
|
mediaFile.setIguid(inspectionGuid);
|
mediaFile.setBusinessguid(gitlistVoCurrent.getGuid());
|
mediaFile.setAddress(scenceAddress);
|
mediaFile.setFiletype(1);
|
mediaFile.setBusinesstype("技防措施");
|
mediaFile.setBusinesstypeid(intToByte(2));
|
String path = file.getParent().substring(20)+"/";
|
mediaFile.setPath(path);
|
mediaFile.setDescription(file.getName());
|
mediaFile.setSavetime(new Date());
|
String exetension1 =subTaskSelected.getCitycode()+"/"+subTaskSelected.getDistrictcode()+"/"+ DateFormatter.dateFormat2.format(subTaskSelected.getExecutionstarttime())+"/"+subTaskSelected.getScenseid()+"/技防措施/";
|
mediaFile.setExtension1(exetension1);
|
mediaFile.setRemark("未上传");
|
return mediaFile;
|
|
}
|
public static byte intToByte(int x) {
|
return (byte) x;
|
}
|
@Override
|
public boolean onOptionsItemSelected(MenuItem item) {
|
switch (item.getItemId()) {
|
case android.R.id.home:
|
finish();
|
break;
|
default:
|
break;
|
}
|
return super.onOptionsItemSelected(item);
|
}
|
|
//复制文件
|
public static void copyfile(File oldfile, File newfile) throws IOException {
|
FileInputStream ins = new FileInputStream(oldfile);
|
FileOutputStream out = new FileOutputStream(newfile);
|
//自定义缓冲对象
|
byte[] b = new byte[1024];
|
int n = 0;
|
while ((n = ins.read(b)) != -1) {
|
out.write(b, 0, b.length);
|
}
|
ins.close();
|
out.close();
|
|
System.out.println("copy success");
|
}
|
@Override
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
super.onActivityResult(requestCode, resultCode, data);
|
if (requestCode ==TAKE_GIT_PHOTO&&resultCode ==RESULT_OK){
|
|
Mediafile mediafile = newMediaFile(fileCurrent);
|
mediaFileList.add(mediafile);
|
mediafileDao.insert(mediafile);
|
refreshImageListener(true);
|
|
}else if (requestCode ==PICK_GIT_PHOTO&&resultCode ==RESULT_OK){
|
Uri selectedImage = data.getData(); //获取系统返回的照片的Uri
|
String[] filePathColumn = {MediaStore.Images.Media.DATA};
|
File oldFile = null;
|
Cursor cursor = getContentResolver().query(selectedImage,
|
filePathColumn, null, null, null);//从系统表中查询指定Uri对应的照片
|
if (cursor!=null){
|
cursor.moveToFirst();
|
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
|
String picturePath = cursor.getString(columnIndex); //获取照片路径
|
oldFile = new File(picturePath);
|
cursor.close();
|
}else {
|
String a =selectedImage.getPath();
|
oldFile = new File(a);
|
}
|
File newFile = getNewGitFile();
|
try {
|
copyfile(oldFile,newFile);
|
Mediafile mediafile = newMediaFile(newFile);
|
mediaFileList.add(mediafile);
|
mediafileDao.insert(mediafile);
|
refreshImageListener(true);
|
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}else if (requestCode == VIEW_GIT_PHOTO&&resultCode ==RESULT_OK){
|
if (data!=null){
|
int position = data.getIntExtra("position",-1);
|
if (position>-1){
|
mediaFileList.remove(position);
|
refreshImageListener(true);
|
}
|
}
|
}
|
}
|
}
|