Merge "Update layout for App info page."
diff --git a/res/xml/ia_display_settings.xml b/res/xml/ia_display_settings.xml
index ed026f1..cb58ef2 100644
--- a/res/xml/ia_display_settings.xml
+++ b/res/xml/ia_display_settings.xml
@@ -110,12 +110,6 @@
                 android:title="@string/device_theme"
                 android:summary="%s" />
 
-        <Preference
-                android:key="wifi_display"
-                android:title="@string/wifi_display_settings_title"
-                settings:keywords="@string/keywords_display_cast_screen"
-                android:fragment="com.android.settings.wfd.WifiDisplaySettings" />
-
         <DropDownPreference
                 android:key="vr_display_pref"
                 android:summary="%s"
diff --git a/res/xml/ia_sound_settings.xml b/res/xml/ia_sound_settings.xml
index e63db0d..27fcdda 100644
--- a/res/xml/ia_sound_settings.xml
+++ b/res/xml/ia_sound_settings.xml
@@ -60,32 +60,34 @@
 
         <PreferenceCategory
           android:key="ringtones_preferecence_category"
-          android:title="@string/ringtones_category_preference_title" />
+          android:title="@string/ringtones_category_preference_title" >
 
-        <!-- Phone ringtone -->
-        <com.android.settings.DefaultRingtonePreference
-                android:key="ringtone"
-                android:title="@string/ringtone_title"
-                android:dialogTitle="@string/ringtone_title"
-                android:summary="@string/ringtone_summary"
-                android:ringtoneType="ringtone" />
+                <!-- Phone ringtone -->
+                <com.android.settings.DefaultRingtonePreference
+                    android:key="ringtone"
+                    android:title="@string/ringtone_title"
+                    android:dialogTitle="@string/ringtone_title"
+                    android:summary="@string/ringtone_summary"
+                    android:ringtoneType="ringtone" />
 
-        <!-- Default notification ringtone -->
-        <com.android.settings.DefaultRingtonePreference
-                android:key="notification_ringtone"
-                android:title="@string/notification_ringtone_title"
-                android:dialogTitle="@string/notification_ringtone_title"
-                android:summary="@string/ringtone_summary"
-                android:ringtoneType="notification" />
+                <!-- Default notification ringtone -->
+                <com.android.settings.DefaultRingtonePreference
+                    android:key="notification_ringtone"
+                    android:title="@string/notification_ringtone_title"
+                    android:dialogTitle="@string/notification_ringtone_title"
+                    android:summary="@string/ringtone_summary"
+                    android:ringtoneType="notification" />
 
-        <!-- Default alarm ringtone -->
-        <com.android.settings.DefaultRingtonePreference
-                android:key="alarm_ringtone"
-                android:title="@string/alarm_ringtone_title"
-                android:dialogTitle="@string/alarm_ringtone_title"
-                android:summary="@string/ringtone_summary"
-                android:persistent="false"
-                android:ringtoneType="alarm" />
+                <!-- Default alarm ringtone -->
+                <com.android.settings.DefaultRingtonePreference
+                    android:key="alarm_ringtone"
+                    android:title="@string/alarm_ringtone_title"
+                    android:dialogTitle="@string/alarm_ringtone_title"
+                    android:summary="@string/ringtone_summary"
+                    android:persistent="false"
+                    android:ringtoneType="alarm" />
+
+        </PreferenceCategory>
 
         <!-- Other sounds -->
         <PreferenceCategory
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index eeb4779..ddf0dec 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -1164,7 +1164,7 @@
 
     void setImsConfigProvisionedState(int configItem, boolean state) {
         if (phone != null && mImsManager != null) {
-            QueuedWork.singleThreadExecutor().submit(new Runnable() {
+            QueuedWork.queue(new Runnable() {
                 public void run() {
                     try {
                         mImsManager.getConfigInterface().setProvisionedValue(
@@ -1174,7 +1174,7 @@
                         Log.e(TAG, "setImsConfigProvisioned() exception:", e);
                     }
                 }
-            });
+            }, false);
         }
     }
 
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 51613c7..9168ead 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -527,8 +527,9 @@
             }
         }
 
