diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java index e0e6a1acc38..abab154f249 100644 --- a/src/com/android/settings/wifi/WifiEnabler.java +++ b/src/com/android/settings/wifi/WifiEnabler.java @@ -57,8 +57,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { - handleWifiStateChanged(intent.getIntExtra( - WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN)); + handleWifiStateChanged(mWifiManager.getWifiState()); } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) { if (!mConnected.get()) { handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState) diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 20f723c269d..8784d0954cc 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -196,7 +196,6 @@ public class WifiSettings extends RestrictedSettingsFragment mConnectedAccessPointPreferenceCategory = (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS); - mAccessPointsPreferenceCategory = (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS); mAdditionalSettingsPreferenceCategory = @@ -204,10 +203,6 @@ public class WifiSettings extends RestrictedSettingsFragment mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS); mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS); - if (isUiRestricted()) { - getPreferenceScreen().removePreference(mAdditionalSettingsPreferenceCategory); - } - Context prefContext = getPrefContext(); mAddPreference = new Preference(prefContext); mAddPreference.setIcon(R.drawable.ic_menu_add_inset); @@ -216,6 +211,11 @@ public class WifiSettings extends RestrictedSettingsFragment mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager()); + if (isUiRestricted()) { + getPreferenceScreen().removePreference(mAdditionalSettingsPreferenceCategory); + addMessagePreference(R.string.wifi_empty_list_user_restricted); + } + mBgThread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND); mBgThread.start(); } @@ -314,7 +314,7 @@ public class WifiSettings extends RestrictedSettingsFragment if (intent.hasExtra(EXTRA_START_CONNECT_SSID)) { mOpenSsid = intent.getStringExtra(EXTRA_START_CONNECT_SSID); - onAccessPointsChanged(); + updateAccessPointsDelayed(); } } @@ -614,53 +614,75 @@ public class WifiSettings extends RestrictedSettingsFragment } /** - * Shows the latest access points available with supplemental information like - * the strength of network and the security for it. + * Called to indicate the list of AccessPoints has been updated and + * getAccessPoints should be called to get the latest information. */ @Override public void onAccessPointsChanged() { + updateAccessPointsDelayed(); + } + + /** + * Updates access points from {@link WifiManager#getScanResults()}. Adds a delay to have + * progress bar displayed before starting to modify APs. + */ + private void updateAccessPointsDelayed() { // Safeguard from some delayed event handling - if (getActivity() == null) return; - final int wifiState = mWifiManager.getWifiState(); + if (getActivity() != null && !isUiRestricted() && mWifiManager.isWifiEnabled()) { + setProgressBarVisible(true); + getView().postDelayed(mUpdateAccessPointsRunnable, 300 /* delay milliseconds */); + } + } + + /** Called when the state of Wifi has changed. */ + @Override + public void onWifiStateChanged(int state) { if (isUiRestricted()) { - removeConnectedAccessPointPreference(); - mAccessPointsPreferenceCategory.removeAll(); - if (!isUiRestrictedByOnlyAdmin()) { - if (wifiState == WifiManager.WIFI_AP_STATE_DISABLED) { - setOffMessage(); - } else { - addMessagePreference(R.string.wifi_empty_list_user_restricted); - } - } return; } + final int wifiState = mWifiManager.getWifiState(); switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: - setProgressBarVisible(true); - // Have the progress bar displayed before starting to modify APs - getView().postDelayed(mUpdateAccessPointsRunnable, 300 /* delay milliseconds */); + updateAccessPointsDelayed(); break; case WifiManager.WIFI_STATE_ENABLING: removeConnectedAccessPointPreference(); mAccessPointsPreferenceCategory.removeAll(); + addMessagePreference(R.string.wifi_starting); setProgressBarVisible(true); break; case WifiManager.WIFI_STATE_DISABLING: + removeConnectedAccessPointPreference(); + mAccessPointsPreferenceCategory.removeAll(); addMessagePreference(R.string.wifi_stopping); break; case WifiManager.WIFI_STATE_DISABLED: setOffMessage(); - setConfigureWifiSettingsVisibility(); setProgressBarVisible(false); break; } } + /** + * Called when the connection state of wifi has changed and isConnected + * should be called to get the updated state. + */ + @Override + public void onConnectedChanged() { + updateAccessPointsDelayed(); + changeNextButtonState(mWifiTracker.isConnected()); + } + + private void updateAccessPointPreferences() { + // in case state has changed + if (!mWifiManager.isWifiEnabled()) { + return; + } // AccessPoints are sorted by the WifiTracker final List accessPoints = mWifiTracker.getAccessPoints(); @@ -796,10 +818,6 @@ public class WifiSettings extends RestrictedSettingsFragment } private void setConfigureWifiSettingsVisibility() { - if (isUiRestricted()) { - mAdditionalSettingsPreferenceCategory.removeAll(); - return; - } mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference); boolean wifiWakeupEnabled = Settings.Global.getInt( getContentResolver(), Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1; @@ -824,7 +842,7 @@ public class WifiSettings extends RestrictedSettingsFragment // read the system settings directly. Because when the device is in Airplane mode, even if // Wi-Fi scanning mode is on, WifiManager.isScanAlwaysAvailable() still returns "off". final ContentResolver resolver = getActivity().getContentResolver(); - final boolean wifiScanningMode = !isUiRestricted() && Settings.Global.getInt( + final boolean wifiScanningMode = Settings.Global.getInt( resolver, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1; if (!wifiScanningMode) { @@ -858,32 +876,10 @@ public class WifiSettings extends RestrictedSettingsFragment protected void setProgressBarVisible(boolean visible) { if (mProgressHeader != null) { - mProgressHeader.setVisibility( - visible && !isUiRestricted() ? View.VISIBLE : View.INVISIBLE); + mProgressHeader.setVisibility(visible ? View.VISIBLE : View.INVISIBLE); } } - @Override - public void onWifiStateChanged(int state) { - switch (state) { - case WifiManager.WIFI_STATE_ENABLING: - addMessagePreference(R.string.wifi_starting); - setProgressBarVisible(true); - break; - - case WifiManager.WIFI_STATE_DISABLED: - setOffMessage(); - setProgressBarVisible(false); - break; - } - } - - @Override - public void onConnectedChanged() { - onAccessPointsChanged(); - changeNextButtonState(mWifiTracker.isConnected()); - } - /** * Renames/replaces "Next" button when appropriate. "Next" button usually exists in * Wifi setup screens, not in usual wifi settings screen.