ManageDefaultNetwork.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package com.epson.mobilephone.common.wifidirect;
  2. import android.annotation.TargetApi;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.net.ConnectivityManager;
  6. import android.net.Network;
  7. import android.net.NetworkCapabilities;
  8. import android.net.NetworkRequest;
  9. import android.net.Uri;
  10. import android.net.wifi.WifiManager;
  11. import android.os.Build;
  12. import android.provider.Settings;
  13. import com.google.api.client.http.HttpMethods;
  14. import com.google.common.net.HttpHeaders;
  15. import java.io.IOException;
  16. import java.net.HttpURLConnection;
  17. import java.net.URL;
  18. import org.opencv.videoio.Videoio;
  19. @TargetApi(21)
  20. public class ManageDefaultNetwork {
  21. private static final String CHECKURL = "http://epson.com";
  22. private static final String TAG = "ManageDefaultNetwork";
  23. private static final int TIMEOUT_CHECKURL = 5000;
  24. private static ManageDefaultNetwork manageDefaultNetwork;
  25. volatile boolean canConnected = false;
  26. private String checkedSSID = null;
  27. /* access modifiers changed from: private */
  28. public ConnectivityManager connectivityManager = null;
  29. private boolean isOnline = false;
  30. /* access modifiers changed from: private */
  31. public volatile Object lock = new Object();
  32. private Context mContext = null;
  33. private ManageDefaultNetworkCallback manageDefaultNetworkCallback = null;
  34. private WifiManager wifiManager = null;
  35. private ManageDefaultNetwork(Context context) {
  36. this.mContext = context.getApplicationContext();
  37. this.connectivityManager = (ConnectivityManager) this.mContext.getSystemService("connectivity");
  38. this.wifiManager = (WifiManager) this.mContext.getSystemService("wifi");
  39. }
  40. public static ManageDefaultNetwork getInstance(Context context) {
  41. ManageDefaultNetwork manageDefaultNetwork2 = manageDefaultNetwork;
  42. if (manageDefaultNetwork2 != null) {
  43. return manageDefaultNetwork2;
  44. }
  45. manageDefaultNetwork = new ManageDefaultNetwork(context);
  46. return manageDefaultNetwork;
  47. }
  48. private synchronized boolean checkCurSSIDisOnline(String str) {
  49. boolean z;
  50. Network activeNetwork;
  51. NetworkCapabilities networkCapabilities;
  52. this.canConnected = false;
  53. if (WiFiControl.isSimpleAP(str)) {
  54. return false;
  55. }
  56. if (Build.VERSION.SDK_INT < 23 || (activeNetwork = this.connectivityManager.getActiveNetwork()) == null || (networkCapabilities = this.connectivityManager.getNetworkCapabilities(activeNetwork)) == null || !networkCapabilities.hasTransport(0)) {
  57. synchronized (this.lock) {
  58. EPLog.m86d(TAG, "Checking whether isOnline : " + str);
  59. new Thread(new Runnable() {
  60. public void run() {
  61. try {
  62. HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(ManageDefaultNetwork.CHECKURL).openConnection();
  63. httpURLConnection.setRequestMethod(HttpMethods.HEAD);
  64. httpURLConnection.setUseCaches(false);
  65. httpURLConnection.setRequestProperty(HttpHeaders.CONNECTION, "close");
  66. httpURLConnection.setConnectTimeout(5000);
  67. httpURLConnection.connect();
  68. int responseCode = httpURLConnection.getResponseCode();
  69. EPLog.m86d(ManageDefaultNetwork.TAG, "getResponseCode() : " + responseCode);
  70. httpURLConnection.disconnect();
  71. if (responseCode > 0) {
  72. ManageDefaultNetwork.this.canConnected = true;
  73. }
  74. } catch (IOException unused) {
  75. EPLog.m87e(ManageDefaultNetwork.TAG, "HttpURLConnection failed");
  76. ManageDefaultNetwork.this.canConnected = false;
  77. }
  78. synchronized (ManageDefaultNetwork.this.lock) {
  79. try {
  80. ManageDefaultNetwork.this.lock.notifyAll();
  81. } catch (IllegalMonitorStateException e) {
  82. e.printStackTrace();
  83. }
  84. }
  85. }
  86. }).start();
  87. try {
  88. this.lock.wait(10000);
  89. } catch (InterruptedException e) {
  90. e.printStackTrace();
  91. }
  92. z = this.canConnected;
  93. }
  94. return z;
  95. }
  96. EPLog.m86d(TAG, "WiFi connected, But default network is cellular. " + str + "is offline.");
  97. return false;
  98. }
  99. public synchronized void setDefaultNetworkSimpleAp() {
  100. if (Build.VERSION.SDK_INT >= 21) {
  101. String curSSID = WiFiUtils.getInstance(this.mContext).getCurSSID();
  102. if (curSSID == null) {
  103. EPLog.m86d(TAG, "Not connected");
  104. return;
  105. }
  106. if (!curSSID.equals(this.checkedSSID)) {
  107. this.checkedSSID = curSSID;
  108. this.isOnline = checkCurSSIDisOnline(curSSID);
  109. if (this.isOnline) {
  110. EPLog.m86d(TAG, curSSID + "is online.");
  111. return;
  112. }
  113. } else if (this.isOnline) {
  114. EPLog.m86d(TAG, curSSID + "is online.");
  115. return;
  116. }
  117. if (Build.VERSION.SDK_INT >= 23) {
  118. if (this.connectivityManager.getBoundNetworkForProcess() != null) {
  119. EPLog.m86d(TAG, "Already bindProcessToNetwork called");
  120. return;
  121. }
  122. } else if (Build.VERSION.SDK_INT >= 21) {
  123. ConnectivityManager connectivityManager2 = this.connectivityManager;
  124. if (ConnectivityManager.getProcessDefaultNetwork() != null) {
  125. EPLog.m86d(TAG, "Already setProcessDefaultNetwork called");
  126. return;
  127. }
  128. } else {
  129. return;
  130. }
  131. NetworkRequest.Builder builder = new NetworkRequest.Builder();
  132. builder.removeCapability(12);
  133. builder.addTransportType(1);
  134. try {
  135. if (this.manageDefaultNetworkCallback == null) {
  136. this.manageDefaultNetworkCallback = new ManageDefaultNetworkCallback();
  137. }
  138. this.connectivityManager.requestNetwork(builder.build(), this.manageDefaultNetworkCallback);
  139. } catch (SecurityException e) {
  140. e.printStackTrace();
  141. if (Build.VERSION.SDK_INT >= 23) {
  142. try {
  143. if (!Settings.System.canWrite(this.mContext)) {
  144. Intent intent = new Intent("android.settings.action.MANAGE_WRITE_SETTINGS");
  145. intent.setFlags(Videoio.CAP_INTELPERC_IMAGE_GENERATOR);
  146. intent.setData(Uri.parse("package:" + this.mContext.getPackageName()));
  147. this.mContext.startActivity(intent);
  148. return;
  149. }
  150. } catch (Exception e2) {
  151. e2.printStackTrace();
  152. }
  153. }
  154. } catch (Exception e3) {
  155. e3.printStackTrace();
  156. }
  157. } else {
  158. return;
  159. }
  160. return;
  161. }
  162. public synchronized void resetDefaultNetwork() {
  163. if (Build.VERSION.SDK_INT >= 23) {
  164. if (this.connectivityManager.getBoundNetworkForProcess() != null) {
  165. EPLog.m86d(TAG, "resetProcessDefaultNetwork");
  166. this.connectivityManager.bindProcessToNetwork((Network) null);
  167. }
  168. } else if (Build.VERSION.SDK_INT >= 21) {
  169. ConnectivityManager connectivityManager2 = this.connectivityManager;
  170. if (ConnectivityManager.getProcessDefaultNetwork() != null) {
  171. EPLog.m86d(TAG, "resetProcessDefaultNetwork");
  172. ConnectivityManager connectivityManager3 = this.connectivityManager;
  173. ConnectivityManager.setProcessDefaultNetwork((Network) null);
  174. }
  175. } else {
  176. return;
  177. }
  178. try {
  179. if (this.manageDefaultNetworkCallback != null) {
  180. this.connectivityManager.unregisterNetworkCallback(this.manageDefaultNetworkCallback);
  181. this.manageDefaultNetworkCallback = null;
  182. }
  183. } catch (IllegalArgumentException e) {
  184. e.printStackTrace();
  185. } catch (Exception e2) {
  186. e2.printStackTrace();
  187. }
  188. }
  189. class ManageDefaultNetworkCallback extends ConnectivityManager.NetworkCallback {
  190. ManageDefaultNetworkCallback() {
  191. }
  192. public void onAvailable(Network network) {
  193. EPLog.m86d(ManageDefaultNetwork.TAG, "Call onAvailable");
  194. super.onAvailable(network);
  195. if (Build.VERSION.SDK_INT < 23) {
  196. ConnectivityManager unused = ManageDefaultNetwork.this.connectivityManager;
  197. if (ConnectivityManager.getProcessDefaultNetwork() == null) {
  198. ConnectivityManager unused2 = ManageDefaultNetwork.this.connectivityManager;
  199. if (ConnectivityManager.setProcessDefaultNetwork(network)) {
  200. EPLog.m86d(ManageDefaultNetwork.TAG, "setProcessDefaultNetwork");
  201. }
  202. }
  203. } else if (ManageDefaultNetwork.this.connectivityManager.getBoundNetworkForProcess() == null && ManageDefaultNetwork.this.connectivityManager.bindProcessToNetwork(network)) {
  204. EPLog.m86d(ManageDefaultNetwork.TAG, "bindProcessToNetwork");
  205. }
  206. }
  207. public void onLost(Network network) {
  208. EPLog.m86d(ManageDefaultNetwork.TAG, "Call onLost");
  209. super.onLost(network);
  210. ManageDefaultNetwork.this.resetDefaultNetwork();
  211. }
  212. }
  213. }