Merge "Remove android:visibility attributes from Preferences" into oc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d96e505..ed00054 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -777,7 +777,7 @@
                 <category android:name="com.android.settings.suggested.category.SETTINGS_ONLY" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.notification.ZenModeAutomationSettings" />
+                android:value="com.android.settings.notification.ZenModeSettings" />
             <meta-data android:name="com.android.settings.dismiss"
                 android:value="30" />
             <meta-data android:name="com.android.settings.title"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 21a23ae..6578374 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4470,8 +4470,10 @@
     <!-- Title for the cellular network in power use UI(i.e. Mobile network scanning: 30% of battery usage) [CHAR_LIMIT=40] -->
     <string name="device_cellular_network">Mobile network scanning</string>
 
-    <!-- Label for list of apps using battery in power use UI [CHAR_LIMIT=60] -->
-    <string name="power_usage_list_summary">App usage since full charge</string>
+    <!-- Label for time since last full charge in power use UI, i.e. "7 h 20 min ago" [CHAR_LIMIT=60] -->
+    <string name="power_last_full_charge_summary"><xliff:g id="time">%1$s</xliff:g> ago</string>
+    <!-- Label for list of apps using battery in power use UI [CHAR_LIMIT=120] -->
+    <string name="power_usage_list_summary">App usage since full charge (<xliff:g id="time">%1$s</xliff:g> ago)</string>
     <!-- Description for the screen usage item [CHAR_LIMIT=120] -->
     <string name="screen_usage_summary">Amount of time screen has been on since full charge</string>
     <!-- Label for list of different types using battery in power use UI [CHAR_LIMIT=60] -->
diff --git a/res/xml/wifi_network_details_fragment.xml b/res/xml/wifi_network_details_fragment.xml
index dbbf0c3..09bcf86 100644
--- a/res/xml/wifi_network_details_fragment.xml
+++ b/res/xml/wifi_network_details_fragment.xml
@@ -34,40 +34,52 @@
 
         <com.android.settings.wifi.WifiDetailPreference
                 android:key="signal_strength"
-                android:title="@string/wifi_signal" />
+                android:title="@string/wifi_signal"
+                android:selectable="false"/>
 
         <com.android.settings.wifi.WifiDetailPreference
                 android:key="frequency"
                 android:icon="@drawable/ic_frequency_antenna"
-                android:title="@string/wifi_frequency" />
+                android:title="@string/wifi_frequency"
+                android:selectable="false"/>
 
         <com.android.settings.wifi.WifiDetailPreference
                 android:key="security"
                 android:icon="@drawable/ic_security_lock_24dp"
-                android:title="@string/wifi_security" />
+                android:title="@string/wifi_security"
+                android:selectable="false"/>
     </PreferenceCategory>
 
-    <!-- IP Details -->
+    <!-- Network Details -->
     <PreferenceCategory
             android:key="ip_details_category"
-            android:title="@string/wifi_ip_address">
+            android:title="@string/wifi_setup_detail">
         <com.android.settings.wifi.WifiDetailPreference
                 android:key="ip_address"
-                android:title="@string/wifi_ip_address" />
+                android:title="@string/wifi_ip_address"
+                android:selectable="false"/>
         <com.android.settings.wifi.WifiDetailPreference
                 android:key="router"
-                android:title="@string/wifi_gateway" />
+                android:title="@string/wifi_gateway"
+                android:selectable="false"/>
         <com.android.settings.wifi.WifiDetailPreference
                 android:key="subnet_mask"
-                android:title="@string/wifi_details_subnet_mask" />
+                android:title="@string/wifi_details_subnet_mask"
+                android:selectable="false"/>
         <com.android.settings.wifi.WifiDetailPreference
                 android:key="dns"
-                android:title="@string/wifi_details_dns" />
+                android:title="@string/wifi_details_dns"
+                android:selectable="false"/>
+        <com.android.settings.wifi.WifiDetailPreference
+                android:key="link_speed"
+                android:title="@string/wifi_speed"
+                android:selectable="false"/>
     </PreferenceCategory>
 
     <!-- IPv6 Details -->
     <PreferenceCategory
             android:key="ipv6_details_category"