-        if (DEBUG_TIMING) Log.d(LOG_TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
-                + " ms");
+        if (DEBUG_TIMING) {
+            Log.d(LOG_TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms");
+        }
     }
 
     public void setDisplaySearchMenu(boolean displaySearch) {
diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index c473182..ea9eee9 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -264,10 +264,16 @@
             final SortedMap<String, Credential> aliasMap = new TreeMap<>();
             for (final Credential.Type type : Credential.Type.values()) {
                 for (final String alias : keyStore.list(type.prefix, uid)) {
-                    // Do not show work profile keys in user credentials
-                    if (alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_ENCRYPT) ||
-                            alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_DECRYPT)) {
-                        continue;
+                    if (UserHandle.getAppId(uid) == Process.SYSTEM_UID) {
+                        // Do not show work profile keys in user credentials
+                        if (alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_ENCRYPT) ||
+                                alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_DECRYPT)) {
+                            continue;
+                        }
+                        // Do not show synthetic password keys in user credential
+                        if (alias.startsWith(LockPatternUtils.SYNTHETIC_PASSWORD_KEY_PREFIX)) {
+                            continue;
+                        }
                     }
                     Credential c = aliasMap.get(alias);
                     if (c == null) {
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 253ed76..32dc0c3 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -216,56 +216,4 @@
     protected int getHelpResource() {
         return R.string.help_url_more_networks;
     }
-
-    /**
-     * For Search.
-     */
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(
-                        Context context, boolean enabled) {
-                    // Remove wireless settings from search in demo mode
-                    if (UserManager.isDeviceInDemoMode(context)) {
-                        return Collections.emptyList();
-                    }
-                    SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.wireless_settings;
-                    return Arrays.asList(sir);
-                }
-
-                @Override
-                public List<String> getNonIndexableKeys(Context context) {
-                    final ArrayList<String> result = new ArrayList<String>();
-
-                    final UserManager um = (UserManager) context.getSystemService(
-                            Context.USER_SERVICE);
-                    final boolean isSecondaryUser = !um.isAdminUser();
-                    final boolean isWimaxEnabled = !isSecondaryUser
-                            && context.getResources().getBoolean(
-                            com.android.internal.R.bool.config_wimaxEnabled);
-                    if (!isWimaxEnabled) {
-                        result.add(KEY_WIMAX_SETTINGS);
-                    }
-
-                    new VpnPreferenceController(context).updateNonIndexableKeys(result);
-
-                    new NfcPreferenceController(context).updateNonIndexableKeys(result);
-                    new MobilePlanPreferenceController(context, null /* MobilePlanClickHandler */)
-                            .updateNonIndexableKeys(result);
-                    new MobileNetworkPreferenceController(context)
-                            .updateNonIndexableKeys(result);
-
-                    // Remove Airplane Mode settings if it's a stationary device such as a TV.
-                    new AirplaneModePreferenceController(context, null /* fragment */)
-                            .updateNonIndexableKeys(result);
-
-                    new ProxyPreferenceController(context).updateNonIndexableKeys(result);
-
-                    new TetherPreferenceController(context).updateNonIndexableKeys(result);
-                    new WifiCallingPreferenceController(context).updateNonIndexableKeys(result);
-
-                    return result;
-                }
-            };
 }
diff --git a/src/com/android/settings/core/instrumentation/EventLogWriter.java b/src/com/android/settings/core/instrumentation/EventLogWriter.java
index de37cba..9304512 100644
--- a/src/com/android/settings/core/instrumentation/EventLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/EventLogWriter.java
@@ -17,8 +17,10 @@
 package com.android.settings.core.instrumentation;
 
 import android.content.Context;
