ActivityConnectBase.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package com.epson.mobilephone.common.wifidirect;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.content.IntentFilter;
  5. import android.net.wifi.WifiManager;
  6. import android.os.AsyncTask;
  7. import android.os.Bundle;
  8. import androidx.appcompat.app.AppCompatActivity;
  9. public abstract class ActivityConnectBase extends AppCompatActivity {
  10. public static final String APNAME = "com.epson.iprint.wifidirect.apname";
  11. public static final String APPASS = "com.epson.iprint.wifidirect.appass";
  12. public static final int CONNECTING_TIMEOUT = 30;
  13. public static final String CREATE = "com.epson.iprint.wifidirect.create";
  14. protected static final int ID_ENABLED_LOCATIONSETTINGS = 2;
  15. protected static final int ID_ENABLED_WIFI = 1;
  16. public static final int ID_SHOWWIFISETTINGS = 4;
  17. public static final int ID_SHOWWIFISETTINGS_PROFILEFAILED = 5;
  18. public static final String NEEDINFO = "com.epson.iprint.wifidirect.needinfo";
  19. public static final int RESULT_ERROR = 2;
  20. public static final int RESULT_USERCANCEL = 1;
  21. public static final String SHOWERROR = "com.epson.iprint.wifidirect.showerror";
  22. public static final String SHOWTIP = "com.epson.iprint.wifidirect.showconnecttip";
  23. private static final String TAG = "ActivityConnectBase";
  24. public static final String TIMEOUT = "com.epson.iprint.wifidirect.timeout";
  25. private static int sLastDetailResult = -1;
  26. ConnectingObserver connectingObserver = new ConnectingObserver();
  27. String expectedPrtMacAddr = "";
  28. WifiManager mWifiManager = null;
  29. boolean needInfo = false;
  30. SearchWiFiDirectPrinterTask searchWiFiDirectPrinter = null;
  31. boolean showConnectedTip = true;
  32. boolean showErrorDlg = false;
  33. protected Status status = Status.IDLE;
  34. String targetSsid = "";
  35. FindPrinterTask taskFindPrinter = null;
  36. int timeout = 30;
  37. enum Status {
  38. IDLE,
  39. WIFI_SCANNING,
  40. WIFI_CONNECTING,
  41. WIFI_CONNECTED,
  42. PRINTER_FINDING
  43. }
  44. protected abstract void closeWaitingDialog();
  45. protected abstract void onEnabledWifi();
  46. protected abstract void onError();
  47. public static int getLastDetailResult() {
  48. return sLastDetailResult;
  49. }
  50. public static void setLastDetailResult(int i) {
  51. sLastDetailResult = i;
  52. }
  53. protected void onCreate(Bundle bundle) {
  54. super.onCreate(bundle);
  55. mWifiManager = (WifiManager) getApplicationContext().getApplicationContext().getSystemService(Service.WIFI_SERVICE);
  56. requestWindowFeature(1);
  57. searchWiFiDirectPrinter = SearchWiFiDirectPrinterTask.getInstance(this);
  58. }
  59. protected void onActivityResult(int i, int i2, Intent intent) {
  60. super.onActivityResult(i, i2, intent);
  61. if (i == 1) {
  62. if (i2 != -1) {
  63. closeWaitingDialog();
  64. setResult(0);
  65. setLastDetailResult(1);
  66. finish();
  67. return;
  68. }
  69. onEnabledWifi();
  70. }
  71. }
  72. protected void onResume() {
  73. EPLog.d(TAG, "onResume()");
  74. super.onResume();
  75. NfcDispatchUtils.enableForegroundDispatch(this, (IntentFilter[]) null, (String[][]) null);
  76. EPLog.d(TAG, "addFlags : FLAG_KEEP_SCREEN_ON ");
  77. getWindow().addFlags(128);
  78. }
  79. protected void onPause() {
  80. EPLog.d(TAG, "onPause()");
  81. super.onPause();
  82. NfcDispatchUtils.disableForegroundDispatch(this);
  83. EPLog.e(TAG, "clearFlags : FLAG_KEEP_SCREEN_ON ");
  84. getWindow().clearFlags(128);
  85. }
  86. protected void onStop() {
  87. EPLog.d(TAG, "onStop()");
  88. super.onStop();
  89. }
  90. protected void onDestroy() {
  91. EPLog.d(TAG, "onDestroy()");
  92. super.onDestroy();
  93. interrupt();
  94. }
  95. public void onBackPressed() {
  96. EPLog.d(TAG, "onBackPressed()");
  97. super.onBackPressed();
  98. interrupt();
  99. }
  100. private void interrupt() {
  101. status = Status.IDLE;
  102. SearchWiFiDirectPrinterTask searchWiFiDirectPrinterTask = searchWiFiDirectPrinter;
  103. if (searchWiFiDirectPrinterTask != null) {
  104. searchWiFiDirectPrinterTask.interrupt();
  105. searchWiFiDirectPrinter = null;
  106. }
  107. interruptConnecting();
  108. interruptFindingPrinter();
  109. }
  110. public void interruptFindingPrinter() {
  111. FindPrinterTask findPrinterTask = taskFindPrinter;
  112. if (findPrinterTask != null) {
  113. findPrinterTask.cancel();
  114. taskFindPrinter = null;
  115. }
  116. }
  117. protected void interruptConnecting() {
  118. connectingObserver.interrupt();
  119. }
  120. public void onConnectedPrinter(Intent intent) {
  121. EPLog.d(TAG, "finish():RESULT_OK");
  122. closeWaitingDialog();
  123. setResult(-1, intent);
  124. setLastDetailResult(-1);
  125. finish();
  126. }
  127. public void setupObserver() {
  128. connectingObserver.start(timeout * 1000);
  129. }
  130. class ConnectingObserver {
  131. AsyncTask<Void, Void, Void> observerTask = null;
  132. ConnectingObserver() {
  133. }
  134. private void start(final int i) {
  135. interrupt();
  136. EPLog.d(ActivityConnectBase.TAG, "Start ConnectingObserver");
  137. observerTask = new AsyncTask<Void, Void, Void>() {
  138. protected Void doInBackground(Void... voidArr) {
  139. int i = 0;
  140. do {
  141. try {
  142. if (i >= i) {
  143. return null;
  144. }
  145. Thread.sleep(100);
  146. i += 100;
  147. } catch (InterruptedException e) {
  148. e.printStackTrace();
  149. return null;
  150. }
  151. } while (!isCancelled());
  152. return null;
  153. }
  154. protected void onPostExecute(Void voidR) {
  155. EPLog.i(ActivityConnectBase.TAG, "Timeout ConnectingObserver");
  156. onError();
  157. }
  158. }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Void[0]);
  159. }
  160. private void interrupt() {
  161. AsyncTask<Void, Void, Void> asyncTask = observerTask;
  162. if (asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING && !this.observerTask.isCancelled()) {
  163. EPLog.d(ActivityConnectBase.TAG, "Stop ConnectingObserver");
  164. observerTask.cancel(false);
  165. }
  166. }
  167. }
  168. }