I2ScanTask.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. package epson.scan.i2lib;
  2. import android.content.Context;
  3. import android.os.AsyncTask;
  4. import android.support.annotation.UiThread;
  5. import android.support.annotation.VisibleForTesting;
  6. import android.support.annotation.WorkerThread;
  7. import androidx.annotation.NonNull;
  8. import androidx.annotation.Nullable;
  9. import com.epson.iprint.prtlogger.Analytics;
  10. import com.epson.iprint.prtlogger.CommonLog;
  11. import com.epson.iprint.prtlogger.PrintLog;
  12. import com.epson.iprint.shared.SharedParamScan;
  13. import com.epson.lib.escani2.EscanI2Lib;
  14. import com.epson.lib.escani2.ScanI2Params;
  15. import com.epson.lib.escani2.ScanI2Runner;
  16. import com.epson.lib.escani2.ScanSize;
  17. import com.epson.lib.escani2.ScannerI2Info;
  18. import java.io.File;
  19. import java.util.ArrayList;
  20. import java.util.Calendar;
  21. import epson.common.ExternalFileUtils;
  22. import epson.scan.activity.ScanContinueParam;
  23. import epson.scan.activity.ScannerPropertyWrapper;
  24. import epson.scan.lib.CancelableScannerProbe;
  25. import epson.scan.lib.EscanLibException;
  26. import epson.scan.lib.I1ScanParams;
  27. public class I2ScanTask extends AsyncTask<Void, Void, I2ScanTask.TaskError> {
  28. private static final String LOG_TAG = "I2ScanTask";
  29. private Context mApplicationContext;
  30. private volatile boolean mCancelRequested;
  31. private CancelableScannerProbe mCancelableScannerProbe;
  32. private CommonLog mCommonLog;
  33. private ImageProcessController mImageProcessController;
  34. private ArrayList<String> mResScanFileList;
  35. private ScanI2Params mScanI2Params;
  36. private ScanI2Runner mScanI2Runner = new ScanI2Runner();
  37. private final ScanResultReceiver mScanResultReceiver;
  38. private ScannerPropertyWrapper mScannerPropertyWrapper;
  39. public interface ScanResultReceiver {
  40. @WorkerThread
  41. void onProgressUpdate(int i, int i2);
  42. @UiThread
  43. void onScanEnd(TaskError taskError);
  44. }
  45. protected void onPreExecute() {
  46. }
  47. public ArrayList<String> getScanFileList() {
  48. return mResScanFileList;
  49. }
  50. @Nullable
  51. public File getScanFile(int i, int i2) {
  52. if (mScanI2Runner == null) {
  53. return null;
  54. }
  55. return mImageProcessController.getAllProcessFile(i, i2);
  56. }
  57. public I2ScanTask(@NonNull Context context, @Nullable ScanResultReceiver scanResultReceiver, @Nullable SharedParamScan sharedParamScan, CommonLog commonLog) {
  58. mApplicationContext = context;
  59. ScanI2Params loadAndAdjustScanParams = loadAndAdjustScanParams(context);
  60. margeScanI2Params(loadAndAdjustScanParams, sharedParamScan);
  61. mScanI2Params = loadAndAdjustScanParams;
  62. mScannerPropertyWrapper = ScannerPropertyWrapper.load(context);
  63. ScannerPropertyWrapper scannerPropertyWrapper = mScannerPropertyWrapper;
  64. if (scannerPropertyWrapper == null) {
  65. throw new IllegalStateException("ScannerPropertyWrapper.load() error!");
  66. } else if (scannerPropertyWrapper.getEscIVersion() == 2) {
  67. mImageProcessController = new ImageProcessController(this, loadAndAdjustScanParams.duplex, loadAndAdjustScanParams.duplexTurnDirection, mScannerPropertyWrapper.getI2ScannerAllInfo().scannerI2Info.adfDuplexType, loadAndAdjustScanParams.colorMode == EscanI2Lib.ColorMode.MONO_1BIT, loadAndAdjustScanParams.density);
  68. mImageProcessController.init(getSaveDirectory(context), Calendar.getInstance());
  69. mScanResultReceiver = scanResultReceiver;
  70. mResScanFileList = new ArrayList<>();
  71. mCommonLog = commonLog;
  72. if (mCommonLog == null) {
  73. mCommonLog = new CommonLog();
  74. }
  75. } else {
  76. throw new IllegalStateException("ScannerPropertyWrapper.load() error! ESC/I version != 2");
  77. }
  78. }
  79. private void margeScanI2Params(@NonNull ScanI2Params scanI2Params, @Nullable SharedParamScan sharedParamScan) {
  80. if (sharedParamScan != null) {
  81. scanI2Params.resolutionMain = sharedParamScan.getRes_main();
  82. scanI2Params.resolutionSub = sharedParamScan.getRes_sub();
  83. scanI2Params.scanSize = new ScanSize(sharedParamScan.getPixel_main(), sharedParamScan.getPixel_sub(), 0, 0);
  84. EscanI2Lib.ColorMode colorMode = EscanI2Lib.ColorMode.COLOR_24BIT;
  85. switch (sharedParamScan.getScan_type()) {
  86. case 2:
  87. colorMode = EscanI2Lib.ColorMode.GRAYSCALE_8BIT;
  88. break;
  89. case 3:
  90. colorMode = EscanI2Lib.ColorMode.MONO_1BIT;
  91. break;
  92. }
  93. scanI2Params.colorMode = colorMode;
  94. }
  95. }
  96. private File getSaveDirectory(Context context) {
  97. File file = new File(ExternalFileUtils.getInstance(context).getScannedImageDir());
  98. if (file.exists() || file.mkdirs()) {
  99. return file;
  100. }
  101. throw new RuntimeException("mkdirs error '" + file + "'");
  102. }
  103. private ScanI2Params loadAndAdjustScanParams(Context context) {
  104. ScanI2Params loadScanI2Params = I2ScanParamManager.loadScanI2Params(context);
  105. loadScanI2Params.autoCrop = EscanI2Lib.AutoCrop.FALSE;
  106. loadScanI2Params.autoSkew = EscanI2Lib.AutoSkew.FALSE;
  107. loadScanI2Params.lookupTableNo = 0;
  108. loadScanI2Params.overScan = false;
  109. loadScanI2Params.doubleFeedLevel = EscanI2Lib.DoubleFeedLevel.LEVEL_NONE;
  110. if (loadScanI2Params.inputUnit == EscanI2Lib.InputUnit.ADF) {
  111. loadScanI2Params.maxScanSheets = ScanContinueParam.getAvailableScanPageCount();
  112. loadScanI2Params.maxWriteSheets = ScanContinueParam.getAvailableScanPageCount();
  113. } else {
  114. loadScanI2Params.maxScanSheets = 1;
  115. loadScanI2Params.maxWriteSheets = 1;
  116. }
  117. loadScanI2Params.qualityHW = 90;
  118. loadScanI2Params.qualitySW = 90;
  119. return loadScanI2Params;
  120. }
  121. public int[] getScanPages() {
  122. return (int[]) mScanI2Runner.getScanPages().clone();
  123. }
  124. public epson.scan.i2lib.I2ScanTask.TaskError doInBackground(java.lang.Void... r9) {
  125. throw new UnsupportedOperationException("Method not decompiled: epson.scan.i2lib.I2ScanTask.doInBackground(java.lang.Void[]):epson.scan.i2lib.I2ScanTask$TaskError");
  126. }
  127. private void sendLog(int i) {
  128. CommonLog commonLog = mCommonLog;
  129. if (commonLog != null) {
  130. commonLog.connectionType = i;
  131. commonLog.numberOfSheet = getScanFileList().size();
  132. if (mCommonLog.action == 0) {
  133. mCommonLog.action = PrintLog.ACTION_SCAN;
  134. }
  135. ScannerPropertyWrapper scannerPropertyWrapper = mScannerPropertyWrapper;
  136. if (scannerPropertyWrapper != null) {
  137. mCommonLog.printerName = scannerPropertyWrapper.getModelName();
  138. }
  139. if (mCommonLog.numberOfSheet > 0) {
  140. Analytics.sendScanI1Log(mApplicationContext, convertScanParams(mScanI2Params), mCommonLog, ScanContinueParam.isContinueScanning());
  141. }
  142. }
  143. }
  144. private I1ScanParams convertScanParams(@NonNull ScanI2Params scanI2Params) {
  145. I1ScanParams i1ScanParams = new I1ScanParams();
  146. if (C24451.$SwitchMap$com$epson$lib$escani2$EscanI2Lib$InputUnit[scanI2Params.inputUnit.ordinal()] != 1) {
  147. i1ScanParams.inputDevice = 0;
  148. } else {
  149. i1ScanParams.inputDevice = 1;
  150. }
  151. switch (scanI2Params.colorMode) {
  152. case MONO_1BIT:
  153. i1ScanParams.colorType = 3;
  154. break;
  155. case GRAYSCALE_8BIT:
  156. i1ScanParams.colorType = 2;
  157. break;
  158. default:
  159. i1ScanParams.colorType = 1;
  160. break;
  161. }
  162. i1ScanParams.resolution = scanI2Params.resolutionMain;
  163. i1ScanParams.twoSide = scanI2Params.duplex ? 1 : 0;
  164. if (C24451.$SwitchMap$com$epson$lib$escani2$EscanI2Lib$Gamma[scanI2Params.userGamma.ordinal()] != 1) {
  165. i1ScanParams.gamma = 1;
  166. } else {
  167. i1ScanParams.gamma = 0;
  168. }
  169. i1ScanParams.brightness = 255 - scanI2Params.density;
  170. if (scanI2Params.colorMode != EscanI2Lib.ColorMode.MONO_1BIT) {
  171. i1ScanParams.brightness = 127;
  172. }
  173. return i1ScanParams;
  174. }
  175. /* renamed from: epson.scan.i2lib.I2ScanTask$1 */
  176. static /* synthetic */ class C24451 {
  177. static final /* synthetic */ int[] $SwitchMap$com$epson$lib$escani2$EscanI2Lib$Gamma = new int[EscanI2Lib.Gamma.values().length];
  178. static final /* synthetic */ int[] $SwitchMap$com$epson$lib$escani2$EscanI2Lib$InputUnit = new int[EscanI2Lib.InputUnit.values().length];
  179. /* JADX WARNING: Can't wrap try/catch for region: R(17:0|1|2|3|5|6|7|9|10|11|12|13|14|15|17|18|(3:19|20|22)) */
  180. /* JADX WARNING: Failed to process nested try/catch */
  181. /* JADX WARNING: Missing exception handler attribute for start block: B:11:0x0032 */
  182. /* JADX WARNING: Missing exception handler attribute for start block: B:13:0x003c */
  183. /* JADX WARNING: Missing exception handler attribute for start block: B:19:0x005a */
  184. static {
  185. /*
  186. com.epson.lib.escani2.EscanI2Lib$Gamma[] r0 = com.epson.lib.escani2.EscanI2Lib.Gamma.values()
  187. int r0 = r0.length
  188. int[] r0 = new int[r0]
  189. $SwitchMap$com$epson$lib$escani2$EscanI2Lib$Gamma = r0
  190. r0 = 1
  191. int[] r1 = $SwitchMap$com$epson$lib$escani2$EscanI2Lib$Gamma // Catch:{ NoSuchFieldError -> 0x0014 }
  192. com.epson.lib.escani2.EscanI2Lib$Gamma r2 = com.epson.lib.escani2.EscanI2Lib.Gamma.GAMMA_100 // Catch:{ NoSuchFieldError -> 0x0014 }
  193. int r2 = r2.ordinal() // Catch:{ NoSuchFieldError -> 0x0014 }
  194. r1[r2] = r0 // Catch:{ NoSuchFieldError -> 0x0014 }
  195. L_0x0014:
  196. r1 = 2
  197. int[] r2 = $SwitchMap$com$epson$lib$escani2$EscanI2Lib$Gamma // Catch:{ NoSuchFieldError -> 0x001f }
  198. com.epson.lib.escani2.EscanI2Lib$Gamma r3 = com.epson.lib.escani2.EscanI2Lib.Gamma.GAMMA_180 // Catch:{ NoSuchFieldError -> 0x001f }
  199. int r3 = r3.ordinal() // Catch:{ NoSuchFieldError -> 0x001f }
  200. r2[r3] = r1 // Catch:{ NoSuchFieldError -> 0x001f }
  201. L_0x001f:
  202. com.epson.lib.escani2.EscanI2Lib$ColorMode[] r2 = com.epson.lib.escani2.EscanI2Lib.ColorMode.values()
  203. int r2 = r2.length
  204. int[] r2 = new int[r2]
  205. $SwitchMap$com$epson$lib$escani2$EscanI2Lib$ColorMode = r2
  206. int[] r2 = $SwitchMap$com$epson$lib$escani2$EscanI2Lib$ColorMode // Catch:{ NoSuchFieldError -> 0x0032 }
  207. com.epson.lib.escani2.EscanI2Lib$ColorMode r3 = com.epson.lib.escani2.EscanI2Lib.ColorMode.MONO_1BIT // Catch:{ NoSuchFieldError -> 0x0032 }
  208. int r3 = r3.ordinal() // Catch:{ NoSuchFieldError -> 0x0032 }
  209. r2[r3] = r0 // Catch:{ NoSuchFieldError -> 0x0032 }
  210. L_0x0032:
  211. int[] r2 = $SwitchMap$com$epson$lib$escani2$EscanI2Lib$ColorMode // Catch:{ NoSuchFieldError -> 0x003c }
  212. com.epson.lib.escani2.EscanI2Lib$ColorMode r3 = com.epson.lib.escani2.EscanI2Lib.ColorMode.GRAYSCALE_8BIT // Catch:{ NoSuchFieldError -> 0x003c }
  213. int r3 = r3.ordinal() // Catch:{ NoSuchFieldError -> 0x003c }
  214. r2[r3] = r1 // Catch:{ NoSuchFieldError -> 0x003c }
  215. L_0x003c:
  216. int[] r2 = $SwitchMap$com$epson$lib$escani2$EscanI2Lib$ColorMode // Catch:{ NoSuchFieldError -> 0x0047 }
  217. com.epson.lib.escani2.EscanI2Lib$ColorMode r3 = com.epson.lib.escani2.EscanI2Lib.ColorMode.COLOR_24BIT // Catch:{ NoSuchFieldError -> 0x0047 }
  218. int r3 = r3.ordinal() // Catch:{ NoSuchFieldError -> 0x0047 }
  219. r4 = 3
  220. r2[r3] = r4 // Catch:{ NoSuchFieldError -> 0x0047 }
  221. L_0x0047:
  222. com.epson.lib.escani2.EscanI2Lib$InputUnit[] r2 = com.epson.lib.escani2.EscanI2Lib.InputUnit.values()
  223. int r2 = r2.length
  224. int[] r2 = new int[r2]
  225. $SwitchMap$com$epson$lib$escani2$EscanI2Lib$InputUnit = r2
  226. int[] r2 = $SwitchMap$com$epson$lib$escani2$EscanI2Lib$InputUnit // Catch:{ NoSuchFieldError -> 0x005a }
  227. com.epson.lib.escani2.EscanI2Lib$InputUnit r3 = com.epson.lib.escani2.EscanI2Lib.InputUnit.ADF // Catch:{ NoSuchFieldError -> 0x005a }
  228. int r3 = r3.ordinal() // Catch:{ NoSuchFieldError -> 0x005a }
  229. r2[r3] = r0 // Catch:{ NoSuchFieldError -> 0x005a }
  230. L_0x005a:
  231. int[] r0 = $SwitchMap$com$epson$lib$escani2$EscanI2Lib$InputUnit // Catch:{ NoSuchFieldError -> 0x0064 }
  232. com.epson.lib.escani2.EscanI2Lib$InputUnit r2 = com.epson.lib.escani2.EscanI2Lib.InputUnit.FLATBED // Catch:{ NoSuchFieldError -> 0x0064 }
  233. int r2 = r2.ordinal() // Catch:{ NoSuchFieldError -> 0x0064 }
  234. r0[r2] = r1 // Catch:{ NoSuchFieldError -> 0x0064 }
  235. L_0x0064:
  236. return
  237. */
  238. throw new UnsupportedOperationException("Method not decompiled: epson.scan.i2lib.I2ScanTask.C24451.<clinit>():void");
  239. }
  240. }
  241. private int checkScanParams(@NonNull File file, @NonNull ScanI2Params scanI2Params, @NonNull ScannerI2Info scannerI2Info) {
  242. int[] validScanSize = scanI2Params.scanSize.getValidScanSize(scannerI2Info, scanI2Params);
  243. if (validScanSize == null) {
  244. return 1;
  245. }
  246. if (file.getFreeSpace() < ((long) ((scanI2Params.inputUnit == EscanI2Lib.InputUnit.ADF ? ScanContinueParam.getAvailableScanPageCount() : 1) + 1)) * ((long) (validScanSize[0] * validScanSize[1] * 3))) {
  247. return 2;
  248. }
  249. return 0;
  250. }
  251. private String probeScanner(Context context, ScannerPropertyWrapper scannerPropertyWrapper) throws EscanLibException {
  252. synchronized (this) {
  253. mCancelableScannerProbe = new CancelableScannerProbe();
  254. }
  255. String probeScanner = mCancelableScannerProbe.probeScanner(scannerPropertyWrapper, context);
  256. synchronized (this) {
  257. mCancelableScannerProbe = null;
  258. }
  259. return probeScanner;
  260. }
  261. private void convertFile() {
  262. mResScanFileList = mImageProcessController.getScanFiles(mScanI2Runner.getScanPages());
  263. }
  264. /* access modifiers changed from: package-private */
  265. @VisibleForTesting
  266. public void scanProgressCallback(int i, int i2) {
  267. mImageProcessController.putScanResult(i, i2);
  268. }
  269. protected void onPostExecute(TaskError taskError) {
  270. ScanResultReceiver scanResultReceiver = mScanResultReceiver;
  271. if (scanResultReceiver != null) {
  272. scanResultReceiver.onScanEnd(taskError);
  273. }
  274. }
  275. public void cancelScan() {
  276. mCancelRequested = true;
  277. synchronized (this) {
  278. if (mCancelableScannerProbe != null) {
  279. mCancelableScannerProbe.cancel();
  280. }
  281. }
  282. mScanI2Runner.cancelScan();
  283. mImageProcessController.cancelThread();
  284. }
  285. private void checkCancel() throws LocalCancel {
  286. if (mCancelRequested) {
  287. throw new LocalCancel();
  288. }
  289. }
  290. /* access modifiers changed from: package-private */
  291. public void onImageProcessEnd(int i, int i2) {
  292. ScanResultReceiver scanResultReceiver = mScanResultReceiver;
  293. if (scanResultReceiver != null) {
  294. scanResultReceiver.onProgressUpdate(i, i2);
  295. }
  296. }
  297. private class TaskObserver implements EscanI2Lib.Observer {
  298. private TaskObserver() {
  299. }
  300. /* synthetic */ TaskObserver(I2ScanTask i2ScanTask, C24451 r2) {
  301. this();
  302. }
  303. public void update(int i, int i2) {
  304. if (i2 > 0) {
  305. I2ScanTask.this.scanProgressCallback(i, i2 - 1);
  306. }
  307. }
  308. }
  309. public static class TaskError {
  310. public static final int ERROR_SD_CARD_NOT_MOUNTED = 2;
  311. public static final int ESC_I2_ERROR = 1;
  312. public static final int OTHER_ERROR = 2;
  313. public static final int OTHER_ERROR_INVALID_SCAN_AREA = 3;
  314. public int error1;
  315. public int error2;
  316. public TaskError(int i, int i2) {
  317. error1 = i;
  318. error2 = i2;
  319. }
  320. public boolean isCancel() {
  321. return error1 == 1 && error2 == 1;
  322. }
  323. public static boolean isInvalidScanArea(@Nullable TaskError taskError) {
  324. return taskError != null && taskError.error1 == 2 && taskError.error2 == 3;
  325. }
  326. }
  327. static class LocalCancel extends Throwable {
  328. LocalCancel() {
  329. }
  330. }
  331. }