ActivityConnectBase.java 6.4 KB

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