Merge "Update the LE audio device into the media device category"
diff --git a/res/layout/manage_applications_apps.xml b/res/layout/manage_applications_apps.xml
index f8f4a76..a9cd72a 100644
--- a/res/layout/manage_applications_apps.xml
+++ b/res/layout/manage_applications_apps.xml
@@ -32,7 +32,10 @@
         settings:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
         settings:fastScrollVerticalThumbDrawable="@drawable/thumb_drawable"
         settings:fastScrollVerticalTrackDrawable="@drawable/line_drawable"
-        settings:layout_constraintTop_toBottomOf="@id/pinned_header"/>
+        settings:layout_constrainedHeight="true"
+        settings:layout_constraintVertical_bias="0.0"
+        settings:layout_constraintTop_toBottomOf="@id/pinned_header"
+        settings:layout_constraintBottom_toBottomOf="parent"/>
 
     <TextView
         android:id="@android:id/empty"
@@ -55,7 +58,10 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="?android:colorBackground"
-        settings:layout_constraintTop_toTopOf="parent"/>
+        settings:layout_constraintVertical_chainStyle="packed"
+        settings:layout_constraintVertical_bias="0.0"
+        settings:layout_constraintTop_toTopOf="parent"
+        settings:layout_constraintBottom_toTopOf="@id/apps_list"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>
 
diff --git a/res/layout/preference_expand_divider.xml b/res/layout/preference_expand_divider.xml
index 164419a..ce3d2e7 100644
--- a/res/layout/preference_expand_divider.xml
+++ b/res/layout/preference_expand_divider.xml
@@ -26,9 +26,7 @@
     android:paddingRight="?android:attr/listPreferredItemPaddingRight"
     android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
     android:background="?android:attr/selectableItemBackground"
-    android:orientation="horizontal"
-    android:clipToPadding="false"
-    android:baselineAligned="false">
+    android:orientation="horizontal">
 
     <TextView
         android:id="@+id/expand_title"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e9b3fa4..77121a3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13626,8 +13626,10 @@
     <string name="camera_toggle_title">Camera access</string>
     <!-- Label for the camera use toggle [CHAR LIMIT=40] -->
     <string name="mic_toggle_title">Microphone access</string>
-    <!-- Describes what is affected by the camera or mic toggle [CHAR LIMIT=NONE] -->
-    <string name="sensor_toggle_description">For all apps and services</string>
+    <!-- Describes what is affected by the camera toggle [CHAR LIMIT=NONE] -->
+    <string name="cam_toggle_description">For apps and services</string>
+    <!-- Describes what is affected by the mic toggle [CHAR LIMIT=NONE] -->
+    <string name="mic_toggle_description">For apps and services. If this setting is off, microphone data may still be shared when you call an emergency number.</string>
 
     <!-- Title for Game settings entry. [CHAR_LIMIT=NONE] -->
     <string name="game_settings_title">Game settings</string>
diff --git a/res/xml/privacy_dashboard_settings.xml b/res/xml/privacy_dashboard_settings.xml
index 236df5e..cd7d798 100644
--- a/res/xml/privacy_dashboard_settings.xml
+++ b/res/xml/privacy_dashboard_settings.xml
@@ -67,14 +67,14 @@
     <com.android.settingslib.RestrictedSwitchPreference
         android:key="privacy_camera_toggle"
         android:title="@string/camera_toggle_title"
-        android:summary="@string/sensor_toggle_description"
+        android:summary="@string/cam_toggle_description"
         settings:controller="com.android.settings.privacy.CameraToggleController"/>
 
     <!-- Microphone toggle -->
     <com.android.settingslib.RestrictedSwitchPreference
         android:key="privacy_mic_toggle"
         android:title="@string/mic_toggle_title"
-        android:summary="@string/sensor_toggle_description"
+        android:summary="@string/mic_toggle_description"
         settings:controller="com.android.settings.privacy.MicToggleController"/>
 
     <!-- Show passwords -->
