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
This commit is contained in:
@@ -16,13 +16,15 @@
|
|||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
android:key="dream_overview_screen"
|
android:key="dream_overview_screen"
|
||||||
android:title="@string/screensaver_settings_title" >
|
android:title="@string/screensaver_settings_title">
|
||||||
|
|
||||||
<com.android.settings.widget.GearPreference
|
<com.android.settings.widget.GearPreference
|
||||||
android:key="current_screensaver"
|
android:key="current_screensaver"
|
||||||
android:title="@string/screensaver_settings_current"
|
android:title="@string/screensaver_settings_current"
|
||||||
android:fragment="com.android.settings.dream.CurrentDreamPicker" />
|
android:fragment="com.android.settings.dream.CurrentDreamPicker"
|
||||||
|
settings:controller="com.android.settings.dream.CurrentDreamPreferenceController" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="when_to_start"
|
android:key="when_to_start"
|
||||||
|
@@ -18,9 +18,8 @@ package com.android.settings.dream;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.widget.GearPreference;
|
import com.android.settings.widget.GearPreference;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
|
||||||
import com.android.settingslib.dream.DreamBackend;
|
import com.android.settingslib.dream.DreamBackend;
|
||||||
import com.android.settingslib.dream.DreamBackend.DreamInfo;
|
import com.android.settingslib.dream.DreamBackend.DreamInfo;
|
||||||
|
|
||||||
@@ -28,40 +27,38 @@ import java.util.Optional;
|
|||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
public class CurrentDreamPreferenceController extends AbstractPreferenceController implements
|
public class CurrentDreamPreferenceController extends BasePreferenceController {
|
||||||
PreferenceControllerMixin {
|
|
||||||
private final DreamBackend mBackend;
|
|
||||||
private final static String TAG = "CurrentDreamPreferenceController";
|
|
||||||
private final static String CURRENT_SCREENSAVER = "current_screensaver";
|
|
||||||
|
|
||||||
public CurrentDreamPreferenceController(Context context) {
|
private final DreamBackend mBackend;
|
||||||
super(context);
|
|
||||||
|
public CurrentDreamPreferenceController(Context context, String key) {
|
||||||
|
super(context, key);
|
||||||
mBackend = DreamBackend.getInstance(context);
|
mBackend = DreamBackend.getInstance(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAvailable() {
|
public int getAvailabilityStatus() {
|
||||||
return mBackend.getDreamInfos().size() > 0;
|
return mBackend.getDreamInfos().size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return CURRENT_SCREENSAVER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(preference);
|
super.updateState(preference);
|
||||||
|
|
||||||
preference.setSummary(mBackend.getActiveDreamName());
|
|
||||||
setGearClickListenerForPreference(preference);
|
setGearClickListenerForPreference(preference);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setGearClickListenerForPreference(Preference preference) {
|
@Override
|
||||||
if (!(preference instanceof GearPreference)) return;
|
public CharSequence getSummary() {
|
||||||
|
return mBackend.getActiveDreamName();
|
||||||
|
}
|
||||||
|
|
||||||
GearPreference gearPreference = (GearPreference)preference;
|
private void setGearClickListenerForPreference(Preference preference) {
|
||||||
Optional<DreamInfo> info = getActiveDreamInfo();
|
if (!(preference instanceof GearPreference)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final GearPreference gearPreference = (GearPreference) preference;
|
||||||
|
final Optional<DreamInfo> info = getActiveDreamInfo();
|
||||||
if (!info.isPresent() || info.get().settingsComponentName == null) {
|
if (!info.isPresent() || info.get().settingsComponentName == null) {
|
||||||
gearPreference.setOnGearClickListener(null);
|
gearPreference.setOnGearClickListener(null);
|
||||||
return;
|
return;
|
||||||
@@ -70,9 +67,9 @@ public class CurrentDreamPreferenceController extends AbstractPreferenceControll
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void launchScreenSaverSettings() {
|
private void launchScreenSaverSettings() {
|
||||||
Optional<DreamInfo> info = getActiveDreamInfo();
|
final Optional<DreamInfo> info = getActiveDreamInfo();
|
||||||
if (!info.isPresent()) return;
|
if (!info.isPresent()) return;
|
||||||
mBackend.launchSettings(info.get());
|
mBackend.launchSettings(mContext, info.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<DreamInfo> getActiveDreamInfo() {
|
private Optional<DreamInfo> getActiveDreamInfo() {
|
||||||
|
@@ -132,7 +132,6 @@ public class DreamSettings extends DashboardFragment {
|
|||||||
|
|
||||||
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
|
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
|
||||||
List<AbstractPreferenceController> controllers = new ArrayList<>();
|
List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
controllers.add(new CurrentDreamPreferenceController(context));
|
|
||||||
controllers.add(new WhenToDreamPreferenceController(context));
|
controllers.add(new WhenToDreamPreferenceController(context));
|
||||||
controllers.add(new StartNowPreferenceController(context));
|
controllers.add(new StartNowPreferenceController(context));
|
||||||
return controllers;
|
return controllers;
|
||||||
|
@@ -56,7 +56,7 @@ public class CurrentDreamPreferenceControllerTest {
|
|||||||
public void setup() {
|
public void setup() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mController = new CurrentDreamPreferenceController(mContext);
|
mController = new CurrentDreamPreferenceController(mContext, "test");
|
||||||
ReflectionHelpers.setField(mController, "mBackend", mBackend);
|
ReflectionHelpers.setField(mController, "mBackend", mBackend);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user