Merge "Import translations. DO NOT MERGE" into qt-dev
diff --git a/res/values/config.xml b/res/values/config.xml
index 496b5d2..1dbe079 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -363,4 +363,7 @@
 
     <!-- Grayscale settings intent -->
     <string name="config_grayscale_settings_intent" translate="false"></string>
+
+    <!-- List containing the injected tile keys which are suppressed. -->
+    <string-array name="config_suppress_injected_tile_keys" translatable="false"/>
 </resources>
diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
index ad6ecaf..1485500 100644
--- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java
@@ -150,6 +150,9 @@
 
     @Override
     protected boolean displayTile(Tile tile) {
+        if (!super.displayTile(tile)) {
+            return false;
+        }
         if (mAccountType == null) {
             return false;
         }
diff --git a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
index d6a668e..112d7b8 100644
--- a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
@@ -26,6 +26,7 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
+import android.provider.DeviceConfig;
 import android.provider.MediaStore;
 import android.util.Log;
 import android.view.View;
@@ -38,6 +39,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.SettingsUIDeviceConfig;
 import com.android.settings.fuelgauge.BatteryMeterView;
 import com.android.settingslib.bluetooth.BluetoothUtils;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -64,7 +66,6 @@
     @VisibleForTesting
     final Map<String, Bitmap> mIconCache;
     private CachedBluetoothDevice mCachedDevice;
-    private BluetoothDevice mBluetoothDevice;
     @VisibleForTesting
     BluetoothAdapter mBluetoothAdapter;
     @VisibleForTesting
@@ -88,9 +89,11 @@
 
     @Override
     public int getAvailabilityStatus() {
+        final boolean advancedEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, true);
         final boolean untetheredHeadset = BluetoothUtils.getBooleanMetaData(
                 mCachedDevice.getDevice(), BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET);
-        return untetheredHeadset ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+        return advancedEnabled && untetheredHeadset ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
     @Override
@@ -138,7 +141,6 @@
 
     public void init(CachedBluetoothDevice cachedBluetoothDevice) {
         mCachedDevice = cachedBluetoothDevice;
-        mBluetoothDevice = mCachedDevice.getDevice();
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
index ee63045..f509605 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
@@ -19,12 +19,14 @@
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.provider.DeviceConfig;
 import android.util.Pair;
 
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.core.SettingsUIDeviceConfig;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.bluetooth.BluetoothUtils;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -53,8 +55,11 @@
 
     @Override
     public boolean isAvailable() {
-        return !BluetoothUtils.getBooleanMetaData(mCachedDevice.getDevice(),
-                BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET);
+        final boolean advancedEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, true);
+        return !advancedEnabled
+                || !BluetoothUtils.getBooleanMetaData(mCachedDevice.getDevice(),
+                        BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET);
     }
 
     @Override
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index 36cbd5d..c31b13e 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -22,7 +22,7 @@
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.os.Bundle;
-import android.util.FeatureFlagUtils;
+import android.provider.DeviceConfig;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -30,7 +30,7 @@
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.R;
-import com.android.settings.core.FeatureFlags;
+import com.android.settings.core.SettingsUIDeviceConfig;
 import com.android.settings.dashboard.RestrictedDashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.slices.BlockingSlicePrefController;
@@ -117,10 +117,10 @@
 
         final BluetoothFeatureProvider featureProvider = FeatureFactory.getFactory(
                 context).getBluetoothFeatureProvider(context);
-        final boolean injectionEnabled = FeatureFlagUtils.isEnabled(context,
-                FeatureFlags.SLICE_INJECTION);
+        final boolean sliceEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_SLICE_SETTINGS_ENABLED, true);
 
-        use(BlockingSlicePrefController.class).setSliceUri(injectionEnabled
+        use(BlockingSlicePrefController.class).setSliceUri(sliceEnabled
                 ? featureProvider.getBluetoothDeviceSettingsUri(mCachedDevice.getDevice())
                 : null);
     }
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index d5cfdcc..cbabb06 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -18,11 +18,13 @@
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.net.Uri;
+import android.provider.DeviceConfig;
 import android.provider.SearchIndexableResource;
 
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.R;
+import com.android.settings.core.SettingsUIDeviceConfig;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.slices.SlicePreferenceController;
@@ -86,12 +88,15 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
+        final boolean nearbyEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true);
         use(AvailableMediaDeviceGroupController.class).init(this);
         use(ConnectedDeviceGroupController.class).init(this);
         use(PreviouslyConnectedDevicePreferenceController.class).init(this);
         use(DiscoverableFooterPreferenceController.class).init(this);