+import android.metrics.LogMaker;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto;
 
 /**
  * {@link LogWriter} that writes data to eventlog.
@@ -37,6 +39,15 @@
         MetricsLogger.action(context, category, "");
     }
 
+    public void actionWithSource(Context context, int source, int category) {
+        final LogMaker logMaker = new LogMaker(category)
+                .setType(MetricsProto.MetricsEvent.TYPE_ACTION);
+        if (source != MetricsProto.MetricsEvent.VIEW_UNKNOWN) {
+            logMaker.addTaggedData(MetricsProto.MetricsEvent.FIELD_CONTEXT, source);
+        }
+        MetricsLogger.action(logMaker);
+    }
+
     public void action(Context context, int category, int value) {
         MetricsLogger.action(context, category, Integer.toString(value));
     }
diff --git a/src/com/android/settings/core/instrumentation/LogWriter.java b/src/com/android/settings/core/instrumentation/LogWriter.java
index 45f1d57..4a2fc6c 100644
--- a/src/com/android/settings/core/instrumentation/LogWriter.java
+++ b/src/com/android/settings/core/instrumentation/LogWriter.java
@@ -40,6 +40,11 @@
     /**
      * Logs an user action.
      */
+    void actionWithSource(Context context, int source, int category);
+
+    /**
+     * Logs an user action.
+     */
     void action(Context context, int category, int value);
 
     /**
diff --git a/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java b/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java
index 1a9a451..13a4d7e 100644
--- a/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java
+++ b/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java
@@ -15,8 +15,79 @@
  */
 package com.android.settings.core.instrumentation;
 
+import android.content.Context;
+import android.metrics.LogMaker;
+
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * FeatureProvider for metrics.
  */
-public interface MetricsFeatureProvider extends LogWriter {
+public class MetricsFeatureProvider {
+    private List<LogWriter> mLoggerWriters;
+
+    public MetricsFeatureProvider() {
+        mLoggerWriters = new ArrayList<>();
+        installLogWriters();
+    }
+
+    protected void installLogWriters() {
+        mLoggerWriters.add(new EventLogWriter());
+        mLoggerWriters.add(new SettingSuggestionsLogWriter());
+    }
+
+    public void visible(Context context, int category) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.visible(context, category);
+        }
+    }
+
+    public void hidden(Context context, int category) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.hidden(context, category);
+        }
+    }
+
+    public void actionWithSource(Context context, int source, int category) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.actionWithSource(context, source, category);
+        }
+    }
+
+    public void action(Context context, int category) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.action(context, category);
+        }
+    }
+
+    public void action(Context context, int category, int value) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.action(context, category, value);
+        }
+    }
+
+    public void action(Context context, int category, boolean value) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.action(context, category, value);
+        }
+    }
+
+    public void action(Context context, int category, String pkg) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.action(context, category, pkg);
+        }
+    }
+
+    public void count(Context context, String name, int value) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.count(context, name, value);
+        }
+    }
+
+    public void histogram(Context context, String name, int bucket) {
+        for (LogWriter writer : mLoggerWriters) {
+            writer.histogram(context, name, bucket);
+        }
+    }
 }
