Improve responsiveness of toggling wifi and refactor user restriction logic.
Moved logic for handling wifi state changes into correct listener method. Changed logic for handling isUiRestricted. This should streamline toggling flow for WiFi both when Wifi Scanning is on and off, and in guest mode. Bug: 36724409 Bug: 36711085 Bug: 36398321 Test: make, test cases in tracking bug Change-Id: I69fe07369db192c94f81dd678087ac4e8c35197b
This commit is contained in:
@@ -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)
|
||||||
|
@@ -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.
|
||||||
|
Reference in New Issue
Block a user