-        use(SlicePreferenceController.class).setSliceUri(
-                Uri.parse(getString(R.string.config_nearby_devices_slice_uri)));
+        use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
+                ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
+                : null);
     }
 
     /**
diff --git a/src/com/android/settings/core/SettingsUIDeviceConfig.java b/src/com/android/settings/core/SettingsUIDeviceConfig.java
new file mode 100644
index 0000000..b7aa281
--- /dev/null
+++ b/src/com/android/settings/core/SettingsUIDeviceConfig.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2019 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;
+
+/**
+ * Class to store keys for settings related features, which comes from
+ * {@link android.provider.DeviceConfig}
+ */
+public class SettingsUIDeviceConfig {
+    /**
+     * {@code true} if slice settings is enabled in BT device detail page
+     */
+    public static final String BT_SLICE_SETTINGS_ENABLED = "bt_slice_settings_enabled";
+    /**
+     * {@code true} if advanced header is enabled in BT device detail page
+     */
+    public static final String BT_ADVANCED_HEADER_ENABLED = "bt_advanced_header_enabled";
+    /**
+     * {@code true} if near by device suggestion is enabled in connected device page
+     */
+    public static final String BT_NEAR_BY_SUGGESTION_ENABLED = "bt_near_by_suggestion_enabled";
+}
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index 1630311..f2e3d73 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -24,12 +24,14 @@
 import android.util.ArraySet;
 import android.util.Log;
 
+import androidx.annotation.CallSuper;
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceGroup;
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.PreferenceControllerListHelper;
@@ -43,6 +45,7 @@
 import com.android.settingslib.drawer.Tile;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -65,12 +68,15 @@
     private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
     private boolean mListeningToCategoryChange;
     private SummaryLoader mSummaryLoader;
+    private List<String> mSuppressInjectedTileKeys;
     @VisibleForTesting
     UiBlockerController mBlockerController;
 
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
+        mSuppressInjectedTileKeys = Arrays.asList(context.getResources().getStringArray(
+                R.array.config_suppress_injected_tile_keys));
         mDashboardFeatureProvider = FeatureFactory.getFactory(context).
                 getDashboardFeatureProvider(context);
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
@@ -283,7 +289,12 @@
     /**
      * Returns true if this tile should be displayed
      */
+    @CallSuper
     protected boolean displayTile(Tile tile) {
+        if (mSuppressInjectedTileKeys != null && tile.hasKey()) {
+            // For suppressing injected tiles for OEMs.
+            return !mSuppressInjectedTileKeys.contains(tile.getKey(getContext()));
+        }
         return true;
     }
 
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index c851a71..33f2553 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -34,6 +34,8 @@
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.UsageView;
 import com.android.settingslib.R;
+import com.android.settingslib.fuelgauge.Estimate;
+import com.android.settingslib.fuelgauge.EstimateKt;
 import com.android.settingslib.utils.PowerUtil;
 import com.android.settingslib.utils.StringUtil;
 
@@ -44,7 +46,7 @@
     public int batteryLevel;
     public boolean discharging = true;
     public long remainingTimeUs = 0;
-    public long averageTimeToDischarge = Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
+    public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
     public String batteryPercentString;
     public String statusLabel;
     public String suggestionLabel;
@@ -202,7 +204,7 @@
         final Estimate estimate = new Estimate(
                 PowerUtil.convertUsToMs(prediction),
                 false, /* isBasedOnUsage */
-                Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
+                EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
         BatteryUtils.logRuntime(LOG_TAG, "time for regular BatteryInfo", startTime);
         return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                 estimate, elapsedRealtimeUs, shortString);
@@ -214,7 +216,7 @@
         Estimate estimate = new Estimate(
                 PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
                 false,
-                Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
+                EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
         return getBatteryInfo(context, batteryBroadcast, stats, estimate, elapsedRealtimeUs,
                 shortString);
     }
@@ -228,7 +230,7 @@
         info.batteryLevel = Utils.getBatteryLevel(batteryBroadcast);
         info.batteryPercentString = Utils.formatPercentage(info.batteryLevel);
         info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
-        info.averageTimeToDischarge = estimate.averageDischargeTime;
+        info.averageTimeToDischarge = estimate.getAverageDischargeTime();
         final Resources resources = context.getResources();
 
         info.statusLabel = Utils.getBatteryStatus(resources, batteryBroadcast);
