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 */,