diff --git a/src/com/android/settings/core/instrumentation/MetricsFeatureProviderImpl.java b/src/com/android/settings/core/instrumentation/MetricsFeatureProviderImpl.java
deleted file mode 100644
index 091eb54..0000000
--- a/src/com/android/settings/core/instrumentation/MetricsFeatureProviderImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.core.instrumentation;
-
-import android.content.Context;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Implementation for {@link MetricsFeatureProvider}
- */
-public class MetricsFeatureProviderImpl implements MetricsFeatureProvider {
-
-    private List<LogWriter> mLoggerWriters;
-
-    public MetricsFeatureProviderImpl() {
-        mLoggerWriters = new ArrayList<>();
-        installLogWriters();
-    }
-
-    protected void installLogWriters() {
-        mLoggerWriters.add(new EventLogWriter());
-        mLoggerWriters.add(new SettingSuggestionsLogWriter());
-    }
-
-    @Override
-    public void visible(Context context, int category) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.visible(context, category);
-        }
-    }
-
-    @Override
-    public void hidden(Context context, int category) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.hidden(context, category);
-        }
-    }
-
-    @Override
-    public void action(Context context, int category) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.action(context, category);
-        }
-    }
-
-    @Override
-    public void action(Context context, int category, int value) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.action(context, category, value);
-        }
-    }
-
-    @Override
-    public void action(Context context, int category, boolean value) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.action(context, category, value);
-        }
-    }
-
-    @Override
-    public void action(Context context, int category, String pkg) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.action(context, category, pkg);
-        }
-    }
-
-    @Override
-    public void count(Context context, String name, int value) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.count(context, name, value);
-        }
-    }
-
-    @Override
-    public void histogram(Context context, String name, int bucket) {
-        for (LogWriter writer : mLoggerWriters) {
-            writer.histogram(context, name, bucket);
-        }
-    }
-}
diff --git a/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java b/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java
index 4c277fb..3b94fe7 100644
--- a/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java
@@ -17,6 +17,8 @@
 package com.android.settings.core.instrumentation;
 
 import android.content.Context;
+import android.metrics.LogMaker;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.logging.MetricsLogger;
 import com.android.settings.suggestions.EventStore;
@@ -41,6 +43,10 @@
     }
 
     @Override
+    public void actionWithSource(Context context, int source, int category) {
+    }
+
+    @Override
     public void action(Context context, int category, int value) {
     }
 
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index b6285ad..514eaf2 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -63,6 +63,7 @@
     private final MetricsFeatureProvider mMetricsFeatureProvider;
     private final DashboardFeatureProvider mDashboardFeatureProvider;
     private SuggestionParser mSuggestionParser;
+    private boolean mFirstFrameDrawn;
 
     @VisibleForTesting
     DashboardData mDashboardData;
@@ -162,6 +163,15 @@
         notifyDashboardDataChanged(prevData);
     }
 
+    public void setCategory(List<DashboardCategory> category) {
+        final DashboardData prevData = mDashboardData;
+        Log.d(TAG, "adapter setCategory called");
+        mDashboardData = new DashboardData.Builder(prevData)
+                .setCategories(category)
+                .build();
+        notifyDashboardDataChanged(prevData);
+    }
+
     public void setConditions(List<Condition> conditions) {
         final DashboardData prevData = mDashboardData;
         Log.d(TAG, "adapter setConditions called");
@@ -304,11 +314,12 @@
     }
 
     private void notifyDashboardDataChanged(DashboardData prevData) {
-        if (prevData != null) {
+        if (mFirstFrameDrawn && prevData != null) {
             final DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new DashboardData
                     .ItemsDataDiffCallback(prevData.getItemList(), mDashboardData.getItemList()));
             diffResult.dispatchUpdatesTo(this);
         } else {
+            mFirstFrameDrawn = true;
             notifyDataSetChanged();
         }
     }
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 223d050..395a8bd 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -181,7 +181,7 @@
     @Override
     public ProgressiveDisclosureMixin getProgressiveDisclosureMixin(Context context,
             DashboardFragment fragment) {
-        return new ProgressiveDisclosureMixin(context, this, fragment);
+        return new ProgressiveDisclosureMixin(context, this, mMetricsFeatureProvider, fragment);
     }
 
     @Override
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 74c8bfa..a5a4f43 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -27,6 +27,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
@@ -231,26 +232,25 @@
             Log.d(TAG, "onViewCreated took "
                     + (System.currentTimeMillis() - startTime) + " ms");
         }
-        rebuildUI();
+        rebuildUI(true /* rebuildSuggestions */);
     }
 
