Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87873071 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix crash when starting daydream setting with wrong context"

parents 0f07f454 6269e50e
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -16,13 +16,15 @@

<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto"
    android:key="dream_overview_screen"
    android:title="@string/screensaver_settings_title">

    <com.android.settings.widget.GearPreference
        android:key="current_screensaver"
        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
        android:key="when_to_start"
+19 −22
Original line number Diff line number Diff line
@@ -18,9 +18,8 @@ package com.android.settings.dream;

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.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.dream.DreamBackend;
import com.android.settingslib.dream.DreamBackend.DreamInfo;

@@ -28,40 +27,38 @@ import java.util.Optional;

import androidx.preference.Preference;

public class CurrentDreamPreferenceController extends AbstractPreferenceController implements
        PreferenceControllerMixin {
public class CurrentDreamPreferenceController extends BasePreferenceController {

    private final DreamBackend mBackend;
    private final static String TAG = "CurrentDreamPreferenceController";
    private final static String CURRENT_SCREENSAVER = "current_screensaver";

    public CurrentDreamPreferenceController(Context context) {
        super(context);
    public CurrentDreamPreferenceController(Context context, String key) {
        super(context, key);
        mBackend = DreamBackend.getInstance(context);
    }

    @Override
    public boolean isAvailable() {
        return mBackend.getDreamInfos().size() > 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);
    }

    @Override
    public CharSequence getSummary() {
        return mBackend.getActiveDreamName();
    }

    private void setGearClickListenerForPreference(Preference preference) {
        if (!(preference instanceof GearPreference)) return;
        if (!(preference instanceof GearPreference)) {
            return;
        }

        GearPreference gearPreference = (GearPreference)preference;
        Optional<DreamInfo> info = getActiveDreamInfo();
        final GearPreference gearPreference = (GearPreference) preference;
        final Optional<DreamInfo> 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<DreamInfo> info = getActiveDreamInfo();
        final Optional<DreamInfo> info = getActiveDreamInfo();
        if (!info.isPresent()) return;
        mBackend.launchSettings(info.get());
        mBackend.launchSettings(mContext, info.get());
    }

    private Optional<DreamInfo> getActiveDreamInfo() {
+0 −1
Original line number Diff line number Diff line
@@ -132,7 +132,6 @@ public class DreamSettings extends DashboardFragment {

    private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
        List<AbstractPreferenceController> controllers = new ArrayList<>();
        controllers.add(new CurrentDreamPreferenceController(context));
        controllers.add(new WhenToDreamPreferenceController(context));
        controllers.add(new StartNowPreferenceController(context));
        return controllers;
+1 −1
Original line number Diff line number Diff line
@@ -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);
    }