-            android:title="@string/wifi_details_ipv6_address_header" />
+            android:title="@string/wifi_details_ipv6_address_header"
+            android:selectable="false"/>
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 37022f0..b7d2a73 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -362,7 +362,8 @@
         // smarter in the future.
         final Activity activity = getActivity();
         FeatureFactory.getFactory(activity).getSearchFeatureProvider().getIndexingManager(activity)
-                .updateFromClassNameResource(SecuritySettings.class.getName(), true, true);
+                .updateFromClassNameResource(SecuritySettings.class.getName(),
+                        true /* includeInSearchResults */);
 
         PreferenceGroup securityStatusPreferenceGroup =
                 (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS);
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 11190d5..09380e5 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -30,7 +30,6 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
@@ -86,7 +85,6 @@
     // Constants for state save/restore
     private static final String SAVE_KEY_CATEGORIES = ":settings:categories";
     private static final String SAVE_KEY_SHOW_HOME_AS_UP = ":settings:show_home_as_up";
-    private static final String SAVE_KEY_SHOW_SEARCH = ":settings:show_search";
 
     /**
      * When starting this activity, the invoking Intent can contain this extra
@@ -188,19 +186,6 @@
         }
     };
 
-    private final BroadcastReceiver mUserAddRemoveReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (mSearchFeatureProvider != null && !mSearchFeatureProvider.isEnabled(context)) {
-                String action = intent.getAction();
-                if (action.equals(Intent.ACTION_USER_ADDED)
-                        || action.equals(Intent.ACTION_USER_REMOVED)) {
-                    mSearchFeatureProvider.updateIndex(getApplicationContext());
-                }
-            }
-        }
-    };
-
     private DynamicIndexableContentMonitor mDynamicIndexableContentMonitor;
 
     private ActionBar mActionBar;
@@ -242,14 +227,6 @@
     }
 
     @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        if (!mSearchFeatureProvider.isEnabled(this)) {
-            mSearchFeatureProvider.updateIndex(getApplicationContext());
-        }
-    }
-
-    @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         if (!mDisplaySearch) {
             return false;
@@ -346,15 +323,6 @@
 
         getFragmentManager().addOnBackStackChangedListener(this);
 
-        if (mIsShowingDashboard && !mSearchFeatureProvider.isEnabled(this)) {
-            // Run the Index update only if we have some space
-            if (!Utils.isLowStorage(this)) {
-                mSearchFeatureProvider.updateIndex(getApplicationContext());
-            } else {
-                Log.w(LOG_TAG, "Cannot update the Indexer as we are running low on storage space!");
-            }
-        }
-
         if (savedState != null) {
             // We are restarting from a previous saved state; used that to initialize, instead
             // of starting fresh.
@@ -568,10 +536,6 @@
                 mDevelopmentPreferencesListener);
 
         registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
-        if (!mSearchFeatureProvider.isEnabled(this)) {
-            registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_ADDED));
-            registerReceiver(mUserAddRemoveReceiver, new IntentFilter(Intent.ACTION_USER_REMOVED));
-        }
         if (mDynamicIndexableContentMonitor == null) {
             mDynamicIndexableContentMonitor = new DynamicIndexableContentMonitor();
         }
@@ -587,9 +551,6 @@
                 mDevelopmentPreferencesListener);
         mDevelopmentPreferencesListener = null;
         unregisterReceiver(mBatteryInfoReceiver);
-        if (!mSearchFeatureProvider.isEnabled(this)) {
-            unregisterReceiver(mUserAddRemoveReceiver);
-        }
         if (mDynamicIndexableContentMonitor != null) {
             mDynamicIndexableContentMonitor.unregister(this, LOADER_ID_INDEXABLE_CONTENT_MONITOR);
         }
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index 85e09d1..6d22620 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -318,7 +318,7 @@
         }
         mProfiles.put(userInfo.id, profileData);
         new SearchFeatureProviderImpl().getIndexingManager(mContext).updateFromClassNameResource(
-                UserAndAccountDashboardFragment.class.getName(), true, true);
+                UserAndAccountDashboardFragment.class.getName(), true /* includeInSearchResults */);
     }
 
     private DimmableIconPreference newAddAccountPreference(Context context) {
diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
index f174e10..bee1351 100644
--- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@@ -221,6 +221,7 @@
         mDevHitToast.show();
         // This is good time to index the Developer Options
         FeatureFactory.getFactory(mContext).getSearchFeatureProvider().getIndexingManager(mContext)
-                .updateFromClassNameResource(DevelopmentSettings.class.getName(), true, true);
+                .updateFromClassNameResource(DevelopmentSettings.class.getName(),
+                        true /* includeInSearchResults */);
     }
 }