@@ -269,20 +271,20 @@
 
     private static void updateBatteryInfoDischarging(Context context, boolean shortString,
             Estimate estimate, BatteryInfo info) {
-        final long drainTimeUs = PowerUtil.convertMsToUs(estimate.estimateMillis);
+        final long drainTimeUs = PowerUtil.convertMsToUs(estimate.getEstimateMillis());
         if (drainTimeUs > 0) {
             info.remainingTimeUs = drainTimeUs;
             info.remainingLabel = PowerUtil.getBatteryRemainingStringFormatted(
                     context,
                     PowerUtil.convertUsToMs(drainTimeUs),
                     null /* percentageString */,
-                    estimate.isBasedOnUsage && !shortString
+                    estimate.isBasedOnUsage() && !shortString
             );
             info.chargeLabel = PowerUtil.getBatteryRemainingStringFormatted(
                     context,
                     PowerUtil.convertUsToMs(drainTimeUs),
                     info.batteryPercentString,
-                    estimate.isBasedOnUsage && !shortString
+                    estimate.isBasedOnUsage() && !shortString
             );
             info.suggestionLabel = PowerUtil.getBatteryTipStringFormatted(
                     context, PowerUtil.convertUsToMs(drainTimeUs));
diff --git a/src/com/android/settings/fuelgauge/BatteryMeterView.java b/src/com/android/settings/fuelgauge/BatteryMeterView.java
index 4485508..27923ef 100644
--- a/src/com/android/settings/fuelgauge/BatteryMeterView.java
+++ b/src/com/android/settings/fuelgauge/BatteryMeterView.java
@@ -82,7 +82,7 @@
     }
 
     public int getBatteryLevel() {
-        return mDrawable.getLevel();
+        return mDrawable.getBatteryLevel();
     }
 
     public void setCharging(boolean charging) {
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 6f77953..cb22356 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -47,6 +47,8 @@
 import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
 import com.android.settings.fuelgauge.batterytip.StatsManagerConfig;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.fuelgauge.Estimate;
+import com.android.settingslib.fuelgauge.EstimateKt;
 import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
 import com.android.settingslib.utils.PowerUtil;
 import com.android.settingslib.utils.ThreadUtils;
@@ -460,7 +462,7 @@
             estimate = new Estimate(
                     PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
                     false /* isBasedOnUsage */,
-                    Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
+                    EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
         }
 
         BatteryUtils.logRuntime(tag, "BatteryInfoLoader post query", startTime);
diff --git a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
index d27e4dc..c8dbb59 100644
--- a/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
+++ b/src/com/android/settings/fuelgauge/DebugEstimatesLoader.java
@@ -23,6 +23,8 @@
 
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.fuelgauge.Estimate;
+import com.android.settingslib.fuelgauge.EstimateKt;
 import com.android.settingslib.utils.AsyncLoaderCompat;
 import com.android.settingslib.utils.PowerUtil;
 
@@ -60,7 +62,7 @@
 
         Estimate estimate = powerUsageFeatureProvider.getEnhancedBatteryPrediction(context);
         if (estimate == null) {
-            estimate = new Estimate(0, false, Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
+            estimate = new Estimate(0, false, EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
         }
         BatteryInfo newInfo = BatteryInfo.getBatteryInfo(getContext(), batteryBroadcast, stats,
                 estimate, elapsedRealtimeUs, false);
diff --git a/src/com/android/settings/fuelgauge/Estimate.java b/src/com/android/settings/fuelgauge/Estimate.java
deleted file mode 100644
index f59bbf1..0000000
--- a/src/com/android/settings/fuelgauge/Estimate.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.android.settings.fuelgauge;
-
-public class Estimate {
-
-    // Value to indicate averageTimeToDischarge could not be obtained
-    public static final int AVERAGE_TIME_TO_DISCHARGE_UNKNOWN = -1;
-
-    public final long estimateMillis;
-    public final boolean isBasedOnUsage;
-    public final long averageDischargeTime;
-
-    public Estimate(long estimateMillis, boolean isBasedOnUsage,
-            long averageDischargeTime) {
-        this.estimateMillis = estimateMillis;
-        this.isBasedOnUsage = isBasedOnUsage;
-        this.averageDischargeTime = averageDischargeTime;
-    }
-}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index a6474fb..4f292dd 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -21,6 +21,7 @@
 import android.util.SparseIntArray;
 
 import com.android.internal.os.BatterySipper;
+import com.android.settingslib.fuelgauge.Estimate;
 
 /**
  * Feature Provider used in power usage
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index b76aef0..ab71c97 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -24,6 +24,7 @@
 
 import com.android.internal.os.BatterySipper;
 import com.android.internal.util.ArrayUtils;
+import com.android.settingslib.fuelgauge.Estimate;
 
 public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider {
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 75db215..82ff4c2 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -45,6 +45,7 @@
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.fuelgauge.EstimateKt;
 import com.android.settingslib.search.SearchIndexable;
 import com.android.settingslib.utils.PowerUtil;
 import com.android.settingslib.utils.StringUtil;
@@ -313,7 +314,7 @@
     @VisibleForTesting
     void updateLastFullChargePreference() {
         if (mBatteryInfo != null && mBatteryInfo.averageTimeToDischarge
-                != Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN) {
+                != EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN) {
             mLastFullChargePref.setTitle(R.string.battery_full_charge_last);
             mLastFullChargePref.setSubtitle(
                     StringUtil.formatElapsedTime(getContext(), mBatteryInfo.averageTimeToDischarge,
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
index aa66aed..a1fb076 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
@@ -23,7 +23,6 @@
 import com.android.internal.os.BatteryStatsHelper;
 import com.android.settings.fuelgauge.BatteryInfo;
 import com.android.settings.fuelgauge.BatteryUtils;
-import com.android.settings.fuelgauge.Estimate;
 import com.android.settings.fuelgauge.batterytip.detectors.EarlyWarningDetector;
 import com.android.settings.fuelgauge.batterytip.detectors.HighUsageDetector;
 import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector;
@@ -33,6 +32,7 @@
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
+import com.android.settingslib.fuelgauge.EstimateKt;
 import com.android.settingslib.utils.AsyncLoaderCompat;
 
 import java.util.ArrayList;
@@ -87,7 +87,7 @@
     private List<BatteryTip> getFakeData() {
         final List<BatteryTip> tips = new ArrayList<>();
         tips.add(new SummaryTip(BatteryTip.StateType.NEW,
-                Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
+                EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
         tips.add(new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */,
                 "Fake data"));
 
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
index b0dc926..d615db6 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
@@ -26,13 +26,13 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.InstrumentedPreferenceFragment;
-import com.android.settings.fuelgauge.Estimate;
 import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.CardPreference;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.fuelgauge.EstimateKt;
 
 import java.util.HashMap;
 import java.util.List;
@@ -93,7 +93,7 @@
 
         // Add summary tip in advance to avoid UI flakiness
         final SummaryTip summaryTip = new SummaryTip(BatteryTip.StateType.NEW,
-                Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
+                EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
         summaryTip.updatePreference(mCardPreference);
     }
 
diff --git a/src/com/android/settings/network/TetherProvisioningActivity.java b/src/com/android/settings/network/TetherProvisioningActivity.java
index b30950e..48c5707 100644
--- a/src/com/android/settings/network/TetherProvisioningActivity.java
+++ b/src/com/android/settings/network/TetherProvisioningActivity.java
@@ -39,6 +39,7 @@
     private static final int PROVISION_REQUEST = 0;
     private static final String TAG = "TetherProvisioningAct";
     private static final String EXTRA_TETHER_TYPE = "TETHER_TYPE";
+    private static final String EXTRA_SUBID = "subId";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
     private ResultReceiver mResultReceiver;
 
@@ -49,14 +50,21 @@
         mResultReceiver = (ResultReceiver)getIntent().getParcelableExtra(
                 ConnectivityManager.EXTRA_PROVISION_CALLBACK);
 
-        int tetherType = getIntent().getIntExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE,
+        final int tetherType = getIntent().getIntExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE,
                 ConnectivityManager.TETHERING_INVALID);
+
+        final int tetherSubId = getIntent().getIntExtra(EXTRA_SUBID,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
         final int subId = SubscriptionManager.getDefaultDataSubscriptionId();
+        if (tetherSubId != subId) {
+            Log.e(TAG, "This Provisioning request is outdated, current subId: " + subId);
+            return;
+        }
         final Resources res = Utils.getResourcesForSubId(this, subId);
         final String[] provisionApp = res.getStringArray(
                 com.android.internal.R.array.config_mobile_hotspot_provision_app);
 
-        Intent intent = new Intent(Intent.ACTION_MAIN);
+        final Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.setClassName(provisionApp[0], provisionApp[1]);
         intent.putExtra(EXTRA_TETHER_TYPE, tetherType);
         if (DEBUG) {
diff --git a/src/com/android/settings/widget/DisabledCheckBoxPreference.java b/src/com/android/settings/widget/DisabledCheckBoxPreference.java
index be6deb3..15c17dc 100644
--- a/src/com/android/settings/widget/DisabledCheckBoxPreference.java
+++ b/src/com/android/settings/widget/DisabledCheckBoxPreference.java
@@ -20,6 +20,7 @@
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
 import android.view.View;
+import android.widget.TextView;
 
 import androidx.preference.CheckBoxPreference;
 import androidx.preference.PreferenceViewHolder;
@@ -89,6 +90,12 @@
         mCheckBox = holder.findViewById(android.R.id.checkbox);
 
         enableCheckbox(mEnabledCheckBox);
+
+        TextView title = (TextView) holder.findViewById(android.R.id.title);
+        if (title != null) {
+            title.setSingleLine(false);
+            title.setMaxLines(2);
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/wifi/tether/TetherService.java b/src/com/android/settings/wifi/tether/TetherService.java
index 09781a8..34daccf 100644
--- a/src/com/android/settings/wifi/tether/TetherService.java
+++ b/src/com/android/settings/wifi/tether/TetherService.java
@@ -55,6 +55,8 @@
 
     @VisibleForTesting
     public static final String EXTRA_RESULT = "EntitlementResult";
+    @VisibleForTesting
+    public static final String EXTRA_SUBID = "subId";
 
     // Activity results to match the activity provision protocol.
     // Default to something not ok.
@@ -100,6 +102,18 @@
 
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
+        if (intent.hasExtra(EXTRA_SUBID)) {
+            final int tetherSubId = intent.getIntExtra(EXTRA_SUBID,
+                    SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+            final int subId = getTetherServiceWrapper().getDefaultDataSubscriptionId();
+            if (tetherSubId != subId) {
+                Log.e(TAG, "This Provisioning request is outdated, current subId: " + subId);
+                if (!mInProvisionCheck) {
+                    stopSelf();
+                }
+                return START_NOT_STICKY;
+            }
+        }
         if (intent.hasExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE)) {
             int type = intent.getIntExtra(ConnectivityManager.EXTRA_ADD_TETHER_TYPE,
                     ConnectivityManager.TETHERING_INVALID);
diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml
index 78c3c08..a6a84c9 100644
--- a/tests/robotests/res/values-mcc999/config.xml
+++ b/tests/robotests/res/values-mcc999/config.xml
@@ -88,4 +88,9 @@
 
     <!-- Grayscale settings intent -->
     <string name="config_grayscale_settings_intent" translate="false">intent:#Intent;action=test.test;end</string>
+
+    <!-- List containing the injected tile keys which are suppressed. -->
+    <string-array name="config_suppress_injected_tile_keys" translatable="false">
+        <item>injected_tile_key</item>
+    </string-array>
 </resources>
diff --git a/tests/robotests/src/com/android/settings/accounts/CrossProfileCalendarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/CrossProfileCalendarPreferenceControllerTest.java
index 2cbed97..b50fa5e 100644
--- a/tests/robotests/src/com/android/settings/accounts/CrossProfileCalendarPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/CrossProfileCalendarPreferenceControllerTest.java
@@ -40,6 +40,7 @@
 import com.android.settingslib.RestrictedSwitchPreference;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -83,7 +84,7 @@
     }
 
     @Test
-    public void getAvailabilityStatus_noManagedUser_DISABLED() {
+    public void getAvailabilityStatus_noManagedUser_shouldBeDisabled() {
         mController.setManagedUser(null);
 
         assertThat(mController.getAvailabilityStatus())
@@ -91,35 +92,6 @@
     }
 
     @Test
-    public void getAvailabilityStatus_hasManagedUser_AVAILABLE() {
-        mController.setManagedUser(mManagedUser);
-        assertThat(mController.getAvailabilityStatus())
-                .isEqualTo(CrossProfileCalendarPreferenceController.AVAILABLE);
-    }
-
-    @Test
-    public void updateStateToDisabled_isNotChecked() {
-        Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                CROSS_PROFILE_CALENDAR_ENABLED, 0, mManagedUser.getIdentifier());
-
-        mController.updateState(mPreference);
-        assertThat(mPreference.isChecked()).isFalse();
-    }
-
-    @Test
-    public void updateStateToEnabled_isChecked() throws Exception {
-        // Put 0 first so we know the value is not originally 1.
-        Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                CROSS_PROFILE_CALENDAR_ENABLED, 0, mManagedUser.getIdentifier());
-        mController.updateState(mPreference);
-        Settings.Secure.putIntForUser(mContext.getContentResolver(),
-                CROSS_PROFILE_CALENDAR_ENABLED, 1, mManagedUser.getIdentifier());
-
-        mController.updateState(mPreference);
-        assertThat(mPreference.isChecked()).isTrue();
-    }
-
-    @Test
     public void getAvailabilityStatus_noPackageAllowed_shouldBeDisabledForUser() throws Exception {
         dpm.setProfileOwner(TEST_COMPONENT_NAME);
 
@@ -144,6 +116,28 @@
     }
 
     @Test
+    public void updateStateToDisabled_isNotChecked() {
+        Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                CROSS_PROFILE_CALENDAR_ENABLED, 0, mManagedUser.getIdentifier());
+
+        mController.updateState(mPreference);
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void updateStateToEnabled_isChecked() throws Exception {
+        // Put 0 first so we know the value is not originally 1.
+        Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                CROSS_PROFILE_CALENDAR_ENABLED, 0, mManagedUser.getIdentifier());
+        mController.updateState(mPreference);
+        Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                CROSS_PROFILE_CALENDAR_ENABLED, 1, mManagedUser.getIdentifier());
+
+        mController.updateState(mPreference);
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
     public void onPreferenceChangeToFalse_shouldUpdateProviderValue() {
         mController.onPreferenceChange(mPreference, false);
         assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(),
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
index 362b003..03e9b6f 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java
@@ -27,6 +27,7 @@
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.provider.DeviceConfig;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
@@ -35,7 +36,9 @@
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.SettingsUIDeviceConfig;
 import com.android.settings.fuelgauge.BatteryMeterView;
+import com.android.settings.testutils.shadow.ShadowDeviceConfig;
 import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.widget.LayoutPreference;
@@ -50,8 +53,8 @@
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowEntityHeaderController.class)
-public class AdvancedBluetoothDetailsHeaderControllerTest{
+@Config(shadows = {ShadowEntityHeaderController.class, ShadowDeviceConfig.class})
+public class AdvancedBluetoothDetailsHeaderControllerTest {
     private static final int BATTERY_LEVEL_MAIN = 30;
     private static final int BATTERY_LEVEL_LEFT = 25;
     private static final int BATTERY_LEVEL_RIGHT = 45;
@@ -141,7 +144,9 @@
     }
 
     @Test
-    public void getAvailabilityStatus_untetheredHeadset_returnAvailable() {
+    public void getAvailabilityStatus_untetheredHeadsetWithConfigOn_returnAvailable() {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "true", true);
         when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
                 .thenReturn("true".getBytes());
 
@@ -150,7 +155,31 @@
     }
 
     @Test
-    public void getAvailabilityStatus_notUntetheredHeadset_returnUnavailable() {
+    public void getAvailabilityStatus_untetheredHeadsetWithConfigOff_returnUnavailable() {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "false", true);
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
+                .thenReturn("true".getBytes());
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(
+                BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_notUntetheredHeadsetWithConfigOn_returnUnavailable() {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "true", true);
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
+                .thenReturn("false".getBytes());
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(
+                BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_notUntetheredHeadsetWithConfigOff_returnUnavailable() {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "false", true);
         when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
                 .thenReturn("false".getBytes());
 
@@ -169,17 +198,21 @@
 
     @Test
     public void onStart_isAvailable_registerCallback() {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "true", true);
         when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
                 .thenReturn("true".getBytes());
 
         mController.onStart();
 
         verify(mBluetoothAdapter).addOnMetadataChangedListener(mBluetoothDevice,
-                mContext.getMainExecutor() ,mController.mMetadataListener);
+                mContext.getMainExecutor(), mController.mMetadataListener);
     }
 
     @Test
     public void onStop_isAvailable_unregisterCallback() {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "true", true);
         when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
                 .thenReturn("true".getBytes());
 
@@ -197,7 +230,7 @@
         mController.onStart();
 
         verify(mBluetoothAdapter, never()).addOnMetadataChangedListener(mBluetoothDevice,
-                mContext.getMainExecutor() ,mController.mMetadataListener);
+                mContext.getMainExecutor(), mController.mMetadataListener);
     }
 
     @Test
@@ -213,6 +246,8 @@
 
     @Test
     public void onDestroy_isAvailable_recycleBitmap() {
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "true", true);
         when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
                 .thenReturn("true".getBytes());
         mController.mIconCache.put(ICON_URI, mBitmap);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHeaderControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHeaderControllerTest.java
index 1ee1de6..94f8cc5 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsHeaderControllerTest.java
@@ -27,7 +27,9 @@
 import android.graphics.drawable.Drawable;
 
 import com.android.settings.R;
+import com.android.settings.core.SettingsUIDeviceConfig;
 import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.shadow.ShadowDeviceConfig;
 import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
@@ -44,7 +46,7 @@
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowEntityHeaderController.class)
+@Config(shadows = {ShadowEntityHeaderController.class, ShadowDeviceConfig.class})
 public class BluetoothDetailsHeaderControllerTest extends BluetoothDetailsControllerTestBase {
 
     private BluetoothDetailsHeaderController mController;
@@ -123,10 +125,24 @@
     }
 
     @Test
-    public void isAvailable_untetheredHeadset_returnFalse() {
+    public void isAvailable_untetheredHeadsetWithConfigOn_returnFalse() {
+        android.provider.DeviceConfig.setProperty(
+                android.provider.DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "true", true);
         when(mBluetoothDevice.getMetadata(
                 BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)).thenReturn("true".getBytes());
 
         assertThat(mController.isAvailable()).isFalse();
     }
+
+    @Test
+    public void isAvailable_untetheredHeadsetWithConfigOff_returnTrue() {
+        android.provider.DeviceConfig.setProperty(
+                android.provider.DeviceConfig.NAMESPACE_SETTINGS_UI,
+                SettingsUIDeviceConfig.BT_ADVANCED_HEADER_ENABLED, "false", true);
+        when(mBluetoothDevice.getMetadata(
+                BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)).thenReturn("true".getBytes());
+
+        assertThat(mController.isAvailable()).isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java
index 4062bfb..5fdadb4 100644
--- a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java
+++ b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java
@@ -24,6 +24,7 @@
 import com.android.settings.slices.SliceControllerInXmlCodeInspector;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -46,6 +47,7 @@
     }
 
     @Test
+    @Ignore("b/130897640")
     public void runInstrumentableFragmentCodeInspection() {
         new InstrumentableFragmentCodeInspector(mClasses).run();
     }
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 438dfc1..9aae249 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -16,6 +16,7 @@
 package com.android.settings.dashboard;
 
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.DASHBOARD_CONTAINER;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -53,6 +54,7 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
@@ -79,6 +81,8 @@
         mActivityInfo = new ActivityInfo();
         mActivityInfo.packageName = "pkg";
         mActivityInfo.name = "class";
+        mActivityInfo.metaData = new Bundle();
+        mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "injected_tile_key");
         mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
         mDashboardCategory = new DashboardCategory("key");
         mDashboardCategory.addTile(new Tile(mActivityInfo, mDashboardCategory.key));
@@ -144,6 +148,20 @@
     }
 
     @Test
