StorageProcessUploadActivity.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package com.epson.iprint.storage;
  2. import android.content.Intent;
  3. import android.os.AsyncTask;
  4. import android.os.Bundle;
  5. import android.support.p000v4.media.session.PlaybackStateCompat;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.Button;
  9. import android.widget.EditText;
  10. import android.widget.RadioGroup;
  11. import android.widget.TextView;
  12. import com.epson.iprint.storage.gdrivev3.GoogleV3UploadClient;
  13. import com.epson.iprint.storage.gdrivev3.GoogleV3UploadSignInActivity;
  14. import java.io.File;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import java.util.concurrent.locks.Condition;
  18. import java.util.concurrent.locks.ReentrantLock;
  19. import epson.print.CommonDefine;
  20. import epson.print.R;
  21. import epson.print.ScanFileNumber;
  22. import epson.print.Util.EPLog;
  23. import epson.print.Util.Utils;
  24. import epson.scan.lib.libHaru;
  25. import epson.server.utils.MyUtility;
  26. public class StorageProcessUploadActivity extends StorageProcessActivity {
  27. final String UPLOAD_EDITING_FILENAME = "Upload.Editing.Filename";
  28. List<String> mUploadFileLocalPathList;
  29. String mUploadFilename;
  30. private void onUpdateProcessView() {
  31. }
  32. protected void onCreate(Bundle bundle) {
  33. String string;
  34. super.onCreate(bundle);
  35. setContentView((int) R.layout.folder_content_layout_for_upload);
  36. setActionBar(getStorageClient().getStorageServiceName(this), true);
  37. final Button button = (Button) findViewById(R.id.save_button);
  38. button.setText(getString(R.string.upload_btn_label));
  39. button.setOnClickListener(new View.OnClickListener() {
  40. public void onClick(View view) {
  41. String filename = getFilename();
  42. if (!getStorageClient().isValidUploadName(filename)) {
  43. showErrorDialog((int) R.string.str_error_Filename);
  44. } else if (isConnected()) {
  45. button.setEnabled(false);
  46. UploadTask uploadTask = new UploadTask();
  47. uploadTask.localPaths = new ArrayList(mUploadFileLocalPathList);
  48. uploadTask.uploadFilename = filename;
  49. uploadTask.fileType = getFiletype();
  50. uploadTask.execute(new Void[0]);
  51. } else {
  52. showConnectionError();
  53. }
  54. }
  55. });
  56. bindClearButton(R.id.upload_dialog_file_name, R.id.clear_name_btn, new StorageActivity.OnVisibilityListener() {
  57. public void onVisibilityChanged(int i) {
  58. setEnabledSaveButton(i == 0);
  59. }
  60. });
  61. mUploadFilename = generateUploadFilename(0);
  62. if (!(bundle == null || (string = bundle.getString("Upload.Editing.Filename")) == null)) {
  63. mUploadFilename = string;
  64. }
  65. setFilename(mUploadFilename);
  66. mUploadFileLocalPathList = getIntent().getStringArrayListExtra(StorageProcessActivity.EXTRA_UPLOADFILE_LIST);
  67. if (getStorageClient() instanceof GoogleV3UploadClient) {
  68. startActivity(GoogleV3UploadSignInActivity.getPlayServiceCheckIntent(this));
  69. }
  70. }
  71. protected void onSaveInstanceState(Bundle bundle) {
  72. super.onSaveInstanceState(bundle);
  73. mUploadFilename = getFilename();
  74. bundle.putString("Upload.Editing.Filename", mUploadFilename);
  75. }
  76. protected void onRestoreInstanceState(Bundle bundle) {
  77. super.onRestoreInstanceState(bundle);
  78. mUploadFilename = bundle.getString("Upload.Editing.Filename");
  79. }
  80. private void onSignInStatus(StorageProcessActivity.SignInStatus signInStatus) {
  81. updateUploadSection(signInStatus);
  82. updateSaveButton(signInStatus);
  83. }
  84. class UploadTask extends AsyncTask<Void, Void, Void> {
  85. boolean canceled;
  86. StorageServiceClient.UploadFileType fileType;
  87. List<String> localPaths;
  88. private volatile StorageServiceClient.ProcessError taskError;
  89. String uploadFilename;
  90. boolean uploaded;
  91. StorageServiceClient.Uploader uploader;
  92. UploadTask() {
  93. }
  94. protected Void doInBackground(Void... voidArr) {
  95. final ReentrantLock reentrantLock;
  96. final StorageActivity.OverlayProgress overlayProgress = new StorageActivity.OverlayProgress();
  97. overlayProgress.show(getString(R.string.uploading_notification), new StorageActivity.CancelRequestCallback() {
  98. public void onCancelRequest(Intent intent) {
  99. if (uploader != null && uploader.isCancelable()) {
  100. uploader.cancel();
  101. }
  102. canceled = true;
  103. }
  104. });
  105. String str = "";
  106. if (StorageServiceClient.UploadFileType.PDF.equals(fileType)) {
  107. String str2 = new File(localPaths.get(0)).getParent() + CommonDefine.SLASH + uploadFilename + CommonDefine.FileType_PDF;
  108. new libHaru().createPDF((ArrayList) localPaths, str2);
  109. localPaths.clear();
  110. localPaths.add(str2);
  111. str = CommonDefine.FileType_PDF;
  112. } else if (StorageServiceClient.UploadFileType.JPEG.equals(fileType)) {
  113. str = ".jpg";
  114. }
  115. boolean z = !this.uploadFilename.equals(generateUploadFilename(0));
  116. int size = localPaths.size();
  117. int i = 0;
  118. while (true) {
  119. if (i >= size) {
  120. break;
  121. }
  122. String str3 = localPaths.get(i);
  123. String str4 = uploadFilename + str;
  124. if (size > 1) {
  125. if (z) {
  126. str4 = String.format("%s%03d%s", new Object[]{uploadFilename, Integer.valueOf(i + 1), str});
  127. } else {
  128. str4 = String.format("%s%s", new Object[]{generateUploadFilename(i), str});
  129. }
  130. overlayProgress.changeMessage(getString(R.string.uploading_notification) + (i + 1) + CommonDefine.SLASH + size);
  131. }
  132. reentrantLock = new ReentrantLock();
  133. final Condition newCondition = reentrantLock.newCondition();
  134. try {
  135. reentrantLock.lock();
  136. uploaded = false;
  137. taskError = StorageServiceClient.ProcessError.NONE;
  138. uploader = getStorageClient().getUploader(StorageProcessUploadActivity.this, fileType, str3, str4);
  139. uploader.start(new StorageServiceClient.UploadCompletion() {
  140. public void onUploadComplete(String str, String str2, StorageServiceClient.ProcessError processError) {
  141. try {
  142. reentrantLock.lock();
  143. StorageServiceClient.ProcessError unused = taskError = processError;
  144. uploaded = true;
  145. newCondition.signal();
  146. } catch (Exception e) {
  147. EPLog.w("Storage", "onUploadComplete() exception <" + e.toString() + ">");
  148. } catch (Throwable th) {
  149. reentrantLock.unlock();
  150. throw th;
  151. }
  152. reentrantLock.unlock();
  153. }
  154. });
  155. while (uploaded) {
  156. newCondition.await();
  157. }
  158. if (canceled && taskError == StorageServiceClient.ProcessError.NONE) {
  159. reentrantLock.unlock();
  160. i++;
  161. }
  162. } catch (Exception e) {
  163. e.printStackTrace();
  164. taskError = StorageServiceClient.ProcessError.ERROR;
  165. } catch (Throwable th) {
  166. reentrantLock.unlock();
  167. throw th;
  168. }
  169. }
  170. if (canceled) {
  171. taskError = StorageServiceClient.ProcessError.CANCELED;
  172. }
  173. reentrantLock.unlock();
  174. runOnUiThread(new Runnable() {
  175. public void run() {
  176. if (taskError == StorageServiceClient.ProcessError.NONE) {
  177. overlayProgress.dismiss();
  178. finish();
  179. return;
  180. }
  181. setEnabledSaveButton(true);
  182. if (taskError == StorageServiceClient.ProcessError.ERROR) {
  183. showErrorDialog((int) R.string.upload_error_mes);
  184. }
  185. overlayProgress.dismiss();
  186. }
  187. });
  188. return null;
  189. }
  190. }
  191. private void updateUploadSection(StorageProcessActivity.SignInStatus signInStatus) {
  192. ViewGroup viewGroup = (ViewGroup) findViewById(R.id.upload_file_name_file_type_section);
  193. if (signInStatus == StorageProcessActivity.SignInStatus.SIGNED_IN) {
  194. viewGroup.setVisibility(0);
  195. ((RadioGroup) findViewById(R.id.file_type_for_upload)).check(R.id.pdf_type);
  196. List<String> list = mUploadFileLocalPathList;
  197. if (list != null && list.size() > 0) {
  198. setFilename(mUploadFilename);
  199. }
  200. ((TextView) findViewById(R.id.file_size)).setText(getTotalFileSize(mUploadFileLocalPathList));
  201. return;
  202. }
  203. viewGroup.setVisibility(4);
  204. }
  205. private void updateSaveButton(StorageProcessActivity.SignInStatus signInStatus) {
  206. setEnabledSaveButton(signInStatus == StorageProcessActivity.SignInStatus.SIGNED_IN);
  207. }
  208. private void setEnabledSaveButton(boolean z) {
  209. Button button = (Button) findViewById(R.id.save_button);
  210. if (z) {
  211. button.setEnabled(true);
  212. } else {
  213. button.setEnabled(false);
  214. }
  215. }
  216. private String getFilename() {
  217. return ((TextView) findViewById(R.id.upload_dialog_file_name)).getText().toString();
  218. }
  219. private void setFilename(String str) {
  220. ((EditText) findViewById(R.id.upload_dialog_file_name)).setText(str);
  221. }
  222. private StorageServiceClient.UploadFileType getFiletype() {
  223. return ((RadioGroup) findViewById(R.id.file_type_for_upload)).getCheckedRadioButtonId() == R.id.pdf_type ? StorageServiceClient.UploadFileType.PDF : StorageServiceClient.UploadFileType.JPEG;
  224. }
  225. private String generateUploadFilename(int i) {
  226. int count = ScanFileNumber.getCount(this);
  227. return "EPSON" + new Utils().editNumber(count + i);
  228. }
  229. private String getTotalFileSize(List<String> list) {
  230. Long l = 0L;
  231. for (String file : list) {
  232. l = Long.valueOf(l.longValue() + new File(file).length());
  233. }
  234. double longValue = (double) (l.longValue() / PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID);
  235. if (longValue > 500.0d) {
  236. return MyUtility.mathRound(longValue / 1024.0d, 2) + "MB";
  237. }
  238. return MyUtility.mathRound(longValue, 2) + "KB";
  239. }
  240. }