diff --git a/src/com/android/settings/SettingsApplication.java b/src/com/android/settings/SettingsApplication.java
index 7aa5af8..a2f723e 100644
--- a/src/com/android/settings/SettingsApplication.java
+++ b/src/com/android/settings/SettingsApplication.java
@@ -16,13 +16,18 @@
 
 package com.android.settings;
 
+import android.app.Activity;
 import android.app.Application;
 
 import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
 
+import java.lang.ref.WeakReference;
+
 /** Settings application which sets up activity embedding rules for the large screen device. */
 public class SettingsApplication extends Application {
 
+    private WeakReference<Activity> mHomeActivity = new WeakReference<>(null);
+
     @Override
     public void onCreate() {
         super.onCreate();
@@ -31,4 +36,12 @@
                 new ActivityEmbeddingRulesController(this);
         controller.initRules();
     }
+
+    public void setHomeActivity(Activity homeActivity) {
+        mHomeActivity = new WeakReference<>(homeActivity);
+    }
+
+    public Activity getHomeActivity() {
+        return mHomeActivity.get();
+    }
 }
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java b/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java
index 7585dce..7645643 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingProvider.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.activityembedding;
 
+import android.app.Activity;
 import android.content.ContentProvider;
 import android.content.ContentValues;
 import android.database.Cursor;
@@ -23,13 +24,17 @@
 import android.os.Bundle;
 import android.text.TextUtils;
 
+import com.android.settings.SettingsApplication;
+
 /**
  * A content provider for querying the state of activity embedding feature
  */
 public class ActivityEmbeddingProvider extends ContentProvider {
 
     private static final String METHOD_IS_EMBEDDING_ACTIVITY_ENABLED = "isEmbeddingActivityEnabled";
+    private static final String METHOD_IS_IN_SETTINGS_TWO_PANE = "isInSettingsTwoPane";
     private static final String EXTRA_ENABLED_STATE = "enabled_state";
+    private static final String EXTRA_TWO_PANE_STATE = "two_pane_state";
 
     @Override
     public boolean onCreate() {
@@ -43,6 +48,14 @@
             bundle.putBoolean(EXTRA_ENABLED_STATE,
                     ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext()));
             return bundle;
+        } else if (TextUtils.equals(method, METHOD_IS_IN_SETTINGS_TWO_PANE)) {
+            final Activity homeActivity =
+                    ((SettingsApplication) getContext().getApplicationContext()).getHomeActivity();
+            final Bundle bundle = new Bundle();
+            bundle.putBoolean(EXTRA_TWO_PANE_STATE,
+                    homeActivity == null ? false
+                            : ActivityEmbeddingUtils.isTwoPaneResolution(homeActivity));
+            return bundle;
         }
         return null;
     }
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
index 7ecacde..ac3a01d 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
@@ -16,7 +16,10 @@
 
 package com.android.settings.activityembedding;
 
+import android.app.Activity;
+import android.app.ActivityTaskManager;
 import android.content.Context;
+import android.graphics.Rect;
 import android.util.DisplayMetrics;
 import android.util.FeatureFlagUtils;
 import android.util.Log;
@@ -64,10 +67,11 @@
     }
 
     /** Whether the screen meets two-pane resolution. */
-    public static boolean isTwoPaneResolution(Context context) {
-        final Context appContext = context.getApplicationContext();
-        final DisplayMetrics dm = appContext.getResources().getDisplayMetrics();
-        return dm.widthPixels >= getMinCurrentScreenSplitWidthPx(appContext)
-                && dm.heightPixels >= getMinSmallestScreenSplitWidthPx(appContext);
+    public static boolean isTwoPaneResolution(Activity activity) {
+        final Rect currentTaskBounds =
+                ActivityTaskManager.getInstance().getTaskBounds(activity.getTaskId());
+
+        return currentTaskBounds.width() >= getMinCurrentScreenSplitWidthPx(activity)
+                && currentTaskBounds.height() >= getMinSmallestScreenSplitWidthPx(activity);
     }
 }
diff --git a/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java b/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
index 43c377a..88ce786 100644
--- a/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
+++ b/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
@@ -105,6 +105,11 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (mAppEntry == null) {
+            Log.w(TAG, "onCreate: mAppEntry is null, please check the reason!!!");
+            getActivity().finish();
+            return;
+        }
         addPreferencesFromResource(R.xml.installed_app_launch_settings);
         mDomainVerificationManager = mContext.getSystemService(DomainVerificationManager.class);
         initUIComponents();
