Improve responsiveness of toggling wifi and refactor user restriction logic. am: 19b74d9213
am: 40adeaf28a
Change-Id: I5cbd3b05d16a64ffd488db739d87b2043347ccca
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