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