diff --git a/src/com/android/settings/fuelgauge/ExpandDividerPreference.java b/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
index b89f2d4..4517177 100644
--- a/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
+++ b/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
@@ -65,8 +65,7 @@
 
     @Override
     public void onClick() {
-        mIsExpanded = !mIsExpanded;
-        refreshState();
+        setIsExpanded(!mIsExpanded);
         if (mOnExpandListener != null) {
             mOnExpandListener.onExpand(mIsExpanded);
         }
@@ -74,10 +73,7 @@
 
     void setTitle(final String titleContent) {
         mTitleContent = titleContent;
-        if (mTextView != null) {
-            mTextView.postDelayed(
-                () -> mTextView.setText(titleContent), 50);
-        }
+        refreshState();
     }
 
     void setIsExpanded(boolean isExpanded) {
@@ -90,13 +86,13 @@
     }
 
     private void refreshState() {
-        final int iconId =
-            mIsExpanded
-                ? R.drawable.ic_settings_expand_less
-                : R.drawable.ic_settings_expand_more;
         if (mImageView != null) {
-            mImageView.setImageResource(iconId);
+            mImageView.setImageResource(mIsExpanded
+                    ? R.drawable.ic_settings_expand_less
+                    : R.drawable.ic_settings_expand_more);
         }
-        setTitle(mTitleContent);
+        if (mTextView != null) {
+            mTextView.setText(mTitleContent);
+        }
     }
 }
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index ec3589c..a2a6d3c 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -42,6 +42,7 @@
 import com.android.settings.R;
 import com.android.settings.Settings;
 import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsApplication;
 import com.android.settings.Utils;
 import com.android.settings.accounts.AvatarViewMixin;
 import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
@@ -95,6 +96,7 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        ((SettingsApplication) getApplication()).setHomeActivity(this);
         setContentView(R.layout.settings_homepage_container);
 
         final View appBar = findViewById(R.id.app_bar_container);
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index a819b87..38b2baa 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -196,8 +196,8 @@
         }
 
         Log.d(TAG, "onCreateAdapter, pref key: " + mHighlightedPreferenceKey);
-        mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(preferenceScreen,
-                getListView(), mHighlightedPreferenceKey);
+        mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
+                getActivity(), preferenceScreen, getListView(), mHighlightedPreferenceKey);
         return mTopLevelAdapter;
     }
 
