|
@@ -0,0 +1,115 @@
|
|
|
+package com.luojigou.xiaodou
|
|
|
+
|
|
|
+import android.content.BroadcastReceiver
|
|
|
+import android.content.Context
|
|
|
+import android.content.Intent
|
|
|
+import android.content.IntentFilter
|
|
|
+import android.content.pm.PackageManager
|
|
|
+import android.net.ConnectivityManager
|
|
|
+import android.net.wifi.WifiManager
|
|
|
+import android.os.Build
|
|
|
+import android.os.Bundle
|
|
|
+import androidx.appcompat.app.AppCompatActivity
|
|
|
+import androidx.fragment.app.Fragment
|
|
|
+import com.luojigou.xiaodou.wifi.XDScanWifiDisableFragment
|
|
|
+import com.luojigou.xiaodou.wifi.XDScanWifiNormalFragment
|
|
|
+import com.luojigou.xiaodou.wifi.XDScanWifiPermissionFragment
|
|
|
+import com.luojigou.xiaodou.wifi.XDScanWifiStatus
|
|
|
+
|
|
|
+class XDScanWifiActivity : AppCompatActivity(), XDScanWifiStatus.Host {
|
|
|
+ companion object {
|
|
|
+ fun start(context: Context) {
|
|
|
+ context.startActivity(Intent(context, XDScanWifiActivity::class.java))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private lateinit var wifiManager: WifiManager
|
|
|
+
|
|
|
+ private val disableFragment by lazy { XDScanWifiDisableFragment(this) }
|
|
|
+ private val normalFragment by lazy { XDScanWifiNormalFragment(this) }
|
|
|
+ private val permissionFragment by lazy { XDScanWifiPermissionFragment(this) }
|
|
|
+
|
|
|
+ private val wifiStatusReceiver = object : BroadcastReceiver() {
|
|
|
+ override fun onReceive(context: Context?, intent: Intent?) {
|
|
|
+ checkWifiPermissionAndEnable()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
+ super.onCreate(savedInstanceState)
|
|
|
+ setContentView(R.layout.activity_scanwifi)
|
|
|
+
|
|
|
+ wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager
|
|
|
+ setupReceiver()
|
|
|
+ checkWifiPermissionAndEnable()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun getWifiManager(): WifiManager = wifiManager
|
|
|
+
|
|
|
+
|
|
|
+ private fun setFragment(fragment: Fragment) {
|
|
|
+ val fragmentManager = supportFragmentManager;
|
|
|
+ val beginTransaction = fragmentManager.beginTransaction()
|
|
|
+ if (fragmentManager.findFragmentById(R.id.fragment_container) == null) {
|
|
|
+ beginTransaction.add(R.id.fragment_container, fragment)
|
|
|
+ } else {
|
|
|
+ beginTransaction.replace(R.id.fragment_container, fragment)
|
|
|
+ }
|
|
|
+ beginTransaction.commit()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onStatusChanged(status: XDScanWifiStatus) = checkWifiPermissionAndEnable()
|
|
|
+
|
|
|
+ private fun setupReceiver() {
|
|
|
+ val intentFilter = IntentFilter()
|
|
|
+ intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
|
|
+ intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
|
|
|
+ intentFilter.addAction("android.net.wifi.CONFIGURED_NETWORKS_CHANGE");
|
|
|
+ intentFilter.addAction("android.net.wifi.LINK_CONFIGURATION_CHANGED");
|
|
|
+ intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
|
|
|
+ intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
|
|
|
+
|
|
|
+ registerReceiver(wifiStatusReceiver, intentFilter)
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun teardownReceiver() {
|
|
|
+ unregisterReceiver(wifiStatusReceiver)
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun checkWifiPermissionAndEnable() {
|
|
|
+ if (!checkPermissions()) {
|
|
|
+ setFragment(permissionFragment)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!checkAndOpenWifi()) {
|
|
|
+ setFragment(disableFragment)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ setFragment(normalFragment)
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun checkPermissions(): Boolean {
|
|
|
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
|
|
+ hasPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) && hasPermission(android.Manifest.permission.CHANGE_WIFI_STATE)
|
|
|
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
|
+ hasPermission(android.Manifest.permission.CHANGE_WIFI_STATE)
|
|
|
+ } else {
|
|
|
+ true
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun hasPermission(permission: String): Boolean {
|
|
|
+ return checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun checkAndOpenWifi(): Boolean {
|
|
|
+ return wifiManager.wifiState != WifiManager.WIFI_STATE_DISABLED
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onDestroy() {
|
|
|
+ teardownReceiver()
|
|
|
+ super.onDestroy()
|
|
|
+ }
|
|
|
+}
|