-    private void rebuildUI() {
-        if (!isAdded()) {
-            Log.w(TAG, "Cannot build the DashboardSummary UI yet as the Fragment is not added");
-            return;
-        }
-
-        // recheck to see if any suggestions have been changed.
-        new SuggestionLoader().execute();
-        // Set categories on their own if loading suggestions takes too long.
-        mHandler.postDelayed(() -> {
+    private void rebuildUI(boolean rebuildSuggestions) {
+        if (rebuildSuggestions) {
+            // recheck to see if any suggestions have been changed.
+            new SuggestionLoader().execute();
+            // Set categories on their own if loading suggestions takes too long.
+            mHandler.postDelayed(() -> {
+                updateCategoryAndSuggestion(null /* tiles */);
+            }, MAX_WAIT_MILLIS);
+        } else {
             updateCategoryAndSuggestion(null /* tiles */);
-        }, MAX_WAIT_MILLIS);
+        }
     }
 
     @Override
     public void onCategoriesChanged() {
-        rebuildUI();
+        rebuildUI(false /* rebuildSuggestions */);
     }
 
     @Override
@@ -264,7 +264,6 @@
     }
 
     private class SuggestionLoader extends AsyncTask<Void, Void, List<Tile>> {
-
         @Override
         protected List<Tile> doInBackground(Void... params) {
             final Context context = getContext();
@@ -307,7 +306,7 @@
     }
 
     @VisibleForTesting
-    void updateCategoryAndSuggestion(List<Tile> tiles) {
+    void updateCategoryAndSuggestion(List<Tile> suggestions) {
         final Activity activity = getActivity();
         if (activity == null) {
             return;
@@ -319,10 +318,14 @@
             List<DashboardCategory> categories = new ArrayList<>();
             categories.add(mDashboardFeatureProvider.getTilesForCategory(
                     CategoryKey.CATEGORY_HOMEPAGE));
-            mAdapter.setCategoriesAndSuggestions(categories, tiles);
+            if (suggestions != null) {
+                mAdapter.setCategoriesAndSuggestions(categories, suggestions);
+            } else {
+                mAdapter.setCategory(categories);
+            }
         } else {
             mAdapter.setCategoriesAndSuggestions(
-                    ((SettingsActivity) activity).getDashboardCategories(), tiles);
+                    ((SettingsActivity) activity).getDashboardCategories(), suggestions);
         }
     }
 }
diff --git a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
index 2907028..77bd253 100644
--- a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
+++ b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
@@ -25,7 +25,10 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.Instrumentable;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.core.lifecycle.LifecycleObserver;
 import com.android.settings.core.lifecycle.events.OnCreate;
 import com.android.settings.core.lifecycle.events.OnSaveInstanceState;
@@ -45,19 +48,23 @@
     private final DashboardFeatureProvider mDashboardFeatureProvider;
     // Collapsed preference sorted by order.
     private final List<Preference> mCollapsedPrefs = new ArrayList<>();
-    private /* final */ ExpandPreference mExpandButton;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
     private final PreferenceFragment mFragment;
+    private /* final */ ExpandPreference mExpandButton;
 
     private int mTileLimit = DEFAULT_TILE_LIMIT;
     private boolean mUserExpanded;
 
     public ProgressiveDisclosureMixin(Context context,
-            DashboardFeatureProvider dashboardFeatureProvider, PreferenceFragment fragment) {
+            DashboardFeatureProvider dashboardFeatureProvider,
+            MetricsFeatureProvider metricsFeatureProvider,
+            PreferenceFragment fragment) {
         mContext = context;
         mFragment = fragment;
         mExpandButton = new ExpandPreference(context);
         mExpandButton.setOnPreferenceClickListener(this);
         mDashboardFeatureProvider = dashboardFeatureProvider;
+        mMetricsFeatureProvider = metricsFeatureProvider;
     }
 
     @Override
@@ -83,6 +90,14 @@
                 }
                 mCollapsedPrefs.clear();
                 mUserExpanded = true;
+                final int metricsCategory;
+                if (mFragment instanceof Instrumentable) {
+                    metricsCategory = ((Instrumentable) mFragment).getMetricsCategory();
+                } else {
+                    metricsCategory = MetricsProto.MetricsEvent.VIEW_UNKNOWN;
+                }
+                mMetricsFeatureProvider.actionWithSource(mContext, metricsCategory,
+                        MetricsProto.MetricsEvent.ACTION_SETTINGS_ADVANCED_BUTTON_EXPAND);
             }
         }
         return false;
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index b3f304a..dace4da 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -829,19 +829,4 @@
             }
         }
     }