diff --git a/src/com/android/settings/network/apn/ApnEditor.java b/src/com/android/settings/network/apn/ApnEditor.java
index 0b75162..03db1b8 100644
--- a/src/com/android/settings/network/apn/ApnEditor.java
+++ b/src/com/android/settings/network/apn/ApnEditor.java
@@ -1256,7 +1256,8 @@
             if (!readOnlyApnTypes.contains(apnType)
                     && !apnType.equals(APN_TYPE_IA)
                     && !apnType.equals(APN_TYPE_EMERGENCY)
-                    && !apnType.equals(APN_TYPE_MCX)) {
+                    && !apnType.equals(APN_TYPE_MCX)
+                    && !apnType.equals(APN_TYPE_IMS)) {
                 if (first) {
                     first = false;
                 } else {
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index 894eb68..658f650 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -509,12 +509,15 @@
         if (carrierConfig.getBoolean(CarrierConfigManager.KEY_SUPPORT_TDSCDMA_BOOL)) {
             return true;
         }
+        final String[] numericArray = carrierConfig.getStringArray(
+                CarrierConfigManager.KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY);
+        if (numericArray == null) {
+            return false;
+        }
         final ServiceState serviceState = telephonyManager.getServiceState();
         final String operatorNumeric =
                 (serviceState != null) ? serviceState.getOperatorNumeric() : null;
-        final String[] numericArray = carrierConfig.getStringArray(
-                CarrierConfigManager.KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY);
-        if (numericArray == null || operatorNumeric == null) {
+        if (operatorNumeric == null) {
             return false;
         }
         for (String numeric : numericArray) {
diff --git a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
index eeaad21..19a91f6 100644
--- a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
+++ b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.widget;
 
+import android.app.Activity;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
@@ -53,6 +54,7 @@
     final int mIconColorHighlight;
 
     private final Context mContext;
+    private final Activity mActivity;
     private final RecyclerView mRecyclerView;
     private final int mNormalBackgroundRes;
     private String mHighlightKey;
@@ -61,12 +63,13 @@
     private boolean mHighlightNeeded;
     private boolean mScrolled;
 
-    public HighlightableTopLevelPreferenceAdapter(PreferenceGroup preferenceGroup,
-            RecyclerView recyclerView, String key) {
+    public HighlightableTopLevelPreferenceAdapter(Activity activity,
+            PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key) {
         super(preferenceGroup);
         mRecyclerView = recyclerView;
         mHighlightKey = key;
         mContext = preferenceGroup.getContext();
+        mActivity = activity;
         final TypedValue outValue = new TypedValue();
         mContext.getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
                 outValue, true /* resolveRefs */);
@@ -233,6 +236,6 @@
     }
 
     private boolean isHighlightNeeded() {
-        return ActivityEmbeddingUtils.isTwoPaneResolution(mContext);
+        return ActivityEmbeddingUtils.isTwoPaneResolution(mActivity);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/MainClearTest.java b/tests/robotests/src/com/android/settings/MainClearTest.java
index ec33fad..e2a7ca9 100644
--- a/tests/robotests/src/com/android/settings/MainClearTest.java
+++ b/tests/robotests/src/com/android/settings/MainClearTest.java
@@ -55,6 +55,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -208,6 +209,7 @@
     }
 
     @Test
+    @Ignore
     public void testShowWipeEuicc_euiccEnabled_unprovisioned() {
         prepareEuiccState(
                 true /* isEuiccEnabled */,
@@ -226,6 +228,7 @@
     }
 
     @Test
+    @Ignore
     public void testShowWipeEuicc_developerMode_unprovisioned() {
         prepareEuiccState(
                 true /* isEuiccEnabled */,
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
index 97af282..9e32da4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
@@ -18,11 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -36,8 +32,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
@@ -52,7 +46,6 @@
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         mImageView = spy(new ImageView(mContext));
         mTextView = spy(new TextView(mContext));
@@ -64,9 +57,9 @@
     @Test
     public void testConstructor_returnExpectedResult() {
         assertThat(mExpandDividerPreference.getKey())
-            .isEqualTo(ExpandDividerPreference.PREFERENCE_KEY);
+                .isEqualTo(ExpandDividerPreference.PREFERENCE_KEY);
         assertThat(mExpandDividerPreference.getLayoutResource())
-            .isEqualTo(R.layout.preference_expand_divider);
+                .isEqualTo(R.layout.preference_expand_divider);
     }
 
     @Test
@@ -75,9 +68,7 @@
         mExpandDividerPreference.mTextView = mTextView;
 
         mExpandDividerPreference.setTitle(titleContent);
-        final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
-        verify(mTextView).postDelayed(captor.capture(), eq(50L));
-        captor.getValue().run();
+
         verify(mTextView).setText(titleContent);
     }
 
@@ -86,7 +77,7 @@
         final boolean[] isExpandedArray = new boolean[] {false};
         mExpandDividerPreference.mImageView = mImageView;
         mExpandDividerPreference.setOnExpandListener(
-            isExpanded -> isExpandedArray[0] = isExpanded);
+                isExpanded -> isExpandedArray[0] = isExpanded);
 
         // Click the item first time from false -> true.
         mExpandDividerPreference.onClick();
@@ -106,7 +97,7 @@
         final boolean[] isExpandedArray = new boolean[] {false};
         mExpandDividerPreference.mImageView = mImageView;
         mExpandDividerPreference.setOnExpandListener(
-            isExpanded -> isExpandedArray[0] = isExpanded);
+                isExpanded -> isExpandedArray[0] = isExpanded);
 
         mExpandDividerPreference.setIsExpanded(true);