GetPrinterReplyData.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. package epson.maintain.activity;
  2. import android.app.Dialog;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.res.Configuration;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.Button;
  12. import androidx.appcompat.app.AppCompatActivity;
  13. import androidx.fragment.app.FragmentActivity;
  14. import com.epson.iprint.shared.SharedParamStatus;
  15. import com.epson.mobilephone.common.escpr.MediaInfo;
  16. import com.epson.mobilephone.common.maintain2.MaintainPrinter2;
  17. import com.epson.mobilephone.common.maintain2.MaintainPrinterInfo2;
  18. import epson.common.Constants;
  19. import epson.common.DialogProgress;
  20. import epson.common.DialogProgressViewModel;
  21. import epson.common.Utils;
  22. import epson.print.R;
  23. import epson.print.CommonDefine;
  24. import epson.print.MyPrinter;
  25. import epson.print.Util.EPLog;
  26. import java.util.ArrayList;
  27. import java.util.Deque;
  28. public class GetPrinterReplyData extends AppCompatActivity implements MediaInfo, DialogProgress.DialogButtonClick {
  29. private static final int CLEANING_ERROR = 10;
  30. private static final int DELAY_TIME_MAINTAIN = 10;
  31. private static final String DIALOG_PROGRESS = "dialog_progress";
  32. private static final int END_REPLYDATA = 99;
  33. private static final int EPS_COMM_BID = 2;
  34. private static final int EPS_LANG_ESCPR = 1;
  35. private static final int EPS_MNT_CLEANING = 2;
  36. private static final int EPS_MNT_NOZZLE = 3;
  37. private static final int EPS_PRNERR_CEMPTY = 103;
  38. private static final int EPS_PRNERR_CFAIL = 104;
  39. private static final int EPS_PRNERR_DISABEL_CLEANING = 108;
  40. private static final int EPS_PRNERR_INKOUT = 6;
  41. private static final int GET_PRINTER_NAME = 8;
  42. private static final int HANDLE_ERROR = 4;
  43. public static final int ITEM_HEIGHT = 40;
  44. private static final int MAINTAIN_OK = 1;
  45. private static final int MAINTAIN_START = 0;
  46. private static final int NO_PRINTER_NAME = 9;
  47. public static final String PREFS_NAME = "PrintSetting";
  48. private static final int PROBE_ERROR = 7;
  49. private static final String PROBE_RESULT = "PROBE_ERROR";
  50. private static final int START_LOADCONFIG = 6;
  51. private static final String TAG = "MAINTAIN";
  52. private static final int UPDATE_INK = 3;
  53. private static final int UPDATE_SELECTED_PRINTER = 5;
  54. private static final int UPDATE_STT = 2;
  55. public static MaintainPrinter2 mPrinter;
  56. private Dialog customPro;
  57. private SharedParamStatus extParam;
  58. boolean isGotError = false;
  59. boolean isResearchScanner = false;
  60. private Thread mBackGround;
  61. private Thread mDoMaintainThread;
  62. boolean mHavePrinter = false;
  63. volatile boolean mIsCancelProbe = false;
  64. boolean mIsStillUpdate = true;
  65. boolean mIsStop = false;
  66. private Thread mLoadConfigThread;
  67. private DialogProgressViewModel mModelDialog;
  68. private String mPrinterId;
  69. private String mPrinterIp;
  70. private int mPrinterLocation;
  71. private String mPrinterName;
  72. private int[] mPrinterStatus;
  73. boolean mStartSearch = false;
  74. Handler mUiHandler = new Handler() {
  75. public void handleMessage(Message message) {
  76. int i = message.what;
  77. if (i != 99) {
  78. switch (i) {
  79. case 0:
  80. GetPrinterReplyData.this.showProDia();
  81. return;
  82. case 1:
  83. EPLog.i("Maintain", "********Maintain finish********");
  84. GetPrinterReplyData.this.interrupMaintainThread();
  85. return;
  86. case 2:
  87. GetPrinterReplyData.this.updateStatus(message.getData().getInt("GET_STT_RESULT"));
  88. return;
  89. case 3:
  90. GetPrinterReplyData.this.updateInkInfo(message.getData().getInt("GET_INK_RESULT"));
  91. return;
  92. case 4:
  93. GetPrinterReplyData.this.cancelLoadConPro();
  94. GetPrinterReplyData.this.interrupMaintainThread();
  95. return;
  96. case 5:
  97. GetPrinterReplyData.this.updateSelectedPrinter();
  98. return;
  99. case 6:
  100. GetPrinterReplyData.this.showLoadConPro();
  101. return;
  102. case 7:
  103. GetPrinterReplyData.this.setResult(1);
  104. GetPrinterReplyData.this.finish();
  105. return;
  106. case 9:
  107. GetPrinterReplyData.this.cancelLoadConPro();
  108. GetPrinterReplyData.this.endLoadConThread();
  109. GetPrinterReplyData.this.setResult(1);
  110. GetPrinterReplyData.this.finish();
  111. return;
  112. case 10:
  113. GetPrinterReplyData.this.setupErrorMessage(10);
  114. GetPrinterReplyData.this.interrupMaintainThread();
  115. return;
  116. default:
  117. return;
  118. }
  119. } else {
  120. GetPrinterReplyData.this.endBackGroundThread();
  121. GetPrinterReplyData.this.cancelLoadConPro();
  122. GetPrinterReplyData.this.endLoadConThread();
  123. Intent intent = new Intent();
  124. intent.putExtra("extStatus", GetPrinterReplyData.this.extParam);
  125. GetPrinterReplyData.this.setResult(message.getData().getInt("END_RELPY_RESULT"), intent);
  126. GetPrinterReplyData.this.finish();
  127. }
  128. }
  129. };
  130. private String inkCodeToString(int i) {
  131. switch (i) {
  132. case 0:
  133. return "Black";
  134. case 1:
  135. return "Cyan";
  136. case 2:
  137. return "Magenta";
  138. case 3:
  139. return "Yellow";
  140. case 4:
  141. return "Light Cyan";
  142. case 5:
  143. return "Light Magenta";
  144. case 6:
  145. return "Light Yellow";
  146. case 7:
  147. return "Dark Yellow";
  148. case 8:
  149. return "Light Black";
  150. case 9:
  151. return "Red";
  152. case 10:
  153. return "Blue";
  154. case 12:
  155. return "Light Gray";
  156. case 14:
  157. return "Gloss Optimizer";
  158. case 17:
  159. return "Black";
  160. case 18:
  161. return "Orange";
  162. case 19:
  163. return "Green";
  164. case 20:
  165. return "White";
  166. case 21:
  167. return "Clean";
  168. default:
  169. return "unKnown";
  170. }
  171. }
  172. public void onNegativeClick(String str) {
  173. }
  174. public void onNeutralClick(String str) {
  175. }
  176. public void onPositiveClick(String str) {
  177. }
  178. protected void onCreate(Bundle bundle) {
  179. super.onCreate(bundle);
  180. mModelDialog = (DialogProgressViewModel) ViewModelProviders.m2of((FragmentActivity) this).get(DialogProgressViewModel.class);
  181. mModelDialog.getDialogJob().observe(this, new Observer() {
  182. public final void onChanged(Object obj) {
  183. GetPrinterReplyData.lambda$onCreate$0(GetPrinterReplyData.this, (Deque) obj);
  184. }
  185. });
  186. extParam = (SharedParamStatus) getIntent().getSerializableExtra("extStatus");
  187. if (this.extParam == null) {
  188. extParam = new SharedParamStatus();
  189. }
  190. if (mPrinter == null) {
  191. mPrinter = MaintainPrinter2.getInstance();
  192. }
  193. EPLog.i(TAG, "onCreate");
  194. lockRotation();
  195. mPrinter.doInitDriver(this, 2);
  196. startLoadConThread();
  197. }
  198. public static /* synthetic */ void lambda$onCreate$0(GetPrinterReplyData getPrinterReplyData, Deque deque) {
  199. String[] checkQueue = getPrinterReplyData.mModelDialog.checkQueue();
  200. if (checkQueue != null) {
  201. String str = checkQueue[0];
  202. String str2 = checkQueue[1];
  203. if (str2.equals("do_show")) {
  204. getPrinterReplyData.showDialog(str);
  205. }
  206. if (str2.equals("do_dismiss")) {
  207. getPrinterReplyData.dismissDialog(str);
  208. }
  209. }
  210. }
  211. private void lockRotation() {
  212. switch (getResources().getConfiguration().orientation) {
  213. case 1:
  214. setRequestedOrientation(1);
  215. return;
  216. case 2:
  217. setRequestedOrientation(0);
  218. return;
  219. default:
  220. return;
  221. }
  222. }
  223. public void startLoadConThread() {
  224. mIsCancelProbe = false;
  225. mLoadConfigThread = new Thread(new Runnable() {
  226. public void run() {
  227. EPLog.i(GetPrinterReplyData.TAG, "new load Config thread");
  228. GetPrinterReplyData.mUiHandler.sendEmptyMessage(6);
  229. try {
  230. Thread.sleep(500);
  231. } catch (InterruptedException e) {
  232. e.printStackTrace();
  233. }
  234. GetPrinterReplyData.this.loadConfig();
  235. if (GetPrinterReplyData.mPrinterId == null || GetPrinterReplyData.mPrinterName == null) {
  236. GetPrinterReplyData getPrinterReplyData = GetPrinterReplyData.this;
  237. getPrinterReplyData.mHavePrinter = false;
  238. getPrinterReplyData.mUiHandler.sendEmptyMessage(9);
  239. EPLog.i(GetPrinterReplyData.TAG, "not select printer");
  240. return;
  241. }
  242. GetPrinterReplyData.mUiHandler.sendEmptyMessage(8);
  243. EPLog.i("startLoadConThread", "mPrinter.doProbePrinter");
  244. if (!GetPrinterReplyData.mIsCancelProbe) {
  245. int doProbePrinter = GetPrinterReplyData.mPrinter.doProbePrinter(60, GetPrinterReplyData.mPrinterId, GetPrinterReplyData.mPrinterIp, GetPrinterReplyData.mPrinterLocation);
  246. while (!GetPrinterReplyData.mIsCancelProbe && doProbePrinter != 0) {
  247. try {
  248. Message message = new Message();
  249. message.what = 7;
  250. Bundle bundle = new Bundle();
  251. bundle.putInt(GetPrinterReplyData.PROBE_RESULT, doProbePrinter);
  252. message.setData(bundle);
  253. GetPrinterReplyData.mUiHandler.sendMessage(message);
  254. Thread.sleep(4000);
  255. if (!GetPrinterReplyData.mIsCancelProbe) {
  256. doProbePrinter = GetPrinterReplyData.mPrinter.doProbePrinter(60, GetPrinterReplyData.mPrinterId, GetPrinterReplyData.mPrinterIp, GetPrinterReplyData.mPrinterLocation);
  257. }
  258. } catch (InterruptedException e2) {
  259. e2.printStackTrace();
  260. }
  261. }
  262. EPLog.i(GetPrinterReplyData.TAG, "Probe Printer result: " + doProbePrinter);
  263. if (doProbePrinter == 0) {
  264. GetPrinterReplyData.mPrinter.setMSearchPos(0);
  265. GetPrinterReplyData getPrinterReplyData2 = GetPrinterReplyData.this;
  266. getPrinterReplyData2.mHavePrinter = true;
  267. getPrinterReplyData2.mUiHandler.sendEmptyMessage(5);
  268. }
  269. }
  270. }
  271. });
  272. mLoadConfigThread.start();
  273. }
  274. private void setupErrorMessage(int i) {
  275. Utils.makeMessageBox(this, getString(R.string.EPS_PRNERR_DISABEL_CLEANING_TITLE), getString(R.string.EPS_PRNERR_DISABEL_CLEANING_MSG), getString(R.string.str_ok)).show();
  276. }
  277. public void showProDia() {
  278. if (this.customPro == null) {
  279. customPro = new CustomProDialog(this, R.style.AppTheme_Translucent, R.layout.maintain_executing_dialog);
  280. }
  281. customPro.show();
  282. }
  283. public void cancelProDia() {
  284. Dialog dialog = customPro;
  285. if (dialog != null && dialog.isShowing()) {
  286. customPro.cancel();
  287. customPro = null;
  288. }
  289. }
  290. public void showLoadConPro() {
  291. mModelDialog.doShow(DIALOG_PROGRESS);
  292. }
  293. private void showDialog(String str) {
  294. DialogProgress dialogProgress;
  295. if (((str.hashCode() == -21731516 && str.equals(DIALOG_PROGRESS)) ? (char) 0 : 65535) != 0) {
  296. dialogProgress = null;
  297. } else {
  298. dialogProgress = DialogProgress.newInstance(str, 0, getString(R.string.str_wait));
  299. }
  300. if (dialogProgress != null) {
  301. dialogProgress.setCancelable(true);
  302. dialogProgress.show(getSupportFragmentManager(), str);
  303. }
  304. }
  305. private void dismissDialog(String str) {
  306. DialogFragment dialogFragment = (DialogFragment) getSupportFragmentManager().findFragmentByTag(str);
  307. if (dialogFragment != null) {
  308. dialogFragment.dismiss();
  309. }
  310. }
  311. public void cancelLoadConPro() {
  312. mModelDialog.doDismiss(DIALOG_PROGRESS);
  313. }
  314. public void endLoadConThread() {
  315. mIsCancelProbe = true;
  316. Thread thread = mLoadConfigThread;
  317. if (thread != null && thread.isAlive()) {
  318. mLoadConfigThread.interrupt();
  319. try {
  320. mLoadConfigThread.join();
  321. } catch (InterruptedException e) {
  322. e.printStackTrace();
  323. }
  324. mLoadConfigThread = null;
  325. }
  326. }
  327. public void startBackgroundThread() {
  328. mIsStillUpdate = true;
  329. mBackGround = new Thread(new Runnable() {
  330. public void run() {
  331. int doGetStatus = GetPrinterReplyData.mPrinter.doGetStatus();
  332. Message message = new Message();
  333. message.what = 2;
  334. Bundle bundle = new Bundle();
  335. bundle.putInt("GET_STT_RESULT", doGetStatus);
  336. message.setData(bundle);
  337. GetPrinterReplyData.mUiHandler.sendMessage(message);
  338. int doGetInkInfo = GetPrinterReplyData.mPrinter.doGetInkInfo();
  339. Message message2 = new Message();
  340. message2.what = 3;
  341. Bundle bundle2 = new Bundle();
  342. bundle2.putInt("GET_INK_RESULT", doGetInkInfo);
  343. message2.setData(bundle2);
  344. GetPrinterReplyData.mUiHandler.sendMessage(message2);
  345. }
  346. });
  347. mBackGround.setPriority(5);
  348. mBackGround.start();
  349. }
  350. public void endBackGroundThread() {
  351. mIsStillUpdate = false;
  352. Thread thread = mBackGround;
  353. if (thread != null && thread.isAlive()) {
  354. mBackGround.interrupt();
  355. try {
  356. mBackGround.join();
  357. } catch (InterruptedException unused) {
  358. }
  359. mBackGround = null;
  360. }
  361. }
  362. public void onConfigurationChanged(Configuration configuration) {
  363. super.onConfigurationChanged(configuration);
  364. int doGetStatus = mPrinter.doGetStatus();
  365. Message message = new Message();
  366. message.what = 2;
  367. Bundle bundle = new Bundle();
  368. bundle.putInt("GET_STT_RESULT", doGetStatus);
  369. message.setData(bundle);
  370. mUiHandler.sendMessage(message);
  371. }
  372. protected void onActivityResult(int i, int i2, Intent intent) {
  373. super.onActivityResult(i, i2, intent);
  374. if (i == 1) {
  375. if (i2 == 1) {
  376. mPrinter.setMSearchPos(intent.getIntExtra(Constants.PRINTER_POS, 0));
  377. mPrinterName = intent.getStringExtra(Constants.PRINTER_NAME);
  378. mPrinterId = intent.getStringExtra(Constants.PRINTER_ID);
  379. mPrinterIp = intent.getStringExtra(Constants.PRINTER_IP);
  380. Utils.savePref(getApplicationContext(), "PrintSetting", CommonDefine.RE_SEARCH, true);
  381. mUiHandler.sendEmptyMessage(8);
  382. }
  383. saveSelectedPrinter();
  384. }
  385. }
  386. public void updateSelectedPrinter() {
  387. cancelLoadConPro();
  388. endLoadConThread();
  389. int doSetPrinter = mPrinter.doSetPrinter();
  390. if (doSetPrinter == 0) {
  391. startBackgroundThread();
  392. mIsStillUpdate = true;
  393. return;
  394. }
  395. mIsStillUpdate = false;
  396. handlerError(doSetPrinter, false);
  397. }
  398. public void updateStatus(int i) {
  399. if (i == 0) {
  400. if (isPrinterReady() == 1) {
  401. int doGetInkInfo = mPrinter.doGetInkInfo();
  402. Message message = new Message();
  403. message.what = 3;
  404. Bundle bundle = new Bundle();
  405. bundle.putInt("GET_INK_RESULT", doGetInkInfo);
  406. message.setData(bundle);
  407. mUiHandler.sendMessage(message);
  408. }
  409. int[] iArr = mPrinterStatus;
  410. if (iArr[0] != 4) {
  411. return;
  412. }
  413. if (iArr[1] == 6 || iArr[1] == 103 || iArr[1] == 104) {
  414. int doGetInkInfo2 = mPrinter.doGetInkInfo();
  415. Message message2 = new Message();
  416. message2.what = 3;
  417. Bundle bundle2 = new Bundle();
  418. bundle2.putInt("GET_INK_RESULT", doGetInkInfo2);
  419. message2.setData(bundle2);
  420. mUiHandler.sendMessage(message2);
  421. return;
  422. }
  423. return;
  424. }
  425. handlerError(i, false);
  426. }
  427. public void updateInkInfo(int i) {
  428. int i2;
  429. MaintainPrinterInfo2 mPrinterInfor = mPrinter.getMPrinterInfor();
  430. if (i == 0) {
  431. int inkNum = mPrinterInfor.getInkNum();
  432. ArrayList arrayList = new ArrayList();
  433. ArrayList arrayList2 = new ArrayList();
  434. ArrayList arrayList3 = new ArrayList();
  435. i2 = -1;
  436. extParam.setPrinter_name(mPrinterName);
  437. extParam.setPrinter_status(mPrinterStatus[0]);
  438. for (int i3 = 0; i3 < inkNum; i3++) {
  439. arrayList.add(inkCodeToString(mPrinterInfor.getInkCode(i3)));
  440. arrayList2.add(Integer.valueOf(mPrinterInfor.getInkRemainingAmount(i3)));
  441. arrayList3.add(Integer.valueOf(mPrinterInfor.getInkStatus(i3)));
  442. }
  443. extParam.setArrayOutInkName(arrayList);
  444. extParam.setArrayOutInkRemain(arrayList2);
  445. extParam.setEscprlibInkStatus(arrayList3);
  446. } else {
  447. i2 = 1;
  448. }
  449. Message message = new Message();
  450. message.what = 99;
  451. Bundle bundle = new Bundle();
  452. bundle.putInt("END_RELPY_RESULT", i2);
  453. message.setData(bundle);
  454. mUiHandler.sendMessage(message);
  455. }
  456. public void handlerError(int i, boolean z) {
  457. cancelLoadConPro();
  458. }
  459. public int isPrinterReady() {
  460. mPrinterStatus = mPrinter.getMPrinterInfor().getMStatus();
  461. int[] iArr = mPrinterStatus;
  462. if (iArr[0] == 2 || iArr[0] == 1 || iArr[0] == 3) {
  463. return 0;
  464. }
  465. if (iArr[0] == 4) {
  466. return -1;
  467. }
  468. return 1;
  469. }
  470. public void interrupMaintainThread() {
  471. Thread thread = mDoMaintainThread;
  472. if (thread != null && thread.isAlive()) {
  473. mDoMaintainThread.interrupt();
  474. mDoMaintainThread = null;
  475. }
  476. }
  477. protected void onDestroy() {
  478. stopAllThread();
  479. super.onDestroy();
  480. EPLog.i(TAG, "onDestroy");
  481. }
  482. protected void onPause() {
  483. super.onPause();
  484. }
  485. protected void OLDonPause() {
  486. mIsStop = true;
  487. mIsCancelProbe = true;
  488. cancelLoadConPro();
  489. mPrinter.doCancelFindPrinter();
  490. endLoadConThread();
  491. interrupMaintainThread();
  492. endBackGroundThread();
  493. super.onPause();
  494. }
  495. protected void onStop() {
  496. super.onStop();
  497. }
  498. private void loadConfig() {
  499. MyPrinter curPrinter = MyPrinter.getCurPrinter(this);
  500. mPrinterId = curPrinter.getPrinterId();
  501. mPrinterName = curPrinter.getName();
  502. mPrinterIp = curPrinter.getIp();
  503. mPrinterLocation = curPrinter.getLocation();
  504. }
  505. private void saveSelectedPrinter() {
  506. Utils.savePref(getApplicationContext(), "PrintSetting", Constants.PRINTER_NAME, mPrinterName);
  507. Utils.savePref(getApplicationContext(), "PrintSetting", Constants.PRINTER_IP, mPrinterIp);
  508. Utils.savePref(getApplicationContext(), "PrintSetting", Constants.PRINTER_ID, mPrinterId);
  509. }
  510. public void onCancelDialog(String str) {
  511. if (((str.hashCode() == -21731516 && str.equals(DIALOG_PROGRESS)) ? (char) 0 : 65535) == 0) {
  512. stopAllThread();
  513. finish();
  514. }
  515. }
  516. private class CustomProDialog extends Dialog {
  517. private int mLayoutId;
  518. public CustomProDialog(Context context, int i, int i2) {
  519. super(context, i);
  520. mLayoutId = i2;
  521. setCancelable(false);
  522. }
  523. protected void onCreate(Bundle bundle) {
  524. super.onCreate(bundle);
  525. requestWindowFeature(1);
  526. View inflate = getLayoutInflater().inflate(mLayoutId, (ViewGroup) null);
  527. if (mLayoutId == R.layout.maintain_executing_dialog) {
  528. ((Button) inflate.findViewById(R.id.close_btn)).setOnClickListener(new View.OnClickListener() {
  529. public void onClick(View view) {
  530. CustomProDialog.this.cancel();
  531. GetPrinterReplyData.this.interrupMaintainThread();
  532. }
  533. });
  534. }
  535. setContentView(inflate);
  536. }
  537. }
  538. private void stopAllThread() {
  539. if (!mIsCancelProbe) {
  540. mIsStop = true;
  541. mIsCancelProbe = true;
  542. MaintainPrinter2 maintainPrinter2 = mPrinter;
  543. if (maintainPrinter2 != null) {
  544. maintainPrinter2.doCancelFindPrinter();
  545. }
  546. cancelLoadConPro();
  547. endLoadConThread();
  548. interrupMaintainThread();
  549. endBackGroundThread();
  550. }
  551. }
  552. }