MemCardWriteConvertViewModel.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package com.epson.memcardacc;
  2. import android.app.Application;
  3. import android.arch.lifecycle.AndroidViewModel;
  4. import android.arch.lifecycle.LiveData;
  5. import android.os.AsyncTask;
  6. import java.io.File;
  7. import java.util.ArrayList;
  8. import java.util.Iterator;
  9. import epson.common.ExternalFileUtils;
  10. import epson.common.ImageUtil;
  11. public class MemCardWriteConvertViewModel extends AndroidViewModel {
  12. private final Application mApplication;
  13. private final ConvertLiveData mConvertLiveData = new ConvertLiveData();
  14. public static class ConvertResult {
  15. public final ArrayList<String> filenameList = new ArrayList<>();
  16. public long totalFileSize = 0;
  17. public void addFile(String str) {
  18. totalFileSize += new File(str).length();
  19. filenameList.add(str);
  20. }
  21. }
  22. public MemCardWriteConvertViewModel(@NonNull Application application) {
  23. super(application);
  24. mApplication = application;
  25. }
  26. public void setOrigFileList(@NonNull ArrayList<String> arrayList) {
  27. mConvertLiveData.setOrigFileList(arrayList);
  28. }
  29. public void deleteTempFile() {
  30. mConvertLiveData.initTempDirectory();
  31. }
  32. public ConvertLiveData getData() {
  33. return mConvertLiveData;
  34. }
  35. public class ConvertLiveData extends LiveData<ConvertResult> {
  36. public ConvertLiveData() {
  37. }
  38. public void setOrigFileList(@NonNull final ArrayList<String> arrayList) {
  39. new AsyncTask<Void, Void, ConvertResult>() {
  40. protected ConvertResult doInBackground(Void... voidArr) {
  41. return convertAndGetFileSize(arrayList);
  42. }
  43. protected void onPostExecute(ConvertResult convertResult) {
  44. MemCardWriteConvertViewModel.mConvertLiveData.setValue(convertResult);
  45. }
  46. }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Void[0]);
  47. }
  48. private synchronized ConvertResult convertAndGetFileSize(@NonNull ArrayList<String> arrayList) {
  49. ConvertResult convertResult = new ConvertResult();
  50. File initTempDirectory = initTempDirectory(ExternalFileUtils.getInstance(MemCardWriteConvertViewModel.mApplication));
  51. Iterator<String> it = arrayList.iterator();
  52. while (it.hasNext()) {
  53. String next = it.next();
  54. if (ImageUtil.isHEIFFormat(next)) {
  55. String notDuplicateFilename = ExternalFileUtils.getNotDuplicateFilename(next, initTempDirectory.getPath(), 30);
  56. if (!ImageUtil.convertHEIFtoJPEG(next, notDuplicateFilename)) {
  57. return null;
  58. }
  59. next = notDuplicateFilename;
  60. }
  61. convertResult.addFile(next);
  62. }
  63. return convertResult;
  64. }
  65. @NonNull
  66. private File initTempDirectory(ExternalFileUtils externalFileUtils) {
  67. return externalFileUtils.initTempCacheDirectory(ExternalFileUtils.TempCacheDirectory.MEMORY_CARD_ACCESS);
  68. }
  69. private synchronized void initTempDirectory() {
  70. initTempDirectory(ExternalFileUtils.getInstance(MemCardWriteConvertViewModel.mApplication));
  71. }
  72. }
  73. }