Merge "Fix wifi animation issues" into nyc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 4b976b5..a1cb7ee 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1041,6 +1041,19 @@
                 android:value="com.android.settings.applications.ProcessStatsSummary" />
         </activity>
 
+        <activity android:name="Settings$AppMemoryUsageActivity"
+                  android:label="@string/app_list_memory_use"
+                  android:icon="@drawable/ic_settings_memory">
+            <intent-filter>
+                <action android:name="android.settings.APP_MEMORY_USAGE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.category"
+                       android:value="com.android.settings.category.device" />
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.applications.ProcessStatsUi" />
+        </activity>
+
         <activity android:name="Settings$AllApplicationsActivity"
                 android:label="@string/applications_settings"
                 android:taskAffinity="">
diff --git a/res/layout/icc_lock_tabs.xml b/res/layout/icc_lock_tabs.xml
index d2a4acc..79b9660 100644
--- a/res/layout/icc_lock_tabs.xml
+++ b/res/layout/icc_lock_tabs.xml
@@ -46,8 +46,8 @@
             android:layout_width="0dip"
             android:layout_height="0dip" />
 
-        <ListView
-            android:id="@android:id/list"
+        <FrameLayout
+            android:id="@+id/main_content"
             android:layout_width="match_parent"
             android:layout_height="0dip"
             android:layout_weight="1"
diff --git a/res/layout/preview_seek_bar_view_pager.xml b/res/layout/preview_seek_bar_view_pager.xml
index 45c050e..66b492c 100644
--- a/res/layout/preview_seek_bar_view_pager.xml
+++ b/res/layout/preview_seek_bar_view_pager.xml
@@ -19,6 +19,7 @@
     android:layout_height="0dp"
     android:layout_weight="1"
     android:orientation="vertical"
+    android:minHeight="@dimen/preview_pager_min_height"
     android:padding="@dimen/preview_pager_padding"
     android:background="@drawable/preview_seek_bar_outline" >
 
@@ -27,7 +28,8 @@
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
-        android:background="?android:attr/colorBackgroundFloating" />
+        android:background="?android:attr/colorBackgroundFloating"
+        android:contentDescription="@string/preview_pager_content_description" />
 
     <TextView
         android:layout_width="match_parent"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 3cd5503..a4e3401 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -294,6 +294,7 @@
 
     <!-- Display Size and Font Size preview screen -->
     <dimen name="preview_pager_padding">8dp</dimen>
+    <dimen name="preview_pager_min_height">200dp</dimen>
 
     <!-- Padding between the radio buttons/checkbox and text on the redaction interstitial -->
     <dimen name="redaction_padding_start">16dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 997cc40..6434a5f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -147,6 +147,8 @@
     <!-- Used for diagnostic info screens, precise translation isn't needed. Formats the SD card in the phone, meaning it will be erased and reformatted -->
     <string name="sdcard_format" product="default">Erase SD card</string>
 
+    <!-- Content description for preview pager. [CHAR LIMIT=NONE] -->
+    <string name="preview_pager_content_description">Preview</string>
     <!-- Content description for dot pager indicator for preview pager. [CHAR LIMIT=NONE] -->
     <string name="preview_page_indicator_content_description">Preview, page <xliff:g id="current_page" example="3">%1$d</xliff:g> of <xliff:g id="num_pages" example="9">%2$d</xliff:g></string>
 
@@ -591,7 +593,7 @@
     <!-- Wireless controls settings screen, setting check box label -->
     <string name="airplane_mode">Airplane mode</string>
     <!-- Main Settings screen settings title for things like airplane mode, tethering, NFC, VPN.  This will take you to another screen with those settings.  [CHAR LIMIT=30] -->
-    <string name="radio_controls_title">Other networks</string>
+    <string name="radio_controls_title">More</string>
     <!-- Wireless Settings screen title for things like Wi-Fi, bluetooth, airplane mode. -->
     <string name="wireless_networks_settings_title">Wireless &amp; networks</string>
     <!-- Main Settings screen settings summary text for the "Wireless controls" setting -->
diff --git a/res/xml/advanced_apps.xml b/res/xml/advanced_apps.xml
index 99da745..2673569 100644
--- a/res/xml/advanced_apps.xml
+++ b/res/xml/advanced_apps.xml
@@ -44,7 +44,8 @@
         <com.android.settings.applications.DefaultHomePreference
             android:key="default_home"
             android:title="@string/home_app"
-            android:summary="@string/no_default_home" />
+            android:summary="@string/no_default_home"
+            settings:keywords="@string/keywords_home" />
 
         <com.android.settings.applications.DefaultBrowserPreference
             android:key="default_browser"
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index abbb4c6..bb597a6 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -648,8 +648,13 @@
                                 mFingerprintManager.setActiveUser(UserHandle.myUserId());
                             }
                         });
+            } else {
+                // The removal callback will call finish, once all fingerprints are removed.
+                // We need to wait for that to occur, otherwise, the UI will still show that
+                // fingerprints exist even though they are (about to) be removed depending on
+                // the race condition.
+                finish();
             }
-            finish();
         }
 
         @Override
