diff --git a/app/src/full/java/org/fdroid/fdroid/net/WifiStateChangeService.java b/app/src/full/java/org/fdroid/fdroid/net/WifiStateChangeService.java index 81f738c2a..e2326dd73 100644 --- a/app/src/full/java/org/fdroid/fdroid/net/WifiStateChangeService.java +++ b/app/src/full/java/org/fdroid/fdroid/net/WifiStateChangeService.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.Intent; import android.net.DhcpInfo; import android.net.NetworkInfo; +import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; @@ -13,10 +14,12 @@ import android.support.annotation.Nullable; import android.support.v4.content.LocalBroadcastManager; import android.text.TextUtils; import android.util.Log; +import cc.mvdan.accesspoint.WifiApControl; import org.apache.commons.net.util.SubnetUtils; import org.fdroid.fdroid.BuildConfig; import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Preferences; +import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Repo; @@ -89,8 +92,9 @@ public class WifiStateChangeService extends IntentService { NetworkInfo ni = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); wifiState = wifiManager.getWifiState(); - if (ni == null || ni.isConnected()) { - Utils.debugLog(TAG, "ni == " + ni + " wifiState == " + printWifiState(wifiState)); + Utils.debugLog(TAG, "ni == " + ni + " wifiState == " + printWifiState(wifiState)); + if (ni == null + || ni.getState() == NetworkInfo.State.CONNECTED || ni.getState() == NetworkInfo.State.DISCONNECTED) { if (previousWifiState != wifiState && (wifiState == WifiManager.WIFI_STATE_ENABLED || wifiState == WifiManager.WIFI_STATE_DISABLING // might be switching to hotspot @@ -110,7 +114,6 @@ public class WifiStateChangeService extends IntentService { } public class WifiInfoThread extends Thread { - private static final String TAG = "WifiInfoThread"; @Override public void run() { @@ -129,7 +132,7 @@ public class WifiStateChangeService extends IntentService { if (wifiState == WifiManager.WIFI_STATE_ENABLED) { wifiInfo = wifiManager.getConnectionInfo(); FDroidApp.ipAddressString = formatIpAddress(wifiInfo.getIpAddress()); - setSsidFromWifiInfo(wifiInfo); + setSsid(wifiInfo); DhcpInfo dhcpInfo = wifiManager.getDhcpInfo(); if (dhcpInfo != null) { String netmask = formatIpAddress(dhcpInfo.netmask); @@ -147,14 +150,13 @@ public class WifiStateChangeService extends IntentService { setIpInfoFromNetworkInterface(); } } else if (wifiState == WifiManager.WIFI_STATE_DISABLED - || wifiState == WifiManager.WIFI_STATE_DISABLING) { + || wifiState == WifiManager.WIFI_STATE_DISABLING + || wifiState == WifiManager.WIFI_STATE_UNKNOWN) { // try once to see if its a hotspot setIpInfoFromNetworkInterface(); if (FDroidApp.ipAddressString == null) { return; } - } else { // a hotspot can be active during WIFI_STATE_UNKNOWN - setIpInfoFromNetworkInterface(); } if (retryCount > 120) { @@ -171,7 +173,7 @@ public class WifiStateChangeService extends IntentService { return; } - setSsidFromWifiInfo(wifiInfo); + setSsid(wifiInfo); String scheme; if (Preferences.get().isLocalRepoHttpsEnabled()) { @@ -226,16 +228,35 @@ public class WifiStateChangeService extends IntentService { } } - private void setSsidFromWifiInfo(WifiInfo wifiInfo) { - if (wifiInfo != null) { + private void setSsid(WifiInfo wifiInfo) { + if (wifiInfo != null && wifiInfo.getBSSID() != null) { String ssid = wifiInfo.getSSID(); Utils.debugLog(TAG, "Have wifi info, connected to " + ssid); - if (ssid != null) { + if (ssid == null) { + FDroidApp.ssid = getString(R.string.swap_blank_wifi_ssid); + } else { FDroidApp.ssid = ssid.replaceAll("^\"(.*)\"$", "$1"); } - String bssid = wifiInfo.getBSSID(); - if (bssid != null) { - FDroidApp.bssid = bssid; + FDroidApp.bssid = wifiInfo.getBSSID(); + } else { + WifiApControl wifiApControl = WifiApControl.getInstance(this); + Utils.debugLog(TAG, "WifiApControl: " + wifiApControl); + if (wifiApControl == null && FDroidApp.ipAddressString != null) { + wifiInfo = wifiManager.getConnectionInfo(); + if (wifiInfo != null && wifiInfo.getBSSID() != null) { + setSsid(wifiInfo); + } else { + FDroidApp.ssid = getString(R.string.swap_active_hotspot, ""); + } + } else if (wifiApControl != null && wifiApControl.isEnabled()) { + WifiConfiguration wifiConfiguration = wifiApControl.getConfiguration(); + Utils.debugLog(TAG, "WifiConfiguration: " + wifiConfiguration); + if (wifiConfiguration.hiddenSSID) { + FDroidApp.ssid = getString(R.string.swap_hidden_wifi_ssid); + } else { + FDroidApp.ssid = wifiConfiguration.SSID; + } + FDroidApp.bssid = wifiConfiguration.BSSID; } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a9d7250ba..bb2c85a25 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -478,6 +478,8 @@ This often occurs with apps installed via Google Play or other sources, if they No network yet %1$s (your hotspot) Visible via hotspot + (blank) + (hidden) Setting up hotspot… Stopping hotspot… Tap to open available networks