PreviewScanTask.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package epson.print.copy.Component.ecopycomponent;
  2. import android.app.Activity;
  3. import android.graphics.Bitmap;
  4. import android.graphics.Canvas;
  5. import android.graphics.Matrix;
  6. import android.graphics.Paint;
  7. import android.graphics.RectF;
  8. import android.os.AsyncTask;
  9. import epson.print.copy.Component.ecopycomponent.ECopyComponent;
  10. import epson.print.copy.Component.ecopycomponent.ECopyOptionItem;
  11. import epson.print.copy.Component.ecopycomponent.ECopyPreview;
  12. import epson.print.copy.Component.escandevice.EScanDevice;
  13. import epson.print.copy.Component.escandevice.IScanController;
  14. import java.util.HashMap;
  15. class PreviewScanTask extends AsyncTask<Void, Void, Void> implements IScanController, ECopyComponent.ITask {
  16. boolean cancelRequested;
  17. Canvas canvas;
  18. ECopyPreview copyPreview;
  19. ECopyOptionContext optionContext;
  20. Bitmap previewScanBitmap;
  21. HashMap<Integer, Object> properties = new HashMap<>();
  22. float scale;
  23. ECopyComponent.ICopyStatusListener statusListener;
  24. ECopyComponent.ICopySystemSettings systemSettings;
  25. public void setClientID(String str) {
  26. }
  27. public void setRequestConnectionTimeout(int i) {
  28. }
  29. public PreviewScanTask(ECopyPreview eCopyPreview, ECopyComponent.ICopyStatusListener iCopyStatusListener) {
  30. this.copyPreview = eCopyPreview;
  31. this.statusListener = iCopyStatusListener;
  32. }
  33. private void setPropertyValue(int i, Object obj) {
  34. this.properties.put(Integer.valueOf(i), obj);
  35. }
  36. public ECopyComponent.ICopyCancelRequest start() {
  37. super.execute(new Void[0]);
  38. return new ECopyComponent.ICopyCancelRequest() {
  39. public void cancel() {
  40. synchronized (this) {
  41. PreviewScanTask.this.cancelRequested = true;
  42. }
  43. }
  44. };
  45. }
  46. public void setSystemSettings(ECopyComponent.ICopySystemSettings iCopySystemSettings) {
  47. this.systemSettings = iCopySystemSettings;
  48. }
  49. public void setOptionContext(ECopyOptionContext eCopyOptionContext) {
  50. int i;
  51. this.optionContext = eCopyOptionContext;
  52. if (this.optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.XScale).getSelectedChoice() != ECopyOptionItem.ECopyOptionItemChoice.XScale_Autofit) {
  53. ECopyOptionItem copyOptionItemOf = this.optionContext.getCopyOptionItemOf(ECopyOptionItem.ECopyOptionItemKey.PrintMediaSize);
  54. switch (copyOptionItemOf.getSelectedChoice()) {
  55. case PrintMediaSize_A4:
  56. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_A4;
  57. break;
  58. case PrintMediaSize_B5:
  59. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_B5;
  60. break;
  61. case PrintMediaSize_L:
  62. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_L;
  63. break;
  64. case PrintMediaSize_2L:
  65. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_2L;
  66. break;
  67. case PrintMediaSize_Postcard:
  68. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_HAGAKI;
  69. break;
  70. case PrintMediaSize_KG:
  71. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_KG;
  72. break;
  73. case PrintMediaSize_8x10in:
  74. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_6GIRI;
  75. break;
  76. }
  77. }
  78. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_AUTOFIT;
  79. ECopyComponent.ECopyType copyType = this.optionContext.getCopyType();
  80. if (copyType == ECopyComponent.ECopyType.A4_2up || copyType == ECopyComponent.ECopyType.A4_2up_Book) {
  81. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_A4;
  82. } else if (copyType == ECopyComponent.ECopyType.B5_2up || copyType == ECopyComponent.ECopyType.B5_2up_Book) {
  83. i = IScanController.CPPREV_VALUE_SCAN_COPYFRAME_B5;
  84. }
  85. setPropertyValue(3, Integer.valueOf(i));
  86. setPropertyValue(1, 65536);
  87. setPropertyValue(2, Integer.valueOf(IScanController.CPPREV_VALUE_SCAN_RESO_PREVIEW));
  88. }
  89. protected Void doInBackground(Void... voidArr) {
  90. setPropertyValue(4, this.systemSettings.getPrinterIPAddress());
  91. EScanDevice.nativeStartScan(this);
  92. return null;
  93. }
  94. public int getIntegerValue(int i) {
  95. return ((Integer) this.properties.get(Integer.valueOf(i))).intValue();
  96. }
  97. public String getStringValue(int i) {
  98. return (String) this.properties.get(Integer.valueOf(i));
  99. }
  100. public boolean isCancelRequested() {
  101. boolean z;
  102. synchronized (this) {
  103. z = this.cancelRequested;
  104. }
  105. return z;
  106. }
  107. public void setScanStatusChanged(final int i, final int i2) {
  108. ((Activity) this.copyPreview.getContext()).runOnUiThread(new Runnable() {
  109. public void run() {
  110. ECopyComponent.ICopyStatusListener.CopyTaskResult copyTaskResult;
  111. switch (i) {
  112. case 1:
  113. PreviewScanTask previewScanTask = PreviewScanTask.this;
  114. previewScanTask.previewScanBitmap = null;
  115. previewScanTask.statusListener.onStarted(ECopyComponent.ICopyStatusListener.CopyTaskType.Preview);
  116. return;
  117. case 2:
  118. int i = i2;
  119. if (i != 3) {
  120. switch (i) {
  121. case 0:
  122. copyTaskResult = ECopyComponent.ICopyStatusListener.CopyTaskResult.Succeed;
  123. break;
  124. case 1:
  125. copyTaskResult = ECopyComponent.ICopyStatusListener.CopyTaskResult.Canceled;
  126. break;
  127. default:
  128. copyTaskResult = ECopyComponent.ICopyStatusListener.CopyTaskResult.ErrorOther;
  129. break;
  130. }
  131. } else {
  132. copyTaskResult = ECopyComponent.ICopyStatusListener.CopyTaskResult.Busy;
  133. }
  134. PreviewScanTask.this.statusListener.onFinished(ECopyComponent.ICopyStatusListener.CopyTaskType.Preview, copyTaskResult);
  135. return;
  136. case 3:
  137. PreviewScanTask.this.previewScanBitmap.eraseColor(-1);
  138. return;
  139. case 4:
  140. PreviewScanTask.this.copyPreview.drawScanPreview(PreviewScanTask.this.previewScanBitmap);
  141. return;
  142. default:
  143. return;
  144. }
  145. }
  146. });
  147. }
  148. public void setScanImageSize(int i, int i2) {
  149. this.copyPreview.calculateScanImageSize(i, i2, new ECopyPreview.ScanImageSizeCalculator() {
  150. public void onScanImageSize(int i, int i2, float f) {
  151. PreviewScanTask previewScanTask = PreviewScanTask.this;
  152. previewScanTask.scale = f;
  153. previewScanTask.previewScanBitmap = Bitmap.createBitmap(i, i2, Bitmap.Config.ARGB_8888);
  154. PreviewScanTask previewScanTask2 = PreviewScanTask.this;
  155. previewScanTask2.canvas = new Canvas(previewScanTask2.previewScanBitmap);
  156. }
  157. });
  158. }
  159. public void setScanImageBlockReceived(int[] iArr, int i, int i2, int i3, int i4) {
  160. Bitmap createBitmap = Bitmap.createBitmap(iArr, i3, i4, Bitmap.Config.ARGB_8888);
  161. Matrix matrix = new Matrix();
  162. float f = this.scale;
  163. matrix.postScale(f, f);
  164. float f2 = this.scale;
  165. matrix.postTranslate(((float) i) * f2, ((float) i2) * f2);
  166. this.canvas.drawBitmap(createBitmap, matrix, (Paint) null);
  167. }
  168. public void setCopyFrameSize(int i, int i2, int i3, int i4) {
  169. RectF rectF = new RectF((float) i, (float) i2, (float) i3, (float) i4);
  170. synchronized (this) {
  171. if (this.cancelRequested) {
  172. rectF = new RectF();
  173. }
  174. }
  175. this.copyPreview.setPaperFrame(rectF);
  176. }
  177. }