From 60c1d4ec6498a026fca50fdc8c9ef7d31458251c Mon Sep 17 00:00:00 2001 From: Sundeep Ghuman Date: Thu, 13 Apr 2017 16:11:18 -0700 Subject: [PATCH] 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 --- .../android/settings/wifi/WifiSettings.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 38f5a43fc42..01551da34ef 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -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;