From 6269e50e8efeffd0499099aca354dea906cda4d8 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 12 Jul 2018 13:22:23 -0700 Subject: [PATCH] Fix crash when starting daydream setting with wrong context The context must be a UI context. This is a new requirement in P. (Also converted the CurrentDream controller to be slice compatible) Change-Id: I28874f296da617f4cedf6706b0663b76671f1780 Fixes: 111375261 Test: robotests --- res/xml/dream_fragment_overview.xml | 6 ++- .../CurrentDreamPreferenceController.java | 45 +++++++++---------- .../android/settings/dream/DreamSettings.java | 1 - .../CurrentDreamPreferenceControllerTest.java | 2 +- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/res/xml/dream_fragment_overview.xml b/res/xml/dream_fragment_overview.xml index ba689c7c7aa..a6214d18a17 100644 --- a/res/xml/dream_fragment_overview.xml +++ b/res/xml/dream_fragment_overview.xml @@ -16,13 +16,15 @@ + android:title="@string/screensaver_settings_title"> + android:fragment="com.android.settings.dream.CurrentDreamPicker" + settings:controller="com.android.settings.dream.CurrentDreamPreferenceController" /> 0; - } - - @Override - public String getPreferenceKey() { - return CURRENT_SCREENSAVER; + public int getAvailabilityStatus() { + return mBackend.getDreamInfos().size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public void updateState(Preference preference) { super.updateState(preference); - - preference.setSummary(mBackend.getActiveDreamName()); setGearClickListenerForPreference(preference); } - private void setGearClickListenerForPreference(Preference preference) { - if (!(preference instanceof GearPreference)) return; + @Override + public CharSequence getSummary() { + return mBackend.getActiveDreamName(); + } - GearPreference gearPreference = (GearPreference)preference; - Optional info = getActiveDreamInfo(); + private void setGearClickListenerForPreference(Preference preference) { + if (!(preference instanceof GearPreference)) { + return; + } + + final GearPreference gearPreference = (GearPreference) preference; + final Optional info = getActiveDreamInfo(); if (!info.isPresent() || info.get().settingsComponentName == null) { gearPreference.setOnGearClickListener(null); return; @@ -70,9 +67,9 @@ public class CurrentDreamPreferenceController extends AbstractPreferenceControll } private void launchScreenSaverSettings() { - Optional info = getActiveDreamInfo(); + final Optional info = getActiveDreamInfo(); if (!info.isPresent()) return; - mBackend.launchSettings(info.get()); + mBackend.launchSettings(mContext, info.get()); } private Optional getActiveDreamInfo() { diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java index 9c9566e3e77..9a46b1e04d8 100644 --- a/src/com/android/settings/dream/DreamSettings.java +++ b/src/com/android/settings/dream/DreamSettings.java @@ -132,7 +132,6 @@ public class DreamSettings extends DashboardFragment { private static List buildPreferenceControllers(Context context) { List controllers = new ArrayList<>(); - controllers.add(new CurrentDreamPreferenceController(context)); controllers.add(new WhenToDreamPreferenceController(context)); controllers.add(new StartNowPreferenceController(context)); return controllers; diff --git a/tests/robotests/src/com/android/settings/dream/CurrentDreamPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/CurrentDreamPreferenceControllerTest.java index 44199404d73..74847ee0ed6 100644 --- a/tests/robotests/src/com/android/settings/dream/CurrentDreamPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/dream/CurrentDreamPreferenceControllerTest.java @@ -56,7 +56,7 @@ public class CurrentDreamPreferenceControllerTest { public void setup() { MockitoAnnotations.initMocks(this); - mController = new CurrentDreamPreferenceController(mContext); + mController = new CurrentDreamPreferenceController(mContext, "test"); ReflectionHelpers.setField(mController, "mBackend", mBackend); }