Fix startup jank in the Wifi Picker.

Synchronously fetch the latest APs during onResume and show these before
displaying the other wifi preferences. This fixes a visibile shuffling
issue. Additional Setting preferences are now programatically added
during onStart and hidden during onStop in order to avoid the animation
delay which causes a shuffling effect.

Bug: b/36406983
Test: Visual inspection. Animation jank is difficult to programatically
test.

Change-Id: I34b2d737a8e72e1dc296c170f753975fafce7a3e
This commit is contained in:
Sundeep Ghuman
2017-04-13 16:11:18 -07:00
parent a0e617f96d
commit 60c1d4ec64

View File

@@ -90,6 +90,7 @@ public class WifiSettings extends RestrictedSettingsFragment
WifiDialog.WifiDialogListener {
private static final String TAG = "WifiSettings";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
/* package */ static final int MENU_ID_WPS_PBC = Menu.FIRST;
private static final int MENU_ID_WPS_PIN = Menu.FIRST + 1;
@@ -203,6 +204,9 @@ public class WifiSettings extends RestrictedSettingsFragment
mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
// Hide additional settings until access points are shown during onStart
showAdditionalSettings(false);
Context prefContext = getPrefContext();
mAddPreference = new Preference(prefContext);
mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
@@ -220,6 +224,17 @@ public class WifiSettings extends RestrictedSettingsFragment
mBgThread.start();
}
// TODO(b/37429702): Figure out how to temporarily disable animations during startup and remove
// this method.
private void showAdditionalSettings(boolean visible) {
mAdditionalSettingsPreferenceCategory.setVisible(visible);
mAdditionalSettingsPreferenceCategory.removeAll();
if (visible) {
mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference);
mAdditionalSettingsPreferenceCategory.addPreference(mSavedNetworksPreference);
}
}
@Override
public void onDestroy() {
mBgThread.quit();
@@ -335,6 +350,17 @@ public class WifiSettings extends RestrictedSettingsFragment
mWifiEnabler = createWifiEnabler();
mWifiTracker.startTracking();
if (!isUiRestricted() && mWifiManager.isWifiEnabled()) {
setProgressBarVisible(true);
mWifiTracker.forceUpdate();
if (DEBUG) Log.d(TAG, "WifiSettings onStart APs: " + mWifiTracker.getAccessPoints());
getView().removeCallbacks(mUpdateAccessPointsRunnable);
updateAccessPointPreferences();
}
showAdditionalSettings(true);
}
/**
@@ -353,8 +379,6 @@ public class WifiSettings extends RestrictedSettingsFragment
if (mWifiEnabler != null) {
mWifiEnabler.resume(activity);
}
activity.invalidateOptionsMenu();
}
@Override
@@ -370,6 +394,7 @@ public class WifiSettings extends RestrictedSettingsFragment
mWifiTracker.stopTracking();
getView().removeCallbacks(mUpdateAccessPointsRunnable);
getView().removeCallbacks(mHideProgressBarRunnable);
showAdditionalSettings(false);
super.onStop();
}
@@ -733,7 +758,7 @@ public class WifiSettings extends RestrictedSettingsFragment
removeCachedPrefs(mAccessPointsPreferenceCategory);
mAddPreference.setOrder(index);
mAccessPointsPreferenceCategory.addPreference(mAddPreference);
setConfigureWifiSettingsVisibility();
setAdditionalSettingsSummaries();
if (!hasAvailableAccessPoints) {
setProgressBarVisible(true);
@@ -812,8 +837,8 @@ public class WifiSettings extends RestrictedSettingsFragment
// in the Wifi Network Details Fragment
pref.getAccessPoint().saveWifiState(pref.getExtras());
pref.setFragment(WifiNetworkDetailsFragment.class.getName());
pref.refresh();
mConnectedAccessPointPreferenceCategory.addPreference(pref);
mConnectedAccessPointPreferenceCategory.setVisible(true);
}
@@ -824,7 +849,7 @@ public class WifiSettings extends RestrictedSettingsFragment
mConnectedAccessPointPreferenceCategory.setVisible(false);
}
private void setConfigureWifiSettingsVisibility() {
private void setAdditionalSettingsSummaries() {
mAdditionalSettingsPreferenceCategory.addPreference(mConfigureWifiSettingsPreference);
boolean wifiWakeupEnabled = Settings.Global.getInt(
getContentResolver(), Settings.Global.WIFI_WAKEUP_ENABLED, 0) == 1;