diff --git a/src/com/android/settings/search/DynamicIndexableContentMonitor.java b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
index b367202..bb9f5ad 100644
--- a/src/com/android/settings/search/DynamicIndexableContentMonitor.java
+++ b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
@@ -176,7 +176,7 @@
     public void onLoadFinished(Loader<List<PrintServiceInfo>> loader,
             List<PrintServiceInfo> services) {
         mIndexManager.updateFromClassNameResource(PrintSettingsFragment.class.getName(),
-                false /* rebuild */, true /* includeInSearchResult */);
+                true /* includeInSearchResults */);
     }
 
     @Override
@@ -213,30 +213,30 @@
             if (mIndexManager != null) return;
             mIndexManager = indexManager;
             mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE);
-            buildIndex(true /* rebuild */);
+            buildIndex();
 
             // Watch for input device changes.
             mInputManager.registerInputDeviceListener(this /* listener */, null /* handler */);
         }
 
-        private void buildIndex(boolean rebuild) {
+        private void buildIndex() {
             mIndexManager.updateFromClassNameResource(PhysicalKeyboardFragment.class.getName(),
-                    rebuild, true /* includeInSearchResult */);
+                    true /* includeInSearchResults */);
         }
 
         @Override
         public void onInputDeviceAdded(int deviceId) {
-            buildIndex(false /* rebuild */);
+            buildIndex();
         }
 
         @Override
         public void onInputDeviceRemoved(int deviceId) {
-            buildIndex(true /* rebuild */);
+            buildIndex();
         }
 
         @Override
         public void onInputDeviceChanged(int deviceId) {
-            buildIndex(true /* rebuild */);
+            buildIndex();
         }
     }
 
@@ -344,7 +344,7 @@
             mIndexManager = index;
             mPackageManager = context.getPackageManager();
             mAccessibilityServices.clear();
-            buildIndex(true /* rebuild */);
+            buildIndex();
 
             // Cache accessibility service packages to know when they go away.
             AccessibilityManager accessibilityManager = (AccessibilityManager) context
@@ -358,9 +358,9 @@
             }
         }
 
-        private void buildIndex(boolean rebuild) {
+        private void buildIndex() {
             mIndexManager.updateFromClassNameResource(AccessibilitySettings.class.getName(),
-                    rebuild, true /* includeInSearchResult */);
+                    true /* includeInSearchResults */);
         }
 
         synchronized void onPackageAvailable(String packageName) {
@@ -372,13 +372,13 @@
                     .queryIntentServices(intent, 0 /* flags */);
             if (services == null || services.isEmpty()) return;
             mAccessibilityServices.add(packageName);
-            buildIndex(false /* rebuild */);
+            buildIndex();
         }
 
         synchronized void onPackageUnavailable(String packageName) {
             if (mIndexManager == null) return;
             if (!mAccessibilityServices.remove(packageName)) return;
-            buildIndex(true /* rebuild */);
+            buildIndex();
         }
     }
 
@@ -428,10 +428,10 @@
             mContentResolver = context.getContentResolver();
             mInputMethodServices.clear();
             // Build index of {@link UserDictionary}.
-            buildIndex(LanguageAndInputSettings.class, true /* rebuild */);
+            buildIndex(LanguageAndInputSettings.class);
             // Build index of IMEs.
-            buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
-            buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
+            buildIndex(VirtualKeyboardFragment.class);
+            buildIndex(AvailableVirtualKeyboardFragment.class);
 
             // Cache IME service packages to know when they go away.
             final InputMethodManager inputMethodManager = (InputMethodManager) context
