Improve responsiveness of toggling wifi and refactor user restriction logic. am: 19b74d9213

am: 40adeaf28a

Change-Id: I5cbd3b05d16a64ffd488db739d87b2043347ccca
This commit is contained in:
Stephen Chen
2017-04-01 01:30:51 +00:00
committed by android-build-merger
2 changed files with 48 additions and 53 deletions

View File

@@ -57,8 +57,7 @@ public class WifiEnabler implements SwitchWidgetController.OnSwitchChangeListene
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); String action = intent.getAction();
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) { if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
handleWifiStateChanged(intent.getIntExtra( handleWifiStateChanged(mWifiManager.getWifiState());
WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN));
} else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) { } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
if (!mConnected.get()) { if (!mConnected.get()) {
handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState) handleStateChanged(WifiInfo.getDetailedStateOf((SupplicantState)

View File

@@ -196,7 +196,6 @@ public class WifiSettings extends RestrictedSettingsFragment
mConnectedAccessPointPreferenceCategory = mConnectedAccessPointPreferenceCategory =
(PreferenceCategory) findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS); (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);
mAccessPointsPreferenceCategory = mAccessPointsPreferenceCategory =
(PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS); (PreferenceCategory) findPreference(PREF_KEY_ACCESS_POINTS);
mAdditionalSettingsPreferenceCategory = mAdditionalSettingsPreferenceCategory =
@@ -204,10 +203,6 @@ public class WifiSettings extends RestrictedSettingsFragment
mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS); mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS); mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
if (isUiRestricted()) {
getPreferenceScreen().removePreference(mAdditionalSettingsPreferenceCategory);
}
Context prefContext = getPrefContext(); Context prefContext = getPrefContext();
mAddPreference = new Preference(prefContext); mAddPreference = new Preference(prefContext);
mAddPreference.setIcon(R.drawable.ic_menu_add_inset); mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
@@ -216,6 +211,11 @@ public class WifiSettings extends RestrictedSettingsFragment
mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager()); 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 = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);
mBgThread.start(); mBgThread.start();
} }
@@ -314,7 +314,7 @@ public class WifiSettings extends RestrictedSettingsFragment
if (intent.hasExtra(EXTRA_START_CONNECT_SSID)) { if (intent.hasExtra(EXTRA_START_CONNECT_SSID)) {
mOpenSsid = intent.getStringExtra(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 * Called to indicate the list of AccessPoints has been updated and
* the strength of network and the security for it. * getAccessPoints should be called to get the latest information.
*/ */
@Override @Override
public void onAccessPointsChanged() { 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 // Safeguard from some delayed event handling
if (getActivity() == null) return; if (getActivity() != null && !isUiRestricted() && mWifiManager.isWifiEnabled()) {
final int wifiState = mWifiManager.getWifiState(); setProgressBarVisible(true);
getView().postDelayed(mUpdateAccessPointsRunnable, 300 /* delay milliseconds */);
}
}
/** Called when the state of Wifi has changed. */
@Override
public void onWifiStateChanged(int state) {
if (isUiRestricted()) { 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; return;
} }
final int wifiState = mWifiManager.getWifiState();
switch (wifiState) { switch (wifiState) {
case WifiManager.WIFI_STATE_ENABLED: case WifiManager.WIFI_STATE_ENABLED:
setProgressBarVisible(true); updateAccessPointsDelayed();
// Have the progress bar displayed before starting to modify APs
getView().postDelayed(mUpdateAccessPointsRunnable, 300 /* delay milliseconds */);
break; break;
case WifiManager.WIFI_STATE_ENABLING: case WifiManager.WIFI_STATE_ENABLING:
removeConnectedAccessPointPreference(); removeConnectedAccessPointPreference();
mAccessPointsPreferenceCategory.removeAll(); mAccessPointsPreferenceCategory.removeAll();
addMessagePreference(R.string.wifi_starting);
setProgressBarVisible(true); setProgressBarVisible(true);
break; break;
case WifiManager.WIFI_STATE_DISABLING: case WifiManager.WIFI_STATE_DISABLING:
removeConnectedAccessPointPreference();
mAccessPointsPreferenceCategory.removeAll();
addMessagePreference(R.string.wifi_stopping); addMessagePreference(R.string.wifi_stopping);
break; break;
case WifiManager.WIFI_STATE_DISABLED: case WifiManager.WIFI_STATE_DISABLED:
setOffMessage(); setOffMessage();
setConfigureWifiSettingsVisibility();
setProgressBarVisible(false); setProgressBarVisible(false);
break; 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() { private void updateAccessPointPreferences() {
// in case state has changed
if (!mWifiManager.isWifiEnabled()) {
return;
}
// AccessPoints are sorted by the WifiTracker // AccessPoints are sorted by the WifiTracker
final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints(); final List<AccessPoint> accessPoints = mWifiTracker.getAccessPoints();
@@ -796,10 +818,6 @@ public class WifiSettings extends RestrictedSettingsFragment
} }
private void setConfigureWifiSettingsVisibility() { private void setConfigureWifiSettingsVisibility() {
if (isUiRestricted()) {
mAdditionalSettingsPreferenceCategory.removeAll();
return;
}
mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference); mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference);
boolean wifiWakeupEnabled = Settings.Global.getInt( boolean wifiWakeupEnabled = Settings.Global.getInt(
getContentResolver(), Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1; 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 // 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". // Wi-Fi scanning mode is on, WifiManager.isScanAlwaysAvailable() still returns "off".
final ContentResolver resolver = getActivity().getContentResolver(); 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; resolver, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1;
if (!wifiScanningMode) { if (!wifiScanningMode) {
@@ -858,32 +876,10 @@ public class WifiSettings extends RestrictedSettingsFragment
protected void setProgressBarVisible(boolean visible) { protected void setProgressBarVisible(boolean visible) {
if (mProgressHeader != null) { if (mProgressHeader != null) {
mProgressHeader.setVisibility( mProgressHeader.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
visible && !isUiRestricted() ? 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 * Renames/replaces "Next" button when appropriate. "Next" button usually exists in
* Wifi setup screens, not in usual wifi settings screen. * Wifi setup screens, not in usual wifi settings screen.