Merge "Import translations. DO NOT MERGE" into rvc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 162d9a7..7c97f7e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5188,7 +5188,8 @@
     <!-- Summary for autoclick seekbar settings preference when user selected custom item. [CHAR LIMIT=35] -->
     <plurals name="accessibilty_autoclick_delay_unit_second">
         <item quantity="one"><xliff:g id="click_delay_label" example="1">%1$s</xliff:g> second</item>
-        <item quantity="other"><xliff:g id="click_delay_label" example="0.6">%1$s</xliff:g> seconds</item>
+        <item quantity="few"><xliff:g id="click_delay_label" example="0.6">%1$s</xliff:g> seconds</item>
+        <item quantity="other"><xliff:g id="click_delay_label">%1$s</xliff:g> seconds</item>
     </plurals>
 
     <!-- Summary for vibration settings preference when notification vibration and haptic feedback intensity are set. [CHAR LIMIT=50] -->
diff --git a/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java
index 4fcfff8..c5cede3 100644
--- a/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/LegacyAccessibilityServicePreferenceFragment.java
@@ -52,11 +52,12 @@
     @Override
     int getUserShortcutTypes() {
         int shortcutTypes = super.getUserShortcutTypes();
-
+        final boolean isServiceOn =
+                getArguments().getBoolean(AccessibilitySettings.EXTRA_CHECKED);
         final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
         final boolean hasRequestAccessibilityButtonFlag =
                 (info.flags & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0;
-        if (hasRequestAccessibilityButtonFlag) {
+        if (hasRequestAccessibilityButtonFlag && isServiceOn) {
             shortcutTypes |= UserShortcutType.SOFTWARE;
         } else {
             shortcutTypes &= (~UserShortcutType.SOFTWARE);
diff --git a/src/com/android/settings/accessibility/ToggleAutoclickCustomSeekbarController.java b/src/com/android/settings/accessibility/ToggleAutoclickCustomSeekbarController.java
index 47c1ca7..31ce9d8 100644
--- a/src/com/android/settings/accessibility/ToggleAutoclickCustomSeekbarController.java
+++ b/src/com/android/settings/accessibility/ToggleAutoclickCustomSeekbarController.java
@@ -205,7 +205,7 @@
     }
 
     private CharSequence delayTimeToString(int delayMillis) {
-        final int quantity = (delayMillis == 1000) ? Quantity.ONE : Quantity.OTHER;
+        final int quantity = (delayMillis == 1000) ? Quantity.ONE : Quantity.FEW;
         final float delaySecond = (float) delayMillis / 1000;
         // Only show integer when delay time is 1.
         final String decimalFormat = (delaySecond == 1) ? "%.0f" : "%.1f";
diff --git a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
index 11fe80e..03d4a4c 100644
--- a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
@@ -53,11 +53,13 @@
     @Retention(SOURCE)
     @IntDef({
             Quantity.OTHER,
-            Quantity.ONE
+            Quantity.ONE,
+            Quantity.FEW
     })
     @interface Quantity {
         int OTHER = 0;
         int ONE = 1;
+        int FEW = 3;
     }
 
     /**
@@ -79,7 +81,7 @@
      */
     static CharSequence getAutoclickPreferenceSummary(Resources resources, int delayMillis) {
         final int summaryIndex = getAutoclickPreferenceSummaryIndex(delayMillis);
-        final int quantity = (delayMillis == 1000) ? Quantity.ONE : Quantity.OTHER;
+        final int quantity = (delayMillis == 1000) ? Quantity.ONE : Quantity.FEW;
         final float delaySecond =  (float) delayMillis / 1000;
         // Only show integer when delay time is 1.
         final String decimalFormat = (delaySecond == 1) ? "%.0f" : "%.1f";
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index 648b38c..239ad21 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -114,25 +114,30 @@
      */
     public void init(int subscriptionId) {
         mSubId = subscriptionId;
+        mDataUsageController = null;
+    }
 
-        mDefaultTemplate = DataUsageUtils.getDefaultTemplate(mContext, mSubId);
+    private void updateConfiguration(Context context,
+            int subscriptionId, SubscriptionInfo subInfo) {
         final NetworkPolicyManager policyManager =
-                mContext.getSystemService(NetworkPolicyManager.class);
+                context.getSystemService(NetworkPolicyManager.class);
         mPolicyEditor = new NetworkPolicyEditor(policyManager);
 
-        mHasMobileData = DataUsageUtils.hasMobileData(mContext);
+        mHasMobileData = DataUsageUtils.hasMobileData(context);
 
-        mDataUsageController = new DataUsageController(mContext);
-        mDataUsageController.setSubscriptionId(mSubId);
+        mDataUsageController = new DataUsageController(context);
+        mDataUsageController.setSubscriptionId(subscriptionId);
         mDataInfoController = new DataUsageInfoController();
 
-        final SubscriptionInfo subInfo = getSubscriptionInfo(mSubId);
         if (subInfo != null) {
             mDataUsageTemplate = R.string.cell_data_template;
-        } else if (DataUsageUtils.hasWifiRadio(mContext)) {
+            mDefaultTemplate = DataUsageUtils.getMobileTemplate(context, subscriptionId);
+        } else if (DataUsageUtils.hasWifiRadio(context)) {
             mDataUsageTemplate = R.string.wifi_data_template;
+            mDefaultTemplate = NetworkTemplate.buildTemplateWifiWildcard();
         } else {
             mDataUsageTemplate = R.string.ethernet_data_template;
+            mDefaultTemplate = DataUsageUtils.getDefaultTemplate(context, subscriptionId);
         }
     }
 
@@ -198,8 +203,8 @@
         DataUsageSummaryPreference summaryPreference = (DataUsageSummaryPreference) preference;
 
         final SubscriptionInfo subInfo = getSubscriptionInfo(mSubId);
-        if (subInfo == null) {
-            mDefaultTemplate = NetworkTemplate.buildTemplateWifiWildcard();
+        if (mDataUsageController == null) {
+            updateConfiguration(mContext, mSubId, subInfo);
         }
 
         final DataUsageController.DataUsageInfo info =
diff --git a/src/com/android/settings/media/MediaOutputGroupSlice.java b/src/com/android/settings/media/MediaOutputGroupSlice.java
index 7730b2d..be6c298 100644
--- a/src/com/android/settings/media/MediaOutputGroupSlice.java
+++ b/src/com/android/settings/media/MediaOutputGroupSlice.java
@@ -83,6 +83,9 @@
         final IconCompat titleIcon = IconCompat.createWithResource(mContext,
                 R.drawable.ic_speaker_group_black_24dp);
         final Bitmap emptyBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
+        if (getWorker() == null) {
+            return listBuilder.build();
+        }
         final int maxVolume = getWorker().getSessionVolumeMax();
         final String title = mContext.getString(R.string.media_output_group);
         final SliceAction primaryAction = SliceAction.createDeeplink(
diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
index 63dd2de..1a53504 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
@@ -120,14 +120,17 @@
         return mWorker;
     }
 
-    private boolean isVisible() {
+    @VisibleForTesting
+    boolean isVisible() {
         // To decide Slice's visibility.
         // Return true if
         // 1. AudioMode is not in on-going call
         // 2. worker is not null
         // 3. Available devices are more than 0
+        // 4. The local media session is active and the state is playing.
         return getWorker() != null
                 && !com.android.settingslib.Utils.isAudioModeOngoingCall(mContext)
-                && getWorker().getMediaDevices().size() > 0;
+                && getWorker().getMediaDevices().size() > 0
+                && getWorker().getActiveLocalMediaController() != null;
     }
 }
diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
index 9eb5f8c..650890e 100644
--- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
@@ -19,10 +19,21 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
 import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
 
+import android.content.ComponentName;
 import android.content.Context;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.network.SubscriptionUtil;
@@ -31,13 +42,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import androidx.lifecycle.Lifecycle;
-import androidx.lifecycle.LifecycleObserver;
-import androidx.lifecycle.OnLifecycleEvent;
-import androidx.preference.ListPreference;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
 /**
  * This implements common controller functionality for a Preference letting the user see/change
  * what mobile network subscription is used by default for some service controlled by the
@@ -51,10 +55,17 @@
     protected SubscriptionsChangeListener mChangeListener;
     protected ListPreference mPreference;
     protected SubscriptionManager mManager;
+    protected TelecomManager mTelecomManager;
+
+    private static final String EMERGENCY_ACCOUNT_HANDLE_ID = "E";
+    private static final ComponentName PSTN_CONNECTION_SERVICE_COMPONENT =
+            new ComponentName("com.android.phone",
+                    "com.android.services.telephony.TelephonyConnectionService");
 
     public DefaultSubscriptionController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mManager = context.getSystemService(SubscriptionManager.class);
+        mTelecomManager = mContext.getSystemService(TelecomManager.class);
         mChangeListener = new SubscriptionsChangeListener(context, this);
     }
 
@@ -103,8 +114,14 @@
 
     @Override
     public CharSequence getSummary() {
+        final PhoneAccountHandle handle = getDefaultCallingAccountHandle();
+        if ((handle != null) && (!isCallingAccountBindToSubscription(handle))) {
+            // display VoIP account in summary when configured through settings within dialer
+            return getLabelFromCallingAccount(handle);
+        }
         final SubscriptionInfo info = getDefaultSubscriptionInfo();
         if (info != null) {
+            // display subscription based account
             return info.getDisplayName();
         } else {
             return mContext.getString(R.string.calls_and_sms_ask_every_time);
@@ -161,6 +178,56 @@
         }
     }
 
+    /**
+     * Get default calling account
+     *
+     * @return current calling account {@link PhoneAccountHandle}
+     */
+    public PhoneAccountHandle getDefaultCallingAccountHandle() {
+        final PhoneAccountHandle currentSelectPhoneAccount =
+                mTelecomManager.getUserSelectedOutgoingPhoneAccount();
+        if (currentSelectPhoneAccount == null) {
+            return null;
+        }
+        final List<PhoneAccountHandle> accountHandles =
+                mTelecomManager.getCallCapablePhoneAccounts(false);
+        final PhoneAccountHandle emergencyAccountHandle = new PhoneAccountHandle(
+                PSTN_CONNECTION_SERVICE_COMPONENT, EMERGENCY_ACCOUNT_HANDLE_ID);
+        if (currentSelectPhoneAccount.equals(emergencyAccountHandle)) {
+            return null;
+        }
+        for (PhoneAccountHandle handle : accountHandles) {
+            if (currentSelectPhoneAccount.equals(handle)) {
+                return currentSelectPhoneAccount;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Check if calling account bind to subscription
+     *
+     * @param handle {@link PhoneAccountHandle} for specific calling account
+     */
+    public boolean isCallingAccountBindToSubscription(PhoneAccountHandle handle) {
+        return mTelecomManager.getPhoneAccount(handle)
+                .hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION);
+    }
+
+    /**
+     * Get label from calling account
+     *
+     * @param handle to get label from {@link PhoneAccountHandle}
+     * @return label of calling account
+     */
+    public CharSequence getLabelFromCallingAccount(PhoneAccountHandle handle) {
+        CharSequence label = mTelecomManager.getPhoneAccount(handle).getLabel();
+        if (label != null) {
+            label = mContext.getPackageManager().getUserBadgedLabel(label, handle.getUserHandle());
+        }
+        return (label != null) ? label : "";
+    }
+
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         final int subscriptionId = Integer.parseInt((String) newValue);
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index 4103447..d9b31af 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -129,6 +129,7 @@
     public void onAttach(Context context) {
         super.onAttach(context);
 
+        use(DataUsageSummaryPreferenceController.class).init(mSubId);
         use(CallsDefaultSubscriptionController.class).init(getLifecycle());
         use(SmsDefaultSubscriptionController.class).init(getLifecycle());
         use(MobileNetworkSwitchController.class).init(getLifecycle(), mSubId);
diff --git a/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java b/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
index 96ed771..cf544ab 100644
--- a/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
@@ -17,6 +17,7 @@
 package com.android.settings.network.telephony;
 
 import android.content.Context;
+import android.telecom.PhoneAccountHandle;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 
@@ -40,4 +41,10 @@
     protected void setDefaultSubscription(int subscriptionId) {
         mManager.setDefaultSmsSubId(subscriptionId);
     }
+
+    @Override
+    public PhoneAccountHandle getDefaultCallingAccountHandle() {
+        // Not supporting calling account override by VoIP
+        return null;
+    }
 }
diff --git a/src/com/android/settings/wifi/ConfigureAccessPointFragment.java b/src/com/android/settings/wifi/ConfigureAccessPointFragment.java
index 3ada986..508d549 100644
--- a/src/com/android/settings/wifi/ConfigureAccessPointFragment.java
+++ b/src/com/android/settings/wifi/ConfigureAccessPointFragment.java
@@ -38,6 +38,9 @@
  *
  * The AccessPoint should be saved to the argument when launching this class in order to properly
  * render this page.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in {@link ConfigureWifiEntryFragment}.
  */
 public class ConfigureAccessPointFragment extends InstrumentedFragment implements WifiConfigUiBase {
 
diff --git a/src/com/android/settings/wifi/ConnectedAccessPointPreference.java b/src/com/android/settings/wifi/ConnectedAccessPointPreference.java
index c7953c3..e904602 100644
--- a/src/com/android/settings/wifi/ConnectedAccessPointPreference.java
+++ b/src/com/android/settings/wifi/ConnectedAccessPointPreference.java
@@ -27,7 +27,10 @@
 import com.android.settingslib.wifi.AccessPoint;
 
 /**
- * An AP preference for the currently connected AP
+ * An AP preference for the currently connected AP.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in {@link ConnectedWifiEntryPreference}.
  */
 public class ConnectedAccessPointPreference extends LongPressAccessPointPreference implements
         View.OnClickListener {
diff --git a/src/com/android/settings/wifi/LongPressAccessPointPreference.java b/src/com/android/settings/wifi/LongPressAccessPointPreference.java
index c3c08f0..1590325 100644
--- a/src/com/android/settings/wifi/LongPressAccessPointPreference.java
+++ b/src/com/android/settings/wifi/LongPressAccessPointPreference.java
@@ -23,6 +23,12 @@
 import com.android.settingslib.wifi.AccessPoint;
 import com.android.settingslib.wifi.AccessPointPreference;
 
+/**
+ * An AP preference for the currently connected AP.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in {@link com.android.settingslib.wifi.LongPressWifiEntryPreference}.
+ */
 public class LongPressAccessPointPreference extends AccessPointPreference {
 
     private final Fragment mFragment;
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index ce92de2..1579188 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -86,6 +86,9 @@
 /**
  * The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to
  * share the logic for controlling buttons, text fields, etc.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in {@link WifiConfigController2}.
  */
 public class WifiConfigController implements TextWatcher,
         AdapterView.OnItemSelectedListener, OnCheckedChangeListener,
diff --git a/src/com/android/settings/wifi/WifiConfigUiBase.java b/src/com/android/settings/wifi/WifiConfigUiBase.java
index 21ec894..30ec8b7 100644
--- a/src/com/android/settings/wifi/WifiConfigUiBase.java
+++ b/src/com/android/settings/wifi/WifiConfigUiBase.java
@@ -22,6 +22,9 @@
 
 /**
  * Foundation interface glues between Activities and UIs like {@link WifiDialog}.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in {@link WifiConfigUiBase2}.
  */
 public interface WifiConfigUiBase {
 
@@ -56,4 +59,4 @@
     public Button getSubmitButton();
     public Button getForgetButton();
     public Button getCancelButton();
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/wifi/WifiDialog.java b/src/com/android/settings/wifi/WifiDialog.java
index 2a4a664..9d0ab47 100644
--- a/src/com/android/settings/wifi/WifiDialog.java
+++ b/src/com/android/settings/wifi/WifiDialog.java
@@ -19,7 +19,6 @@
 import android.annotation.StyleRes;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;
@@ -33,6 +32,12 @@
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.wifi.AccessPoint;
 
+/**
+ * Dialog for users to edit a Wi-Fi network.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in {@link WifiDialog2}.
+ */
 public class WifiDialog extends AlertDialog implements WifiConfigUiBase,
         DialogInterface.OnClickListener {
 
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 581f202..1ba99a2 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -90,6 +90,9 @@
  *
  * The second is for Setup Wizard, with a simplified interface that hides the action bar
  * and menus.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in {@link WifiSettings2}.
  */
 @SearchIndexable
 public class WifiSettings extends RestrictedSettingsFragment
diff --git a/src/com/android/settings/wifi/details/AddDevicePreferenceController.java b/src/com/android/settings/wifi/details/AddDevicePreferenceController.java
index f2b3d75..2f4434a 100644
--- a/src/com/android/settings/wifi/details/AddDevicePreferenceController.java
+++ b/src/com/android/settings/wifi/details/AddDevicePreferenceController.java
@@ -25,11 +25,14 @@
 
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.wifi.dpp.WifiDppUtils;
-
 import com.android.settingslib.wifi.AccessPoint;
 
 /**
- * {@link BasePreferenceController} that launches Wi-Fi Easy Connect configurator flow
+ * {@link BasePreferenceController} that launches Wi-Fi Easy Connect configurator flow.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.details2.AddDevicePreferenceController2}.
  */
 public class AddDevicePreferenceController extends BasePreferenceController {
 
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index 01a29c6..7616c4b 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -99,6 +99,10 @@
 /**
  * Controller for logic pertaining to displaying Wifi information for the
  * {@link WifiNetworkDetailsFragment}.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.details2.WifiDetailPreferenceController2}.
  */
 public class WifiDetailPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, WifiDialogListener, LifecycleObserver, OnPause,
diff --git a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
index 5f4e9d0..0b2b47e 100644
--- a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
@@ -31,7 +31,11 @@
 import com.android.settingslib.core.AbstractPreferenceController;
 
 /**
- * {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
+ * {@link AbstractPreferenceController} that controls whether the wifi network is metered or not.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.details2.WifiMeteredPreferenceControlle2}.
  */
 public class WifiMeteredPreferenceController extends BasePreferenceController implements
         Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
index b645d60..8af9a7f 100644
--- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
+++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
@@ -46,6 +46,10 @@
  *
  * <p>The AccessPoint should be saved to the intent Extras when launching this class via
  * {@link AccessPoint#saveWifiState(Bundle)} in order to properly render this page.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.details2.WifiNetworkDetailsFragment2}.
  */
 public class WifiNetworkDetailsFragment extends DashboardFragment implements
         WifiDialog.WifiDialogListener {
diff --git a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
index eab0fa4..6658411 100644
--- a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
@@ -33,7 +33,11 @@
 
 /**
  * {@link AbstractPreferenceController} that controls whether the wifi network is mac randomized
- * or not
+ * or not.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.details2.WifiPrivacyPreferenceController2}.
  */
 public class WifiPrivacyPreferenceController extends BasePreferenceController implements
         Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
diff --git a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceController.java b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceController.java
index fc91f6b..397fb8b 100644
--- a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceController.java
+++ b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsPreferenceController.java
@@ -35,6 +35,10 @@
 
 /**
  * Controller that manages a PreferenceGroup, which contains a list of saved access points.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsPreferenceController2}.
  */
 public class SavedAccessPointsPreferenceController extends BasePreferenceController implements
         Preference.OnPreferenceClickListener {
diff --git a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
index 863e87a..262dce6 100644
--- a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
@@ -34,6 +34,10 @@
 
 /**
  * UI to manage saved networks/access points.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2}.
  */
 public class SavedAccessPointsWifiSettings extends DashboardFragment {
 
diff --git a/src/com/android/settings/wifi/savedaccesspoints/SubscribedAccessPointsPreferenceController.java b/src/com/android/settings/wifi/savedaccesspoints/SubscribedAccessPointsPreferenceController.java
index b86113e..23ba7c4 100644
--- a/src/com/android/settings/wifi/savedaccesspoints/SubscribedAccessPointsPreferenceController.java
+++ b/src/com/android/settings/wifi/savedaccesspoints/SubscribedAccessPointsPreferenceController.java
@@ -24,6 +24,10 @@
 
 /**
  * Controller that manages a PreferenceGroup, which contains a list of subscribed access points.
+ *
+ * Migrating from Wi-Fi SettingsLib to to WifiTrackerLib, this object will be removed in the near
+ * future, please develop in
+ * {@link com.android.settings.wifi.savedaccesspoints2.SubscribedAccessPointsPreferenceController2}.
  */
 public class SubscribedAccessPointsPreferenceController extends
         SavedAccessPointsPreferenceController {
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputGroupSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputGroupSliceTest.java
index 4fbcb2d..12e066b 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputGroupSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputGroupSliceTest.java
@@ -157,6 +157,12 @@
     }
 
     @Test
+    public void getSlice_nullWorker_noException() {
+        sMediaDeviceUpdateWorker = null;
+        mMediaOutputGroupSlice.getSlice();
+    }
+
+    @Test
     public void getSlice_withOneSelectableDevice_checkTitle() {
         mSelectableDevices.add(mDevice1);
         mSelectedDevices.add(mDevice1);
diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
index 1fc3910..855e2df 100644
--- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
+++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java
@@ -120,6 +120,8 @@
     public void getSlice_withConnectedDevice_verifyMetadata() {
         mDevices.add(mDevice1);
         when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
+                .getActiveLocalMediaController();
         doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
 
@@ -215,6 +217,30 @@
                 MediaOutputSliceConstants.KEY_MEDIA_SESSION_TOKEN) == null).isTrue();
     }
 
+    @Test
+    public void isVisible_allConditionMatched_returnTrue() {
+        mAudioManager.setMode(AudioManager.MODE_NORMAL);
+        mDevices.add(mDevice1);
+
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
+                .getActiveLocalMediaController();
+
+        assertThat(mMediaOutputIndicatorSlice.isVisible()).isTrue();
+    }
+
+    @Test
+    public void isVisible_noActiveSession_returnFalse() {
+        mAudioManager.setMode(AudioManager.MODE_NORMAL);
+        mDevices.add(mDevice1);
+
+        when(sMediaOutputIndicatorWorker.getMediaDevices()).thenReturn(mDevices);
+        doReturn(null).when(sMediaOutputIndicatorWorker)
+                .getActiveLocalMediaController();
+
+        assertThat(mMediaOutputIndicatorSlice.isVisible()).isFalse();
+    }
+
     @Implements(SliceBackgroundWorker.class)
     public static class ShadowSliceBackgroundWorker {