@@ -452,9 +452,9 @@
                     false /* notifyForDescendants */, this /* observer */);
         }
 
-        private void buildIndex(Class<?> indexClass, boolean rebuild) {
-            mIndexManager.updateFromClassNameResource(indexClass.getName(), rebuild,
-                    true /* includeInSearchResult */);
+        private void buildIndex(Class<?> indexClass) {
+            mIndexManager.updateFromClassNameResource(indexClass.getName(),
+                    true /* includeInSearchResults */);
         }
 
         synchronized void onPackageAvailable(String packageName) {
@@ -466,24 +466,24 @@
                     .queryIntentServices(intent, 0 /* flags */);
             if (services == null || services.isEmpty()) return;
             mInputMethodServices.add(packageName);
-            buildIndex(VirtualKeyboardFragment.class, false /* rebuild */);
-            buildIndex(AvailableVirtualKeyboardFragment.class, false /* rebuild */);
+            buildIndex(VirtualKeyboardFragment.class);
+            buildIndex(AvailableVirtualKeyboardFragment.class);
         }
 
         synchronized void onPackageUnavailable(String packageName) {
             if (mIndexManager == null) return;
             if (!mInputMethodServices.remove(packageName)) return;
-            buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
-            buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
+            buildIndex(VirtualKeyboardFragment.class);
+            buildIndex(AvailableVirtualKeyboardFragment.class);
         }
 
         @Override
         public void onChange(boolean selfChange, Uri uri) {
             if (ENABLED_INPUT_METHODS_CONTENT_URI.equals(uri)) {
-                buildIndex(VirtualKeyboardFragment.class, true /* rebuild */);
-                buildIndex(AvailableVirtualKeyboardFragment.class, true /* rebuild */);
+                buildIndex(VirtualKeyboardFragment.class);
+                buildIndex(AvailableVirtualKeyboardFragment.class);
             } else if (UserDictionary.Words.CONTENT_URI.equals(uri)) {
-                buildIndex(LanguageAndInputSettings.class, true /* rebuild */);
+                buildIndex(LanguageAndInputSettings.class);
             }
         }
     }
diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java
index 0d61a66..1e664ff 100644
--- a/src/com/android/settings/search2/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search2/DatabaseIndexingManager.java
@@ -187,6 +187,8 @@
 
         final String localeStr = Locale.getDefault().toString();
         updateDatabase(isLocaleIndexed, localeStr);
+
+        IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr);
     }
 
     @VisibleForTesting
@@ -242,8 +244,6 @@
         } finally {
             database.endTransaction();
         }
-        // TODO Refactor: move the locale out of the helper class
-        IndexDatabaseHelper.setLocaleIndexed(mContext, localeStr);
 
         mIsAvailable.set(true);
     }
@@ -432,12 +432,10 @@
      * Update the Index for a specific class name resources
      *
      * @param className              the class name (typically a fragment name).
-     * @param rebuild                true means that you want to delete the data from the Index first.
      * @param includeInSearchResults true means that you want the bit "enabled" set so that the
      *                               data will be seen included into the search results
      */
-    public void updateFromClassNameResource(String className, final boolean rebuild,
-            boolean includeInSearchResults) {
+    public void updateFromClassNameResource(String className, boolean includeInSearchResults) {
         if (className == null) {
             throw new IllegalArgumentException("class name cannot be null!");
         }
@@ -452,26 +450,12 @@
             @Override
             public void run() {
                 addIndexableData(res);
-                performIndexing();
+                updateDatabase(false, Locale.getDefault().toString());
                 res.enabled = false;
             }
         });
     }
 