-
-    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(
-                        Context context, boolean enabled) {
-                    if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context)
-                            .isEnabled()) {
-                        return null;
-                    }
-                    final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.power_usage_details;
-                    return Arrays.asList(sir);
-                }
-            };
 }
diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
index 213259b..d38902e 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
@@ -64,14 +64,4 @@
                 Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0);
         return cameraDisabled == 0;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(0, true);
-        valueMap.put(1, false);
-
-        return new InlineSwitchPayload(Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index 02d8dd7..49e8f51 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -70,14 +70,4 @@
     protected boolean isSwitchPrefEnabled() {
         return mAmbientConfig.pulseOnDoubleTapEnabled(mUserId);
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.DOZE_PULSE_ON_DOUBLE_TAP,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
index fea1c9d..c5174fd 100644
--- a/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTwistPreferenceController.java
@@ -85,14 +85,4 @@
         }
         return false;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index db6925e..df8e37c 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -143,51 +143,4 @@
             mPreferences.add((GesturePreference) preference);
         }
     }
-
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
-                        boolean enabled) {
-                    ArrayList<SearchIndexableResource> result =
-                            new ArrayList<SearchIndexableResource>();
-
-                    SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.gesture_settings;
-                    result.add(sir);
-
-                    return result;
-                }
-
-                @Override
-                public List<String> getNonIndexableKeys(Context context) {
-                    ArrayList<String> result = new ArrayList<String>();
-
-                    List<PreferenceController> preferenceControllers =
-                            getPreferenceControllers(context);
-                    for (PreferenceController controller : preferenceControllers) {
-                        controller.updateNonIndexableKeys(result);
-                    }
-                    return result;
-                }
-
-                @Override
-                public List<PreferenceController> getPreferenceControllers(Context context) {
-                    List<PreferenceController> controllers = new ArrayList<>();
-                    AmbientDisplayConfiguration ambientConfig
-                            = new AmbientDisplayConfiguration(context);
-
-                    controllers.add(new DoubleTapPowerPreferenceController(context,
-                            null /* lifecycle */));
-                    controllers.add(new PickupGesturePreferenceController(context,
-                            null /* lifecycle */, ambientConfig, UserHandle.myUserId()));
-                    controllers.add(new DoubleTapScreenPreferenceController(context,
-                            null /* lifecycle */, ambientConfig, UserHandle.myUserId()));
-                    controllers.add(new SwipeToNotificationPreferenceController(context,
-                            null /* lifecycle */));
-                    controllers.add(new DoubleTwistPreferenceController(context,
-                            null /* lifecycle */));
-                    return controllers;
-                }
-            };
 }
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index f48551e..ce20f15 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -70,14 +70,4 @@
                 Settings.Secure.DOZE_PULSE_ON_PICK_UP, enabled ? 1 : 0);
         return true;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.DOZE_PULSE_ON_PICK_UP,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
index 67c8e14..22b88fc 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java
@@ -63,14 +63,4 @@
                 Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED, 0)
                 == 1;
     }
-
-    @Override
-    public ResultPayload getResultPayload() {
-        ArrayMap<Integer, Boolean> valueMap = new ArrayMap<>();
-        valueMap.put(1, true);
-        valueMap.put(0, false);
-
-        return new InlineSwitchPayload(Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED,
-                ResultPayload.SettingsSource.SECURE, valueMap);
-    }
 }
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index c1a2159..c7b0384 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -57,7 +57,7 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
-        mProgressiveDisclosureMixin.setTileLimit(5);
+        mProgressiveDisclosureMixin.setTileLimit(6);
     }
 
     @Override
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 4c81e30..1b504f4 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -28,7 +28,6 @@
 import com.android.settings.applications.IPackageManagerWrapperImpl;
 import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
