Merge "Fix the ExpandDividerPreference will flash one time in some corner cases" into sc-v2-dev
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/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/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 */,