diff --git a/src/com/android/settings/EditPinPreference.java b/src/com/android/settings/EditPinPreference.java
index e53a2bf..fdad0a1 100644
--- a/src/com/android/settings/EditPinPreference.java
+++ b/src/com/android/settings/EditPinPreference.java
@@ -50,7 +50,7 @@
     protected void onBindDialogView(View view) {
         super.onBindDialogView(view);
 
-        final EditText editText = getEditText();
+        final EditText editText = (EditText) view.findViewById(android.R.id.edit);
 
         if (editText != null) {
             editText.setInputType(InputType.TYPE_CLASS_NUMBER |
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 1a9784b..25d4fb1 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -27,7 +27,6 @@
 import android.os.Message;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -40,7 +39,6 @@
 import android.widget.TabHost.TabSpec;
 import android.widget.TabWidget;
 import android.widget.Toast;
-
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
@@ -340,6 +338,7 @@
         mPinDialog.setDialogMessage(message);
     }
 
+    @Override
     public void onPinEntered(EditPinPreference preference, boolean positiveResult) {
         if (!positiveResult) {
             resetDialogState();
@@ -384,7 +383,8 @@
         }
     }
 
-    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
+    @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
         if (preference == mPinToggle) {
             // Get the new, preferred state
             mToState = mPinToggle.isChecked();
diff --git a/src/com/android/settings/InstrumentedFragment.java b/src/com/android/settings/InstrumentedFragment.java
index b4fb818..0e3528a 100644
--- a/src/com/android/settings/InstrumentedFragment.java
+++ b/src/com/android/settings/InstrumentedFragment.java
@@ -28,6 +28,9 @@
     // Declare new temporary categories here, starting after this value.
     public static final int UNDECLARED = 100000;
 
+    // Used by PreferenceActivity for the dummy fragment it adds, no useful data here.
+    public static final int PREFERENCE_ACTIVITY_FRAGMENT = UNDECLARED + 1;
+
     /**
      * Declare the view of this category.
      *
diff --git a/src/com/android/settings/PreferenceActivity.java b/src/com/android/settings/PreferenceActivity.java
index dc3689c..31b5f1f 100644
--- a/src/com/android/settings/PreferenceActivity.java
+++ b/src/com/android/settings/PreferenceActivity.java
@@ -17,7 +17,6 @@
 
 import android.annotation.Nullable;
 import android.os.Bundle;
-import android.support.v14.preference.PreferenceFragment;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 
@@ -57,7 +56,7 @@
                 || PreferenceActivityFragment.class.getName().equals(fragmentName);
     }
 
-    public static class PreferenceActivityFragment extends PreferenceFragment {
+    public static class PreferenceActivityFragment extends SettingsPreferenceFragment {
         @Override
         public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
             ((PreferenceActivity) getActivity()).mFragment = this;
@@ -70,6 +69,14 @@
             }
             return super.onPreferenceTreeClick(preference);
         }
+
+        @Override
+        protected int getMetricsCategory() {
+            if (getActivity() instanceof InstrumentedPreferenceActivity) {
+                return ((InstrumentedPreferenceActivity) getActivity()).getMetricsCategory();
+            }
+            return InstrumentedFragment.PREFERENCE_ACTIVITY_FRAGMENT;
+        }
     }
 
 }
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 4aebe82..9c3a0d9 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -122,6 +122,7 @@
     public static class ApnSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiCallingSettingsActivity extends SettingsActivity { /* empty */ }
     public static class MemorySettingsActivity extends SettingsActivity { /* empty */ }
+    public static class AppMemoryUsageActivity extends SettingsActivity { /* empty */ }
     public static class OverlaySettingsActivity extends SettingsActivity { /* empty */ }
     public static class WriteSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AppDrawOverlaySettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 34fed57..5a29cb7 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -106,6 +106,7 @@
     private static final String EXTRA_SORT_ORDER = "sortOrder";
     private static final String EXTRA_SHOW_SYSTEM = "showSystem";
     private static final String EXTRA_HAS_ENTRIES = "hasEntries";
+    private static final String EXTRA_HAS_BRIDGE = "hasBridge";
 
     // attributes used as keys when passing values to InstalledAppDetails activity
     public static final String APP_CHG = "chg";
@@ -314,6 +315,8 @@
             if (savedInstanceState != null) {
                 mApplications.mHasReceivedLoadEntries =
                         savedInstanceState.getBoolean(EXTRA_HAS_ENTRIES, false);
+                mApplications.mHasReceivedBridgeCallback =
+                        savedInstanceState.getBoolean(EXTRA_HAS_BRIDGE, false);
             }
             mListView.setAdapter(mApplications);
             mListView.setRecyclerListener(mApplications);
@@ -447,6 +450,7 @@
         outState.putInt(EXTRA_SORT_ORDER, mSortOrder);
         outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
         outState.putBoolean(EXTRA_HAS_ENTRIES, mApplications.mHasReceivedLoadEntries);
+        outState.putBoolean(EXTRA_HAS_BRIDGE, mApplications.mHasReceivedBridgeCallback);
     }
 
     @Override
@@ -640,7 +644,7 @@
     }
 
     public void setHasDisabled(boolean hasDisabledApps) {
-        if (mListType == LIST_TYPE_HIGH_POWER) {
+        if (mListType != LIST_TYPE_MAIN) {
             return;
         }
         mFilterAdapter.setFilterEnabled(FILTER_APPS_ENABLED, hasDisabledApps);
@@ -822,7 +826,7 @@
                 if (mExtraInfoBridge != null) {
                     mExtraInfoBridge.resume();
                 }
-                rebuild(true);
+                rebuild(false);
             } else {
                 rebuild(sort);
             }
@@ -855,7 +859,7 @@
 
         public void rebuild(boolean eraseold) {
             if (!mHasReceivedLoadEntries
-                    && (mExtraInfoBridge == null || mHasReceivedBridgeCallback)) {
+                    || (mExtraInfoBridge != null && !mHasReceivedBridgeCallback)) {
                 // Don't rebuild the list until all the app entries are loaded.
                 return;
             }