diff --git a/F-Droid/res/drawable-hdpi/hotspot.png b/F-Droid/res/drawable-hdpi/hotspot.png new file mode 100644 index 000000000..9b829e462 Binary files /dev/null and b/F-Droid/res/drawable-hdpi/hotspot.png differ diff --git a/F-Droid/res/drawable-ldpi/hotspot.png b/F-Droid/res/drawable-ldpi/hotspot.png new file mode 100644 index 000000000..2e4202f40 Binary files /dev/null and b/F-Droid/res/drawable-ldpi/hotspot.png differ diff --git a/F-Droid/res/drawable-mdpi/hotspot.png b/F-Droid/res/drawable-mdpi/hotspot.png new file mode 100644 index 000000000..e6ea8cfa2 Binary files /dev/null and b/F-Droid/res/drawable-mdpi/hotspot.png differ diff --git a/F-Droid/res/drawable/hotspot.png b/F-Droid/res/drawable/hotspot.png new file mode 100644 index 000000000..88953cea6 Binary files /dev/null and b/F-Droid/res/drawable/hotspot.png differ diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml index a5269a228..5da5d0d1f 100644 --- a/F-Droid/res/values/strings.xml +++ b/F-Droid/res/values/strings.xml @@ -300,6 +300,7 @@ F-Droid is an installable catalogue of FOSS (Free and Open Source Software) applications for the Android platform. The client makes it easy to browse, install, and keep track of updates on your device. If your friend has F-Droid and NFC turned on touch your phones together. Join the same Wifi as your friend + Help your friend join your hotspot Use Bluetooth instead Learn more about Wifi Swap apps @@ -307,7 +308,9 @@ Swap Swap success! No network yet + Your hotspot is active (Tap to open available networks) + (Tap to switch to a WiFi network) It\'s not working Open QR Code Scanner Welcome to F-Droid! diff --git a/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java b/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java index eca334673..bb90e1af4 100644 --- a/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java +++ b/F-Droid/src/org/fdroid/fdroid/net/WifiStateChangeService.java @@ -46,6 +46,8 @@ public class WifiStateChangeService extends Service { NetworkInfo is only passed via WifiStateChangeReceiver */ Log.i(TAG, "ni == " + ni + " wifiState == " + printWifiState(wifiState)); if (wifiState == WifiManager.WIFI_STATE_ENABLED + || wifiState == WifiManager.WIFI_STATE_DISABLING // might be switching to hotspot + || wifiState == WifiManager.WIFI_STATE_DISABLED // might be hotspot || wifiState == WifiManager.WIFI_STATE_UNKNOWN) { // might be hotspot if (asyncTask != null) { asyncTask.cancel(true); @@ -73,9 +75,15 @@ public class WifiStateChangeService extends Service { if (wifiState == WifiManager.WIFI_STATE_ENABLED) { wifiInfo = wifiManager.getConnectionInfo(); FDroidApp.ipAddressString = formatIpAddress(wifiInfo.getIpAddress()); - } else + } else if (wifiState == WifiManager.WIFI_STATE_DISABLED + || wifiState == WifiManager.WIFI_STATE_DISABLING) { + // try once to see if its a hotspot FDroidApp.ipAddressString = getIpAddressFromNetworkInterface(); - // TODO turning off a hotspot leaves wifiState as UNKNOWN with no IP, and this goes until next wifi change + if (FDroidApp.ipAddressString == null) + return null; + } else { // a hotspot can be active during WIFI_STATE_UNKNOWN + FDroidApp.ipAddressString = getIpAddressFromNetworkInterface(); + } Thread.sleep(1000); if (BuildConfig.DEBUG) { Log.d(TAG, "waiting for an IP address..."); diff --git a/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiFragment.java b/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiFragment.java index 7bbc461d7..9723945b9 100644 --- a/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiFragment.java +++ b/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiFragment.java @@ -17,6 +17,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; import org.fdroid.fdroid.FDroidApp; @@ -74,10 +75,31 @@ public class JoinWifiFragment extends Fragment { } private void refreshWifiState() { - if (getView() != null) { - TextView ssidView = (TextView) getView().findViewById(R.id.wifi_ssid); - String text = TextUtils.isEmpty(FDroidApp.ssid) ? getString(R.string.swap_no_wifi_network) : FDroidApp.ssid; - ssidView.setText(text); + View view = getView(); + if (view != null) { + TextView descriptionView = (TextView) view.findViewById(R.id.text_description); + ImageView wifiIcon = (ImageView) view.findViewById(R.id.wifi_icon); + TextView ssidView = (TextView) view.findViewById(R.id.wifi_ssid); + TextView tapView = (TextView) view.findViewById(R.id.wifi_available_networks_prompt); + if (TextUtils.isEmpty(FDroidApp.bssid) && !TextUtils.isEmpty(FDroidApp.ipAddressString)) { + // empty bssid with an ipAddress means hotspot mode + descriptionView.setText(R.string.swap_join_this_hotspot); + wifiIcon.setImageDrawable(getResources().getDrawable(R.drawable.hotspot)); + ssidView.setText(R.string.swap_active_hotspot); + tapView.setText(R.string.swap_switch_to_wifi); + } else if (TextUtils.isEmpty(FDroidApp.ssid)) { + // not connected to or setup with any wifi network + descriptionView.setText(R.string.swap_join_same_wifi); + wifiIcon.setImageDrawable(getResources().getDrawable(R.drawable.wifi)); + ssidView.setText(R.string.swap_no_wifi_network); + tapView.setText(R.string.swap_view_available_networks); + } else { + // connected to a regular wifi network + descriptionView.setText(R.string.swap_join_same_wifi); + wifiIcon.setImageDrawable(getResources().getDrawable(R.drawable.wifi)); + ssidView.setText(FDroidApp.ssid); + tapView.setText(R.string.swap_view_available_networks); + } } }