Merge "Fix startup jank in the Wifi Picker." into oc-dev
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 38f5a43..01551da 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -90,6 +90,7 @@
         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 @@
         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 @@
         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 @@
         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 @@
         if (mWifiEnabler != null) {
             mWifiEnabler.resume(activity);
         }
-
-        activity.invalidateOptionsMenu();
     }
 
     @Override
@@ -370,6 +394,7 @@
         mWifiTracker.stopTracking();
         getView().removeCallbacks(mUpdateAccessPointsRunnable);
         getView().removeCallbacks(mHideProgressBarRunnable);
+        showAdditionalSettings(false);
         super.onStop();
     }
 
@@ -733,7 +758,7 @@
         removeCachedPrefs(mAccessPointsPreferenceCategory);
         mAddPreference.setOrder(index);
         mAccessPointsPreferenceCategory.addPreference(mAddPreference);
-        setConfigureWifiSettingsVisibility();
+        setAdditionalSettingsSummaries();
 
         if (!hasAvailableAccessPoints) {
             setProgressBarVisible(true);
@@ -812,8 +837,8 @@
         // 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 @@
         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;