-import com.android.settings.core.instrumentation.MetricsFeatureProviderImpl;
 import com.android.settings.dashboard.DashboardFeatureProvider;
 import com.android.settings.dashboard.DashboardFeatureProviderImpl;
 import com.android.settings.dashboard.SuggestionFeatureProvider;
@@ -70,7 +69,7 @@
     @Override
     public MetricsFeatureProvider getMetricsFeatureProvider() {
         if (mMetricsFeatureProvider == null) {
-            mMetricsFeatureProvider = new MetricsFeatureProviderImpl();
+            mMetricsFeatureProvider = new MetricsFeatureProvider();
         }
         return mMetricsFeatureProvider;
     }
diff --git a/src/com/android/settings/wifi/LinkablePreference.java b/src/com/android/settings/wifi/LinkablePreference.java
index 6b1b87d..5bf51ed 100644
--- a/src/com/android/settings/wifi/LinkablePreference.java
+++ b/src/com/android/settings/wifi/LinkablePreference.java
@@ -55,11 +55,15 @@
         super.onBindViewHolder(view);
 
         TextView textView = (TextView) view.findViewById(android.R.id.title);
-        if (textView == null || mContentTitle == null || mClickListener == null) {
+        if (textView == null) {
+            return;
+        }
+        textView.setSingleLine(false);
+
+        if (mContentTitle == null || mClickListener == null) {
             return;
         }
 
-        textView.setSingleLine(false);
         StringBuilder contentBuilder = new StringBuilder().append(mContentTitle);
         if (mContentDescription != null) {
             contentBuilder.append("\n\n");
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 118d6eb..c4b90c7 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -179,7 +179,9 @@
         super.onViewCreated(view, savedInstanceState);
         final Activity activity = getActivity();
         if (activity != null) {
-            mProgressHeader = (ProgressBar) setPinnedHeaderView(R.layout.wifi_progress_header);
+            if (!isUiRestricted()) {
+                mProgressHeader = (ProgressBar) setPinnedHeaderView(R.layout.wifi_progress_header);
+            }
         }
     }
 
@@ -201,6 +203,10 @@
         mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
         mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
 
+        if (isUiRestricted()) {
+            getPreferenceScreen().removePreference(mAdditionalSettingsPreferenceCategory);
+        }
+
         Context prefContext = getPrefContext();
         mAddPreference = new Preference(prefContext);
         mAddPreference.setIcon(R.drawable.ic_menu_add_inset);
@@ -818,11 +824,11 @@
 
     private void setOffMessage() {
         if (isUiRestricted()) {
+            removeConnectedAccessPointPreference();
+            mAccessPointsPreferenceCategory.removeAll();
             if (!isUiRestrictedByOnlyAdmin()) {
                 addMessagePreference(R.string.wifi_empty_list_user_restricted);
             }
-            removeConnectedAccessPointPreference();
-            mAccessPointsPreferenceCategory.removeAll();
             return;
         }
 
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 05cd93b..5e134bf 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -2,4 +2,6 @@
 com.android.settings.language.LanguageAndRegionSettings
 com.android.settings.notification.ZenModePrioritySettings
 com.android.settings.inputmethod.InputAndGestureSettings
-com.android.settings.accounts.AccountDetailDashboardFragment
\ No newline at end of file
+com.android.settings.accounts.AccountDetailDashboardFragment
+com.android.settings.gestures.GestureSettings
+com.android.settings.fuelgauge.PowerUsageDetail
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java
index 9627e2c..62866c9 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java
@@ -17,8 +17,8 @@
 package com.android.settings.dashboard;
 
 import android.app.Activity;
-
 import android.support.v7.widget.LinearLayoutManager;
+
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.dashboard.conditional.ConditionManager;
@@ -33,6 +33,7 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.util.ReflectionHelpers;
 
+import static org.mockito.Matchers.anyList;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -90,4 +91,13 @@
         mSummary.onConditionsChanged();
         verify(mDashboard, never()).scrollToPosition(0);
     }
+
+    @Test
+    public void onCategoryChanged_updateCategoryOnly() {
+        doReturn(mock(Activity.class)).when(mSummary).getActivity();
+        when(mDashboardFeatureProvider.isEnabled()).thenReturn(true);
+
+        mSummary.onCategoriesChanged();
+        verify(mAdapter).setCategory(anyList());
+    }
 }
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java
index bb00cb8..573b2b5 100644
--- a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java
@@ -74,7 +74,9 @@
         mAppContext = ShadowApplication.getInstance().getApplicationContext();
         mFakeFeatureFactory = (FakeFeatureFactory) FeatureFactory.getFactory(mContext);
         mMixin = new ProgressiveDisclosureMixin(mAppContext,
-                mFakeFeatureFactory.dashboardFeatureProvider, mPreferenceFragment);
+                mFakeFeatureFactory.dashboardFeatureProvider,
+                mFakeFeatureFactory.metricsFeatureProvider,
+                mPreferenceFragment);
         ReflectionHelpers.setField(mMixin, "mExpandButton", mExpandButton);
         mPreference = new Preference(mAppContext);
         mPreference.setKey("test");
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
index 5f7d8b5..bdb3522 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
@@ -93,23 +93,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        final Context context = ShadowApplication.getInstance().getApplicationContext();
-        mController = new DoubleTapPowerPreferenceController(context, null);
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        final Context context = ShadowApplication.getInstance().getApplicationContext();
-        mController = new DoubleTapPowerPreferenceController(context, null);
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("camera_double_tap_power_gesture_disabled");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(0)).isEqualTo(true);
-        assertThat(payload.valueMap.get(1)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
index 2f922d5..adf8b75 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
@@ -81,19 +81,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("doze_pulse_on_double_tap");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
index ad682b2..9bf6655 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java
@@ -113,19 +113,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("camera_double_twist_to_flip_enabled");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
index f112b9e..9dce074 100644
--- a/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PIckupGesturePreferenceControllerTest.java
@@ -83,19 +83,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("doze_pulse_on_pick_up");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
index 49d73ea..e909667 100644
--- a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java
@@ -89,19 +89,4 @@
 
         assertThat(mController.isSwitchPrefEnabled()).isFalse();
     }