+    @Config(qualifiers = "mcc999")
+    public void displayTilesAsPreference_shouldNotAddSuppressedTiles() {
+        when(mFakeFeatureFactory.dashboardFeatureProvider
+                .getTilesForCategory(nullable(String.class)))
+                .thenReturn(mDashboardCategory);
+        when(mFakeFeatureFactory.dashboardFeatureProvider
+                .getDashboardKeyForTile(nullable(Tile.class)))
+                .thenReturn("test_key");
+        mTestFragment.onCreatePreferences(new Bundle(), "rootKey");
+
+        verify(mTestFragment.mScreen, never()).addPreference(nullable(Preference.class));
+    }
+
+    @Test
     public void onAttach_shouldCreatePlaceholderPreferenceController() {
         final AbstractPreferenceController controller = mTestFragment.use(
                 DashboardTilePlaceholderPreferenceController.class);
diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java
index 9adb1ad..8938873 100644
--- a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java
@@ -32,6 +32,7 @@
 import com.android.settingslib.RestrictedPreference;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -40,6 +41,7 @@
 import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
+@Ignore("b/130897305")
 public class AdaptiveSleepPreferenceControllerTest {
 
     private static final String PREFERENCE_KEY = "adaptive_sleep";
diff --git a/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java b/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java
index 7a8bded..87284ed 100644
--- a/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/display/DarkUIInfoDialogFragmentTest.java
@@ -28,6 +28,7 @@
 import android.content.SharedPreferences;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -49,6 +50,7 @@
     }
 
     @Test
+    @Ignore("b/130897882")
     public void dialogDismissedOnConfirmation() {
         doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
         SharedPreferences prefs = RuntimeEnvironment.application.getSharedPreferences(
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
index d5e0ed8..6b917f0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
@@ -41,6 +41,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.widget.UsageView;
 import com.android.settingslib.R;
+import com.android.settingslib.fuelgauge.Estimate;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
index e911902..df9a194 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragmentTest.java
@@ -28,7 +28,6 @@
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.settings.R;
-import com.android.settings.fuelgauge.Estimate;
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip;
 import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
@@ -37,6 +36,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.settingslib.fuelgauge.EstimateKt;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -96,7 +96,7 @@
 
         mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
         mSummaryTip = spy(new SummaryTip(BatteryTip.StateType.NEW,
-                Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
+                EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
index fd2e806..793b44d 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
@@ -36,6 +36,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -105,6 +106,7 @@
     }
 
     @Test
+    @Ignore("b/130896218")
     public void onDestroy_logCloseEvent() {
         mPanelFragment.onDestroy();
         verify(mFakeFeatureFactory.metricsFeatureProvider).action(
@@ -115,6 +117,7 @@
                 0);    }
 
     @Test
+    @Ignore("b/130896218")
     public void panelSeeMoreClick_logsCloseEvent() {
         final View.OnClickListener listener = mPanelFragment.getSeeMoreListener();
 
@@ -130,6 +133,7 @@
     }
 
     @Test
+    @Ignore("b/130896218")
     public void panelDoneClick_logsCloseEvent() {
         final View.OnClickListener listener = mPanelFragment.getCloseListener();
 
diff --git a/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java b/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java
index fa15aa0..4ca6395 100644
--- a/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java
+++ b/tests/robotests/src/com/android/settings/panel/SettingsPanelActivityTest.java
@@ -35,6 +35,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.Robolectric;
@@ -89,6 +90,7 @@
     }
 
     @Test
+    @Ignore("b/130896218")
     public void onTouchEvent_outsideAction_logsPanelClosed() {
         final MotionEvent event = mock(MotionEvent.class);
         when(event.getAction()).thenReturn(MotionEvent.ACTION_OUTSIDE);
diff --git a/tests/robotests/src/com/android/settings/panel/VolumePanelTest.java b/tests/robotests/src/com/android/settings/panel/VolumePanelTest.java
index 11de7b3..154428d 100644
--- a/tests/robotests/src/com/android/settings/panel/VolumePanelTest.java
+++ b/tests/robotests/src/com/android/settings/panel/VolumePanelTest.java
@@ -23,6 +23,7 @@
 import com.android.settings.slices.CustomSliceRegistry;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -41,6 +42,7 @@
     }
 
     @Test
+    @Ignore("b/130896218")
     public void getSlices_containsNecessarySlices() {
         final List<Uri> uris = mPanel.getSlices();
 
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 2acfc4a..906c55c 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -83,6 +83,7 @@
 import com.android.settingslib.wifi.WifiTrackerFactory;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -105,6 +106,7 @@
 
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowDevicePolicyManager.class, ShadowEntityHeaderController.class})
+@Ignore("b/130896210")
 public class WifiDetailPreferenceControllerTest {
 
     private static final int LEVEL = 1;
diff --git a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
index 0332092..0739ef0 100644
--- a/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
+++ b/tests/unit/src/com/android/settings/wifi/tether/TetherServiceTest.java
@@ -266,11 +266,26 @@
         assertEquals(TetherService.class.getName(), pi.getIntent().getComponent().getClassName());
     }
 
+    public void testIgnoreOutdatedRequest() {
+        Intent intent = new Intent();
+        intent.putExtra(EXTRA_ADD_TETHER_TYPE, TETHERING_WIFI);
+        intent.putExtra(EXTRA_RUN_PROVISION, true);
+        intent.putExtra(EXTRA_PROVISION_CALLBACK, mResultReceiver);
+        intent.putExtra(TetherService.EXTRA_SUBID, 1 /* Tested subId number */);
+        startService(intent);
+
+        SystemClock.sleep(PROVISION_TIMEOUT);
+        assertEquals(TETHERING_INVALID, mLastTetherRequestType);
+        assertTrue(mWrapper.isAppInactive(ENTITLEMENT_PACKAGE_NAME));
+        assertTrue(mWrapper.isAppInactive(FAKE_PACKAGE_NAME));
+    }
+
     private void runProvisioningForType(int type) {
         Intent intent = new Intent();
         intent.putExtra(EXTRA_ADD_TETHER_TYPE, type);
         intent.putExtra(EXTRA_RUN_PROVISION, true);
         intent.putExtra(EXTRA_PROVISION_CALLBACK, mResultReceiver);
+        intent.putExtra(TetherService.EXTRA_SUBID, INVALID_SUBSCRIPTION_ID);
         startService(intent);
     }
 
@@ -291,7 +306,7 @@
         long startTime = SystemClock.uptimeMillis();
         while (true) {
             if (mLastTetherRequestType == expectedType) {
-                mLastTetherRequestType = -1;
+                mLastTetherRequestType = TETHERING_INVALID;
                 return true;
             }
             if ((SystemClock.uptimeMillis() - startTime) > PROVISION_TIMEOUT) {