-    public void updateFromSearchIndexableData(final SearchIndexableData data) {
-        AsyncTask.execute(new Runnable() {
-            @Override
-            public void run() {
-                addIndexableData(data);
-                performIndexing();
-            }
-        });
-    }
-
-    private SQLiteDatabase getReadableDatabase() {
-        return IndexDatabaseHelper.getInstance(mContext).getReadableDatabase();
-    }
-
     private SQLiteDatabase getWritableDatabase() {
         try {
             return IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index 7559512..9981b2f 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -197,9 +197,7 @@
 
     @Override
     public void onConfirmLockdown(Bundle options, boolean isEnabled, boolean isLockdown) {
-        if (setAlwaysOnVpnByUI(isEnabled, isLockdown)) {
-            updateUI();
-        }
+        setAlwaysOnVpnByUI(isEnabled, isLockdown);
     }
 
     private boolean setAlwaysOnVpnByUI(boolean isEnabled, boolean isLockdown) {
@@ -214,6 +212,8 @@
         final boolean success = setAlwaysOnVpn(isEnabled, isLockdown);
         if (isEnabled && (!success || !isVpnAlwaysOn())) {
             CannotConnectFragment.show(this, mVpnLabel);
+        } else {
+            updateUI();
         }
         return success;
     }
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index ccd1700..20f723c 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -650,7 +650,6 @@
 
             case WifiManager.WIFI_STATE_DISABLING:
                 addMessagePreference(R.string.wifi_stopping);
-                setProgressBarVisible(true);
                 break;
 
             case WifiManager.WIFI_STATE_DISABLED:
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index d0e21e926..85c0929 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -59,6 +59,8 @@
     @VisibleForTesting
     static final String KEY_SIGNAL_STRENGTH_PREF = "signal_strength";
     @VisibleForTesting
+    static final String KEY_LINK_SPEED = "link_speed";
+    @VisibleForTesting
     static final String KEY_FREQUENCY_PREF = "frequency";
     @VisibleForTesting
     static final String KEY_SECURITY_PREF = "security";
@@ -85,6 +87,7 @@
     // Preferences - in order of appearance
     private Preference mConnectionDetailPref;
     private WifiDetailPreference mSignalStrengthPref;
+    private WifiDetailPreference mLinkSpeedPref;
     private WifiDetailPreference mFrequencyPref;
     private WifiDetailPreference mSecurityPref;
     private WifiDetailPreference mIpAddressPref;
@@ -128,6 +131,7 @@
 
         mSignalStrengthPref =
                 (WifiDetailPreference) screen.findPreference(KEY_SIGNAL_STRENGTH_PREF);
+        mLinkSpeedPref = (WifiDetailPreference) screen.findPreference(KEY_LINK_SPEED);
         mFrequencyPref = (WifiDetailPreference) screen.findPreference(KEY_FREQUENCY_PREF);
         mSecurityPref = (WifiDetailPreference) screen.findPreference(KEY_SECURITY_PREF);
 
@@ -178,6 +182,10 @@
         int summarySignalLevel = mAccessPoint.getLevel();
         mSignalStrengthPref.setDetailText(mSignalStr[summarySignalLevel]);
 
+        // Link Speed Pref
+        mLinkSpeedPref.setDetailText(mContext.getString(
+                R.string.link_speed, mWifiInfo.getLinkSpeed()));
+
         // Frequency Pref
         final int frequency = mWifiInfo.getFrequency();
         String band = null;
diff --git a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
index 5068349..79c0d63 100644
--- a/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
+++ b/tests/robotests/src/com/android/settings/search/DynamicIndexableContentMonitorTest.java
@@ -63,6 +63,7 @@
 import com.android.settings.language.LanguageAndInputSettings;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.search2.DatabaseIndexingManager;
+import com.android.settings.testutils.DatabaseTestUtils;
 import com.android.settings.testutils.shadow.ShadowActivityWithLoadManager;
 import com.android.settings.testutils.shadow.ShadowContextImplWithRegisterReceiver;
 import com.android.settings.testutils.shadow.ShadowInputManager;
@@ -162,6 +163,8 @@
 
         DynamicIndexableContentMonitor.resetForTesting();
         mRobolectricPackageManager.reset();
+
+        DatabaseTestUtils.clearDb();
     }
 
     @Test
@@ -173,7 +176,7 @@
                 anyInt(), any(Bundle.class), any(LoaderManager.LoaderCallbacks.class));
         // No indexing happens.
         verify(mIndexManager, never()).updateFromClassNameResource(
-                anyString(), anyBoolean(), anyBoolean());
+                anyString(), anyBoolean());
 
         mMonitor.unregister(mActivity, LOADER_ID);
 
@@ -226,7 +229,7 @@
         mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */);
 
         // Rebuild indexing should happen.
