package cn.flightfeather.thirdapp.activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.StrictMode; import android.support.annotation.RequiresApi; import android.support.constraint.ConstraintLayout; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.TextureMapView; import com.amap.api.maps.model.BitmapDescriptorFactory; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.ping.greendao.gen.DaoSession; import com.ping.greendao.gen.MediafileDao; import org.greenrobot.eventbus.EventBus; import java.io.File; 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.entity.Mediafile; import cn.flightfeather.thirdapp.bean.entity.Subtask; import cn.flightfeather.thirdapp.bean.vo.ProblemlistVo; import cn.flightfeather.thirdapp.model.event.ProblemEvent; import cn.flightfeather.thirdapp.module.base.BaseTakePicActivity; import cn.flightfeather.thirdapp.module.inspection.InspectionDetailActivity; import cn.flightfeather.thirdapp.task.DownloadAndSetImageTask; import cn.flightfeather.thirdapp.task.SetImageTask; import cn.flightfeather.thirdapp.util.DateFormatter; import cn.flightfeather.thirdapp.util.Domain; import cn.flightfeather.thirdapp.util.UUIDGenerator; import cn.flightfeather.thirdapp.util.file.FileUtil; import cn.flightfeather.thirdapp.util.photo.PhotoUtil; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Path; import retrofit2.http.Url; public class ProblemDetailActivity extends AppCompatActivity implements View.OnClickListener{ private TextView tv_problemName; private TextView tv_location; private TextView tv_problemChange; private TextView tv_problemRecheck; private TextView tv_problemTime; private ProblemlistVo problemlistVoCurrent; private Subtask subTaskSelected; private List mediafileList; private ImageView iv_problemPhoto1; private ImageView iv_problemPhoto2; private ImageView iv_problemPhoto3; private ImageView iv_changePhoto1; private ImageView iv_changePhoto2; private ImageView iv_changePhoto3; private MediafileDao mediafileDao; private CommonApplication application; private List imageViewProblemList; private List imageViewChangeList; private ProblemDetailService problemImageService; private ProblemDetailService problemDataService; private final int PROBLEM_PHOTO =11; private final int CHANGE_PHOTO = 12; private final int VIEW_PROBLEM_PHOTO =17; private final int VIEW_CHANGE_PHOTO =18; private Button btn_test; private Mediafile mediafileCurrent; private int imageViewPosition =0; private TextureMapView tmv_main; private AMap aMap; private LinearLayout ll_shareAllProblem; private LinearLayout ll_shareAllChange; private boolean editable = false; private LinearLayout ll_change; private Switch sw_change; private TextView tv_editChangeType; private TextView tv_editChangeResult; private TextView tv_editChangeAdvise; private TextView tv_changeType; private TextView tv_changeResult; private TextView tv_changeAdvise; private boolean isEdited = false; private List problemMediaFileList; private List changeMediaFileList; private Switch sw_recheck; private LinearLayout ll_recheck; private TextView tv_recheckResult; private TextView tv_editRecheckResult; private TextView tv_recheckDes; private TextView tv_editRecheckDes; private LinearLayout ll_change_advise_read; private TextView tv_change_advise_read; private ConstraintLayout cl_submit; private Button btn_fail; private Button btn_pass; private Intent intent; private int type; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_problem_detail); application = (CommonApplication) getApplication(); intent = getIntent(); problemlistVoCurrent = (ProblemlistVo) intent.getSerializableExtra("problemlistVo"); subTaskSelected = (Subtask) intent.getSerializableExtra("subTaskSelected"); type = intent.getIntExtra("type",0); if (getSupportActionBar() != null) { String title = "问题详情"; switch (type) { case InspectionDetailActivity.PROBLEM_LIST: title = "问题详情"; break; case InspectionDetailActivity.PROBLEM_RECHECK: title = "问题复核"; break; case InspectionDetailActivity.PROBLEM_CHANGE: title = "问题整改"; break; case InspectionDetailActivity.PROBLEM_CHECK: title = "问题审核"; break; case InspectionDetailActivity.CHANGE_CHECK: title = "整改审核"; break; } getSupportActionBar().setTitle(title); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } initUI(); initDataBase(); initMap(savedInstanceState); initData(); } //初始化界面 private void initUI() { tv_problemName = (TextView) findViewById(R.id.tv_problem_name); tv_location = (TextView) findViewById(R.id.tv_problem_location); tv_problemChange = (TextView) findViewById(R.id.tv_problem_change); tv_problemRecheck = (TextView) findViewById(R.id.tv_problem_recheck); tv_problemTime = (TextView) findViewById(R.id.tv_problem_time); iv_problemPhoto1 = (ImageView) findViewById(R.id.iv_problem_photo1); iv_problemPhoto2 = (ImageView) findViewById(R.id.iv_problem_photo2); iv_problemPhoto3 = (ImageView) findViewById(R.id.iv_problem_photo3); cl_submit = findViewById(R.id.cl_submit); btn_fail = findViewById(R.id.btn_fail); btn_pass = findViewById(R.id.btn_pass); btn_pass.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (type == InspectionDetailActivity.PROBLEM_CHECK) { problemlistVoCurrent.setExtension3(Domain.PROBLEM_CHECK_PASS); problemlistVoCurrent.setRemark(application.getCurrentUser().getAcountname()); } else if (type == InspectionDetailActivity.CHANGE_CHECK) { problemlistVoCurrent.setExtension3(Domain.CHANGE_CHECK_PASS); } isEdited = true; saveCheck(); } }); btn_fail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (type == InspectionDetailActivity.PROBLEM_CHECK) { problemlistVoCurrent.setExtension3(Domain.PROBLEM_CHECK_FAIL); problemlistVoCurrent.setRemark(application.getCurrentUser().getAcountname()); } else if (type == InspectionDetailActivity.CHANGE_CHECK) { problemlistVoCurrent.setExtension3(Domain.CHANGE_CHECK_FAIL); } isEdited = true; saveCheck(); } }); if (type == InspectionDetailActivity.PROBLEM_LIST || type == InspectionDetailActivity.PROBLEM_CHANGE || type == InspectionDetailActivity.PROBLEM_CHECK || type == InspectionDetailActivity.CHANGE_CHECK) { iv_changePhoto1 = (ImageView) findViewById(R.id.iv_problem_change_photo1); iv_changePhoto2 = (ImageView) findViewById(R.id.iv_problem_change_photo2); iv_changePhoto3 = (ImageView) findViewById(R.id.iv_problem_change_photo3); ll_shareAllChange = (LinearLayout) findViewById(R.id.ll_share_all_change); } else if (type == InspectionDetailActivity.PROBLEM_RECHECK) { iv_changePhoto1 = (ImageView) findViewById(R.id.iv_recheck_photo1); iv_changePhoto2 = (ImageView) findViewById(R.id.iv_recheck_photo2); iv_changePhoto3 = (ImageView) findViewById(R.id.iv_recheck_photo3); ll_shareAllChange = (LinearLayout) findViewById(R.id.ll_share_all_recheck); } tmv_main = (TextureMapView) findViewById(R.id.tmv_main); ll_shareAllProblem = (LinearLayout) findViewById(R.id.ll_share_all_problem); ll_change_advise_read = findViewById(R.id.ll_change_advise_read); tv_change_advise_read = findViewById(R.id.tv_change_advise_read); ll_change = (LinearLayout) findViewById(R.id.ll_change); sw_change = (Switch) findViewById(R.id.sw_change); tv_editChangeType = (TextView) findViewById(R.id.tv_edit_change_type); tv_editChangeResult = (TextView) findViewById(R.id.tv_edit_change_result); tv_editChangeAdvise = (TextView) findViewById(R.id.tv_edit_change_advise); tv_changeType = (TextView) findViewById(R.id.tv_change_type); tv_changeResult = (TextView) findViewById(R.id.tv_change_result); tv_changeAdvise = (TextView) findViewById(R.id.tv_change_advise); sw_recheck = (Switch) findViewById(R.id.sw_recheck); ll_recheck = (LinearLayout) findViewById(R.id.ll_recheck); tv_recheckResult = (TextView) findViewById(R.id.tv_recheck_result); tv_recheckDes = (TextView) findViewById(R.id.tv_recheck_des); tv_editRecheckResult = (TextView) findViewById(R.id.tv_edit_recheck_result); tv_editRecheckDes = (TextView) findViewById(R.id.tv_edit_recheck_des); btn_test = (Button) findViewById(R.id.btn_test); imageViewProblemList = new ArrayList<>(); imageViewProblemList.add(iv_problemPhoto1); imageViewProblemList.add(iv_problemPhoto2); imageViewProblemList.add(iv_problemPhoto3); imageViewChangeList = new ArrayList<>(); imageViewChangeList.add(iv_changePhoto1); imageViewChangeList.add(iv_changePhoto2); imageViewChangeList.add(iv_changePhoto3); tv_editChangeType.setOnClickListener(this); tv_editChangeResult.setOnClickListener(this); tv_editChangeAdvise.setOnClickListener(this); tv_editRecheckResult.setOnClickListener(this); tv_editRecheckDes.setOnClickListener(this); btn_test.setVisibility(View.GONE); btn_test.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { problemlistVoCurrent.setIschanged(true); problemlistVoCurrent.setIsrechecked(true); Call deleteMediaFile = problemDataService.updateProblemList(problemlistVoCurrent); deleteMediaFile.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.body()!=null){ Toast.makeText(application, "", Toast.LENGTH_SHORT).show(); }else if (response.errorBody()!=null){ Toast.makeText(application, "", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call call, Throwable t) { Toast.makeText(application, "", Toast.LENGTH_SHORT).show(); } }); } }); ll_shareAllProblem.setOnClickListener(shareListener(false)); ll_shareAllChange.setOnClickListener(shareListener(true)); sw_change.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b){ isEdited = true; ll_change.setVisibility(View.VISIBLE); loadChangeStatus(); }else { isEdited = false; problemlistVoCurrent.setIschanged(false); ll_change.setVisibility(View.GONE); } } }); sw_recheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if (b){ isEdited = true; ll_recheck.setVisibility(View.VISIBLE); loadRecheckStatus(); }else { isEdited = false; ll_recheck.setVisibility(View.GONE); } } }); } //加载整改状态信息并显示 private void loadChangeStatus(){ ll_change_advise_read.setVisibility(View.GONE); if (problemlistVoCurrent.getChangecatalog()!=null){ tv_changeType.setText(problemlistVoCurrent.getChangecatalog()); }else { tv_changeType.setText("待填写"); } if (problemlistVoCurrent.getChangedresult()!=null){ tv_changeResult.setText(problemlistVoCurrent.getChangedresult()); }else { tv_changeResult.setText("待填写"); } if (problemlistVoCurrent.getAdvise()!=null){ tv_changeAdvise.setText(problemlistVoCurrent.getAdvise()); }else { tv_changeAdvise.setText("待填写"); } } //加载复核状态信息并显示 private void loadRecheckStatus(){ if (problemlistVoCurrent.getRecheckresult()!=null){ tv_recheckResult.setText(problemlistVoCurrent.getRecheckresult()); }else { tv_recheckResult.setText("待填写"); } if (problemlistVoCurrent.getRecheckdescription()!=null){ tv_recheckDes.setText(problemlistVoCurrent.getRecheckdescription()); }else { tv_recheckDes.setText("待填写"); } } //初始化数据库 private void initDataBase() { DaoSession daoSession = application.getDaoSession(); mediafileDao = daoSession.getMediafileDao(); } //初始化地图 private void initMap(Bundle savedInstanceState) { tmv_main.onCreate(savedInstanceState); aMap = tmv_main.getMap(); } //初始化数据 private void initData() { problemMediaFileList = new ArrayList<>(); changeMediaFileList = new ArrayList<>(); problemImageService = application.getRetrofitImage().create(ProblemDetailService.class); problemDataService = application.getRetrofit().create(ProblemDetailService.class); editable = intent.getBooleanExtra("editable",false); if (editable){ tv_editChangeAdvise.setVisibility(View.VISIBLE); tv_editChangeResult.setVisibility(View.VISIBLE); tv_editChangeType.setVisibility(View.VISIBLE); }else { tv_editChangeAdvise.setVisibility(View.GONE); tv_editChangeResult.setVisibility(View.GONE); tv_editChangeType.setVisibility(View.GONE); } if (problemlistVoCurrent!=null){ tv_problemName.setText(problemlistVoCurrent.getProblemname()); tv_location.setText(problemlistVoCurrent.getLocation()); tv_problemTime.setText(DateFormatter.dateTimeFormat.format(problemlistVoCurrent.getTime())); if (type == InspectionDetailActivity.PROBLEM_LIST ) { sw_change.setVisibility(View.GONE); sw_recheck.setVisibility(View.GONE); cl_submit.setVisibility(View.GONE); } else if (type == InspectionDetailActivity.PROBLEM_CHECK || type == InspectionDetailActivity.CHANGE_CHECK) { sw_change.setVisibility(View.GONE); sw_recheck.setVisibility(View.GONE); cl_submit.setVisibility(View.VISIBLE); } else if (type == InspectionDetailActivity.PROBLEM_RECHECK) { sw_recheck.setVisibility(View.VISIBLE); sw_change.setVisibility(View.GONE); cl_submit.setVisibility(View.GONE); } else if (type == InspectionDetailActivity.PROBLEM_CHANGE) { sw_change.setVisibility(View.VISIBLE); sw_recheck.setVisibility(View.GONE); ll_change_advise_read.setVisibility(View.GONE); cl_submit.setVisibility(View.GONE); } if (problemlistVoCurrent.getIschanged()){ tv_problemChange.setText("已整改"); ll_change.setVisibility(View.VISIBLE); loadChangeStatus(); sw_change.setVisibility(View.GONE); if (type == InspectionDetailActivity.PROBLEM_CHECK) { cl_submit.setVisibility(View.GONE); } }else { tv_problemChange.setText("未整改"); ll_change.setVisibility(View.GONE); if (type == InspectionDetailActivity.CHANGE_CHECK) { cl_submit.setVisibility(View.GONE); } } if (problemlistVoCurrent.getAdvise()!=null){ tv_change_advise_read.setText(problemlistVoCurrent.getAdvise()); }else { tv_change_advise_read.setText("暂无建议"); } if (problemlistVoCurrent.getIsrechecked()){ tv_problemRecheck.setText("已复核"); ll_recheck.setVisibility(View.VISIBLE); sw_recheck.setVisibility(View.GONE); loadRecheckStatus(); }else { tv_problemRecheck.setText("未复核"); ll_recheck.setVisibility(View.GONE); } mediafileList = new ArrayList<>(); mediafileList = problemlistVoCurrent.getMediafileList(); mediafileList.addAll (mediafileDao.queryBuilder() .where(MediafileDao.Properties.Businessguid.eq(problemlistVoCurrent.getGuid())) .where(MediafileDao.Properties.Remark.eq("未上传")) .list() ); loadImage(mediafileList); LatLng latLng = null; MarkerOptions options = new MarkerOptions(); Bitmap bm = null; latLng = new LatLng(problemlistVoCurrent.getLatitude(), problemlistVoCurrent.getLongitude()); bm = BitmapFactory.decodeResource(getResources(), R.drawable.icon_mark_red); Matrix matrix = new Matrix(); matrix.setScale(0.28f, 0.28f); Bitmap bmBig = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); options.icon(BitmapDescriptorFactory.fromBitmap(bmBig)); options.position(latLng); Marker marker = aMap.addMarker(options); marker.setInfoWindowEnable(false); aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14f)); double scenseLat = intent.getDoubleExtra("scenseLat",0); double scenseLng = intent.getDoubleExtra("scenseLng",0); MarkerOptions siteMarkeroptions = new MarkerOptions().position(new LatLng(scenseLat,scenseLng)); aMap.addMarker(siteMarkeroptions); } } //显示整改类别的dialog private void showChangeTypeDialog(){ final AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("整改类别"); final int[] position = {-1}; final String[] items = {"现场整改","承诺整改"}; dialog.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { position[0] = i; } }); dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { isEdited = true; tv_changeType.setText(items[position[0]]); problemlistVoCurrent.setChangecatalog(items[position[0]]); } }); dialog.setNegativeButton("取消",null); dialog.show(); } //显示整改效果的dialog private void showChangeResultDialog(){ AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("整改效果"); final EditText editText = new EditText(this); dialog.setView(editText); if (problemlistVoCurrent.getChangedresult()!=null){ editText.setText(problemlistVoCurrent.getChangedresult()); } dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (editText.getText().length()>0){ isEdited = true; tv_changeResult.setText(editText.getText().toString()); problemlistVoCurrent.setChangedresult(editText.getText().toString()); }else { Toast.makeText(application, "请填写内容", Toast.LENGTH_SHORT).show(); } } }); dialog.setNegativeButton("取消",null); dialog.show(); } //显示整改建议 private void showChangeAdviseDialog(){ AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("整改建议"); Spinner spinner = new Spinner(this); List items = new ArrayList<>(); items.add("无"); items.add("aaaaaaaa"); ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item_spinner_drop_down,items); spinner.setAdapter(adapter); dialog.setView(spinner); dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }); dialog.setNegativeButton("取消",null); dialog.show(); } //显示复核结果dialog private void showRecheckResultDialog(){ final AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("复核结论"); final int[] position = {-1}; final String[] items = {"未整改","部分整改","大部分整改","全部整改"}; dialog.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { position[0] = i; } }); dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { isEdited = true; tv_recheckResult.setText(items[position[0]]); problemlistVoCurrent.setRecheckresult(items[position[0]]); } }); dialog.setNegativeButton("取消",null); dialog.show(); } //显示复核描述的dialog private void showRecheckDesDialog(){ AlertDialog.Builder dialog = new AlertDialog.Builder(this); dialog.setTitle("复核描述"); final EditText editText = new EditText(this); dialog.setView(editText); if (problemlistVoCurrent.getRecheckdescription()!=null){ editText.setText(problemlistVoCurrent.getRecheckdescription()); } dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (editText.getText().length()>0){ isEdited = true; tv_recheckDes.setText(editText.getText().toString()); problemlistVoCurrent.setRecheckdescription(editText.getText().toString()); }else { Toast.makeText(application, "请填写内容", Toast.LENGTH_SHORT).show(); } } }); dialog.setNegativeButton("取消",null); dialog.show(); } //从mediafileList中取出图片并显示 private void loadImage(List mediafileList){ if (mediafileList!=null&&mediafileList.size()>0){ for (Mediafile mediaFile :mediafileList){ mediafileCurrent = mediaFile; if (mediaFile.getIschanged()){ //已整改的图片 File file = getFileFromMediaFile(mediaFile); if (file.exists()){ SetImageTask task1 = new SetImageTask(file, imageViewChangeList.get(changeMediaFileList.size()), this); task1.execute(); }else { DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFile,imageViewChangeList.get(changeMediaFileList.size()),this); task.execute(); } changeMediaFileList.add(mediaFile); }else { //未整改的图片 File file = getFileFromMediaFile(mediaFile); if (file.exists()){ //文件本地存在直接读取显示 SetImageTask task1 = new SetImageTask(file, imageViewProblemList.get(problemMediaFileList.size()), this); task1.execute(); }else { DownloadAndSetImageTask task = new DownloadAndSetImageTask(mediaFile, imageViewProblemList.get(problemMediaFileList.size()),this); task.execute(); } problemMediaFileList.add(mediaFile); } } } refreshPhotoAndClicker(false); } //跳转到photoviewer private View.OnClickListener showPhotoClicker(final List files, final int position, final List mediafiles, final int type){ View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(ProblemDetailActivity.this,PhotoViewerActivity.class); intent.putExtra("position",position); if (editable){ intent.putExtra("deletable",true); }else { intent.putExtra("deletable",false); } // intent.putExtra("mediaFile",mediafiles); // intent.putExtra("file",files); intent.putExtra(PhotoViewerActivity.PARA_MEDIAS, (Serializable) mediafiles); intent.putExtra(PhotoViewerActivity.PARA_FILES, (Serializable) files); if (type ==VIEW_PROBLEM_PHOTO){ intent.putExtra("type",PhotoViewerActivity.PROBLEM_PHOTO); startActivityForResult(intent,type); }else if (type ==VIEW_CHANGE_PHOTO){ intent.putExtra("type",PhotoViewerActivity.CHANGE_PHOTO); startActivityForResult(intent,type); } } }; return listener; } private void refreshPhotoAndClicker(boolean resetImage) { for (int i = 0; i < problemMediaFileList.size(); i++) { if (resetImage){ SetImageTask task1 = new SetImageTask(getFileFromMediaFile(problemMediaFileList.get(i)), imageViewProblemList.get(i), this); task1.execute(); } imageViewProblemList.get(i).setOnClickListener(showPhotoClicker(getFilesFromMediaFiles(problemMediaFileList),i,problemMediaFileList,VIEW_PROBLEM_PHOTO)); } for (int i = 0; i < changeMediaFileList.size(); i++) { if (resetImage){ SetImageTask task1 = new SetImageTask(getFileFromMediaFile(changeMediaFileList.get(i)), imageViewChangeList.get(i), this); task1.execute(); } imageViewChangeList.get(i).setOnClickListener(showPhotoClicker(getFilesFromMediaFiles(changeMediaFileList),i,changeMediaFileList,VIEW_CHANGE_PHOTO)); } if (problemMediaFileList.size() < 3) { if (editable) { ImageView iv_addProblemPhoto = imageViewProblemList.get(problemMediaFileList.size()); iv_addProblemPhoto.setImageResource(R.drawable.icon_add_photo); iv_addProblemPhoto.setOnClickListener(addPhotoClickListener(PROBLEM_PHOTO, 3 - problemMediaFileList.size())); } else { ImageView iv_addProblemPhoto = imageViewProblemList.get(problemMediaFileList.size()); iv_addProblemPhoto.setImageResource(R.drawable.icon_add_photo_blank); } } if (changeMediaFileList.size() < 3) { if (editable) { ImageView iv_addChangePhoto = imageViewChangeList.get(changeMediaFileList.size()); iv_addChangePhoto.setImageResource(R.drawable.icon_add_photo); iv_addChangePhoto.setOnClickListener(addPhotoClickListener(CHANGE_PHOTO, 3 - changeMediaFileList.size())); } else { ImageView iv_addChangePhoto = imageViewChangeList.get(changeMediaFileList.size()); iv_addChangePhoto.setImageResource(R.drawable.icon_add_photo_blank); } } } //添加图片用的点击事件 public View.OnClickListener addPhotoClickListener(final int type, final int picNum) { return new View.OnClickListener() { @Override public void onClick(View v) { PhotoUtil.pickPhoto2(ProblemDetailActivity.this, type, picNum); } }; } private File getNewChangeFile(){ 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 = problemlistVoCurrent.getProblemname() + " " + problemlistVoCurrent.getLocation()+" 整改 " + UUIDGenerator.generateUUID(4)+".jpg"; newFile = new File(Environment.getExternalStorageDirectory(), (parent + fileName)); newFile.getParentFile().mkdirs(); }else { Toast.makeText(application, "无subtassk", Toast.LENGTH_SHORT).show(); } return newFile; } private File getNewProblemFile(){ 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 = problemlistVoCurrent.getProblemname() + " " + problemlistVoCurrent.getLocation() + " "+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; } //从相册中选择图片 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); } private View.OnClickListener shareListener(final boolean isChange){ View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View view) { ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); //创建ClipData对象 ClipData clipData = null; String text = "工地名称:"+problemlistVoCurrent.getSensename()+"\n建筑地址:"+problemlistVoCurrent.getSenseaddress()+"\n问题描述:"+problemlistVoCurrent.getProblemname(); if (isChange){ clipData = ClipData.newPlainText("problemName", text+" 整改"); }else { clipData = ClipData.newPlainText("problemName", text); } //添加ClipData对象到剪切板中 clipboardManager.setPrimaryClip(clipData); Toast.makeText(application, "已复制问题到剪贴板", Toast.LENGTH_SHORT).show(); ArrayList uriList =new ArrayList(); if (isChange){ if (changeMediaFileList!=null&&changeMediaFileList.size()>0){ for (Mediafile mediafile:changeMediaFileList){ Uri imageUri = getImageUri(mediafile); uriList.add(imageUri); } }else { Toast.makeText(application, "无图片分享", Toast.LENGTH_SHORT).show(); return; } }else { if (problemMediaFileList!=null&&problemMediaFileList.size()>0){ for (Mediafile mediafile:problemMediaFileList){ Uri imageUri = getImageUri(mediafile); uriList.add(imageUri); } }else { Toast.makeText(application, "无图片分享", Toast.LENGTH_SHORT).show(); return; } } Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uriList); intent.setType("image/*"); startActivity(Intent.createChooser(intent, "分享多张图片")); } }; return onClickListener; } private Uri getImageUri(Mediafile mediafile) { Uri imageUri = Uri.EMPTY; // File file = FileUtil.writeResponseBodyToDisk(getApplication(), getFileFromMediaFile(mediafile), mediafile); // File newFile = FileUtil.sendMediaScanBroadcast(getApplication(), getFileFromMediaFile(mediafile)); // String newPath = FileUtil.sendMediaScanBroadcast(getApplication(), getFileFromMediaFile(mediafile)); imageUri = Uri.fromFile(getFileFromMediaFile(mediafile)); // String path = FileUtil.getRealPathFromUri(application, imageUri); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); } return imageUri; } private Mediafile newMediaFile(File file,boolean ischange){ Mediafile mediaFile = new Mediafile(); mediaFile.setGuid(UUIDGenerator.generate16ShortUUID()); mediaFile.setIguid(problemlistVoCurrent.getIguid()); mediaFile.setBusinessguid(problemlistVoCurrent.getGuid()); mediaFile.setLongitude(problemlistVoCurrent.getLongitude()); mediaFile.setLatitude(problemlistVoCurrent.getLatitude()); mediaFile.setAddress(problemlistVoCurrent.getSenseaddress()); mediaFile.setFiletype(1); mediaFile.setBusinesstype("问题"); mediaFile.setBusinesstypeid(intToByte(1)); String path = file.getParent().substring(20)+"/"; mediaFile.setPath(path); mediaFile.setDescription(file.getName()); mediaFile.setSavetime(new Date()); mediaFile.setIschanged(ischange); String exetension1 =subTaskSelected.getCitycode()+"/"+subTaskSelected.getDistrictcode()+"/"+ DateFormatter.dateFormat2.format(subTaskSelected.getExecutionstarttime())+"/"+subTaskSelected.getScenseid()+"/"; mediaFile.setExtension1(exetension1); mediaFile.setRemark("未上传"); return mediaFile; } private File getFileFromMediaFile(Mediafile mediafile){ File file = new File(Environment.getExternalStorageDirectory(), (mediafile.getPath() + mediafile.getDescription())); return file; } private List getFilesFromMediaFiles(List mediafiles){ List files = new ArrayList<>(); for (Mediafile m : mediafiles) { File file = new File(Environment.getExternalStorageDirectory(), (m.getPath() + m.getDescription())); files.add(file); } return files; } public static byte intToByte(int x) { return (byte) x; } @Override public void onClick(View view) { switch (view.getId()){ case R.id.tv_edit_change_type: showChangeTypeDialog(); break; case R.id.tv_edit_change_result: showChangeResultDialog(); break; case R.id.tv_edit_change_advise: showChangeAdviseDialog(); break; case R.id.tv_edit_recheck_result: showRecheckResultDialog(); break; case R.id.tv_edit_recheck_des: showRecheckDesDialog(); break; } } interface ProblemDetailService{ @GET Call downloadImage(@Url String fileUrl); @DELETE("mediafile/{id}/") Call deleteMediaFile(@Path("id") String guid); @POST("problemlist/") Call updateProblemList(@Body ProblemlistVo problemlistVo); } @RequiresApi(api = Build.VERSION_CODES.N) @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: saveCheck(); break; default: break; } return super.onOptionsItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode ==PROBLEM_PHOTO){ if (resultCode ==RESULT_OK && data != null){ ArrayList paths = data.getStringArrayListExtra(BaseTakePicActivity.EXTRA_SELECT_IMAGES); for (String p : paths) { File oldFile = new File(p); File newFile = getNewProblemFile(); try { FileUtil.copyFile(oldFile, newFile); Mediafile mediafile = newMediaFile(newFile,false); problemMediaFileList.add(mediafile); mediafileDao.insert(mediafile); } catch (IOException e) { e.printStackTrace(); } } imageViewProblemList.get(problemMediaFileList.size()-1).setImageResource(R.drawable.icon_add_photo_blank); refreshPhotoAndClicker(true); } }else if (requestCode ==CHANGE_PHOTO){ if (resultCode == RESULT_OK && data != null) { isEdited = true; ArrayList paths = data.getStringArrayListExtra(BaseTakePicActivity.EXTRA_SELECT_IMAGES); for (String p : paths) { File oldFile = new File(p); File newFile = getNewChangeFile(); try { FileUtil.copyFile(oldFile, newFile); Mediafile mediafile = newMediaFile(newFile, true); changeMediaFileList.add(mediafile); mediafileDao.insert(mediafile); } catch (IOException e) { e.printStackTrace(); } } if (changeMediaFileList.size() > 0) { if (type == InspectionDetailActivity.PROBLEM_CHANGE) { sw_change.setVisibility(View.GONE); tv_problemChange.setText("已整改"); problemlistVoCurrent.setIschanged(true); problemlistVoCurrent.setExtension3(Domain.CHANGE_UNCHECKED); problemlistVoCurrent.setRemark(application.getCurrentUser().getAcountname()); } else if (type == InspectionDetailActivity.PROBLEM_RECHECK) { sw_recheck.setVisibility(View.GONE); tv_problemRecheck.setText("已复核"); problemlistVoCurrent.setIsrechecked(true); } } imageViewChangeList.get(changeMediaFileList.size() - 1).setImageResource(R.drawable.icon_add_photo_blank); refreshPhotoAndClicker(true); } }else if (requestCode == VIEW_PROBLEM_PHOTO&&resultCode ==RESULT_OK){ if (data!=null){ int position = data.getIntExtra("position",-1); if (position>-1){ problemMediaFileList.remove(position); refreshPhotoAndClicker(true); } } }else if (requestCode ==VIEW_CHANGE_PHOTO&&resultCode ==RESULT_OK){ if (data!=null){ int position = data.getIntExtra("position",-1); if (position>-1){ changeMediaFileList.remove(position); refreshPhotoAndClicker(true); } } } } private void saveCheck(){ if (isEdited){ Toast.makeText(application, "正在保存,请稍后", Toast.LENGTH_SHORT).show(); Call deleteMediaFile = problemDataService.updateProblemList(problemlistVoCurrent); String a = problemlistVoCurrent.getPtguid(); deleteMediaFile.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.body() != null) { Toast.makeText(application, "提交成功", Toast.LENGTH_SHORT).show(); EventBus.getDefault().post(new ProblemEvent(problemlistVoCurrent.voToEntity(), type)); finish(); } else if (response.errorBody() != null) { Toast.makeText(application, "提交失败", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call call, Throwable t) { Toast.makeText(application, "网路连接出错", Toast.LENGTH_SHORT).show(); } }); }else { finish(); } } @Override public void onBackPressed() { saveCheck(); } }