-
-    @Test
-    public void testPreferenceController_ProperResultPayloadType() {
-        ResultPayload payload = mController.getResultPayload();
-        assertThat(payload).isInstanceOf(InlineSwitchPayload.class);
-    }
-
-    @Test
-    public void testPreferenceController_CorrectPayload() {
-        InlineSwitchPayload payload = (InlineSwitchPayload) mController.getResultPayload();
-        assertThat(payload.settingsUri).isEqualTo("system_navigation_keys_enabled");
-        assertThat(payload.settingSource).isEqualTo(ResultPayload.SettingsSource.SECURE);
-        assertThat(payload.valueMap.get(1)).isEqualTo(true);
-        assertThat(payload.valueMap.get(0)).isEqualTo(false);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
index a13a24e..f4370fc 100644
--- a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
@@ -73,14 +73,6 @@
     }
 
     @Test
-    public void testGetPreferenceControllerUriMap_CompatibleClass_ReturnsNotNull() {
-        String className = "com.android.settings.gestures.GestureSettings";
-
-        Map map = DatabaseIndexingUtils.getPreferenceControllerUriMap(className, mContext);
-        assertThat(map).isNotNull();
-    }
-
-    @Test
     public void testGetPreferenceControllerUriMap_CompatibleClass_ReturnsValidMap() {
         String className = "com.android.settings.DisplaySettings";
 
@@ -96,7 +88,7 @@
     }
 
     @Test
-    public void testGetPayloadFromMap_MatchingKey_ReturnsPayloa() {
+    public void testGetPayloadFromMap_MatchingKey_ReturnsPayload() {
         final String key = "key";
         PreferenceController prefController = new PreferenceController(mContext) {
             @Override