-        verifyRebuildIndexing(PhysicalKeyboardFragment.class);
+        verifyIncrementalIndexing(PhysicalKeyboardFragment.class);
         // Input monitor should be registered to InputManager.
         final InputManager.InputDeviceListener listener = extactInputDeviceListener();
         assertThat(listener).isNotNull();
@@ -258,7 +261,7 @@
 
         listener.onInputDeviceRemoved(2 /* deviceId */);
 
-        verifyRebuildIndexing(PhysicalKeyboardFragment.class);
+        verifyIncrementalIndexing(PhysicalKeyboardFragment.class);
 
         /*
          * A device is changed.
@@ -267,14 +270,14 @@
 
         listener.onInputDeviceChanged(3 /* deviceId */);
 
-        verifyRebuildIndexing(PhysicalKeyboardFragment.class);
+        verifyIncrementalIndexing(PhysicalKeyboardFragment.class);
     }
 
     @Test
     public void testAccessibilityServicesMonitor() throws Exception {
         mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */);
 
-        verifyRebuildIndexing(AccessibilitySettings.class);
+        verifyIncrementalIndexing(AccessibilitySettings.class);
 
         /*
          * When an accessibility service package is installed, incremental indexing happen.
@@ -301,7 +304,7 @@
 
         disableInstalledPackage(A11Y_PACKAGE_1);
 
-        verifyRebuildIndexing(AccessibilitySettings.class);
+        verifyIncrementalIndexing(AccessibilitySettings.class);
 
         /*
          * When an accessibility service is enabled, incremental indexing happens.
@@ -319,7 +322,7 @@
 
         uninstallAccessibilityService(A11Y_PACKAGE_1);
 
-        verifyRebuildIndexing(AccessibilitySettings.class);
+        verifyIncrementalIndexing(AccessibilitySettings.class);
 
         /*
          * When an input method service package is installed, nothing happens.
@@ -335,8 +338,8 @@
     public void testInputMethodServicesMonitor() throws Exception {
         mMonitor.register(mActivity, LOADER_ID, mIndexManager, true /* isUserUnlocked */);
 
-        verifyRebuildIndexing(VirtualKeyboardFragment.class);
-        verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(VirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
 
         final Uri enabledInputMethodsContentUri = Settings.Secure.getUriFor(
                 Settings.Secure.ENABLED_INPUT_METHODS);
@@ -371,8 +374,8 @@
 
         disableInstalledPackage(IME_PACKAGE_1);
 
-        verifyRebuildIndexing(VirtualKeyboardFragment.class);
-        verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(VirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
 
         /*
          * When an input method service is enabled, incremental indexing happens.
@@ -391,8 +394,8 @@
 
         uninstallInputMethodService(IME_PACKAGE_1);
 
-        verifyRebuildIndexing(VirtualKeyboardFragment.class);
-        verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(VirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
 
         /*
          * When an accessibility service package is installed, nothing happens.
@@ -411,8 +414,8 @@
 
         observer.onChange(false /* selfChange */, enabledInputMethodsContentUri);
 
-        verifyRebuildIndexing(VirtualKeyboardFragment.class);
-        verifyRebuildIndexing(AvailableVirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(VirtualKeyboardFragment.class);
+        verifyIncrementalIndexing(AvailableVirtualKeyboardFragment.class);
     }
 
     @Test
@@ -423,7 +426,7 @@
         final ContentObserver observer = extractContentObserver(UserDictionary.Words.CONTENT_URI);
         assertThat(observer).isNotNull();
 
-        verifyRebuildIndexing(LanguageAndInputSettings.class);
+        verifyIncrementalIndexing(LanguageAndInputSettings.class);
 
         /*
          * When user dictionary content is changed, rebuild indexing happens.
@@ -432,7 +435,7 @@
 
         observer.onChange(false /* selfChange */, UserDictionary.Words.CONTENT_URI);
 
