ManageDefaultNetwork.java 9.8 KB

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