-        verifyRebuildIndexing(LanguageAndInputSettings.class);
+        verifyIncrementalIndexing(LanguageAndInputSettings.class);
     }
 
     /*
@@ -441,21 +444,14 @@
 
     private void verifyNoIndexing(Class<?> indexingClass) {
         verify(mIndexManager, never()).updateFromClassNameResource(eq(indexingClass.getName()),
-                anyBoolean(), anyBoolean());
-    }
-
-    private void verifyRebuildIndexing(Class<?> indexingClass) {
-        verify(mIndexManager, times(1)).updateFromClassNameResource(indexingClass.getName(),
-                true /* rebuild */, true /* includeInSearchResults */);
-        verify(mIndexManager, never()).updateFromClassNameResource(indexingClass.getName(),
-                false /* rebuild */, true /* includeInSearchResults */);
+                anyBoolean());
     }
 
     private void verifyIncrementalIndexing(Class<?> indexingClass) {
         verify(mIndexManager, times(1)).updateFromClassNameResource(indexingClass.getName(),
-                false /* rebuild */, true /* includeInSearchResults */);
+                true /* includeInSearchResults */);
         verify(mIndexManager, never()).updateFromClassNameResource(indexingClass.getName(),
-                true /* rebuild */, true /* includeInSearchResults */);
+                false /* includeInSearchResults */);
     }
 
     /*
diff --git a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
index 29cbe64..327b910 100644
--- a/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
+++ b/tests/robotests/src/com/android/settings/search2/DatabaseIndexingManagerTest.java
@@ -741,9 +741,16 @@
     }
 
     @Test
-    public void testLocaleUpdated_afterIndexing_localeAdded() {
+    public void testLocaleUpdated_afterIndexing_localeNotAdded() {
         mManager.updateDatabase(false, localeStr);
         assertThat(IndexDatabaseHelper.getInstance(mContext)
+                .isLocaleAlreadyIndexed(mContext, localeStr)).isFalse();
+    }
+
+    @Test
+    public void testLocaleUpdated_afterFullIndexing_localeAdded() {
+        mManager.performIndexing();
+        assertThat(IndexDatabaseHelper.getInstance(mContext)
                 .isLocaleAlreadyIndexed(mContext, localeStr)).isTrue();
     }
 
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
index 88a63b3..0a12ebf 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -54,6 +54,7 @@
 
     private static final int LEVEL = 1;
     private static final int RSSI = -55;
+    private static final int LINK_SPEED = 123;
     private static final String SECURITY = "None";
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -67,6 +68,7 @@
 
     @Mock private Preference mockConnectionDetailPref;
     @Mock private WifiDetailPreference mockSignalStrengthPref;
+    @Mock private WifiDetailPreference mockLinkSpeedPref;
     @Mock private WifiDetailPreference mockFrequencyPref;
     @Mock private WifiDetailPreference mockSecurityPref;
     @Mock private WifiDetailPreference mockIpAddressPref;
@@ -97,6 +99,7 @@
         setupMockedPreferenceScreen();
 
         when(mockWifiInfo.getRssi()).thenReturn(RSSI);
+        when(mockWifiInfo.getLinkSpeed()).thenReturn(LINK_SPEED);
         when(mockWifiManager.getConnectionInfo()).thenReturn(mockWifiInfo);
     }
 
@@ -106,6 +109,8 @@
                 .thenReturn(mockConnectionDetailPref);
         when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_SIGNAL_STRENGTH_PREF))
                 .thenReturn(mockSignalStrengthPref);
+        when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_LINK_SPEED))
+                .thenReturn(mockLinkSpeedPref);
         when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_FREQUENCY_PREF))
                 .thenReturn(mockFrequencyPref);
         when(mockScreen.findPreference(WifiDetailPreferenceController.KEY_SECURITY_PREF))
@@ -179,6 +184,15 @@
     }
 
     @Test
+    public void linkSpeedPref_shouldHaveDetailTextSet() {
+        String expectedLinkSpeed = mContext.getString(R.string.link_speed, LINK_SPEED);
+
+        mController.onResume();
+
+        verify(mockLinkSpeedPref).setDetailText(expectedLinkSpeed);
+    }
+
+    @Test
     public void forgetNetwork_ephemeral() {
         WifiConfiguration wifiConfiguration = new WifiConfiguration();
         wifiConfiguration.SSID = "ssid";