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

Commit 5f35b280 authored by Prince Donkor's avatar Prince Donkor Committed by Android (Google) Code Review
Browse files

Merge "Toggle Home controls when user selects Home Control Panel Dream" into main

parents 22da08d8 8b02d17d
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -49,8 +49,7 @@
    <SwitchPreferenceCompat
        android:key="dream_home_controls_toggle"
        android:title="@string/dream_home_controls_toggle_title"
        android:summary="@string/dream_home_controls_toggle_summary"
        settings:controller="com.android.settings.dream.DreamHomeControlsPreferenceController"/>
        android:summary="@string/dream_home_controls_toggle_summary" />

    <com.android.settings.applications.SpacePreference
        android:layout_height="16dp" />
+3 −8
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.provider.Settings;

import androidx.preference.Preference;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.dream.DreamBackend;
@@ -33,14 +32,11 @@ import com.android.settingslib.dream.DreamBackend;
public class DreamHomeControlsPreferenceController extends TogglePreferenceController {
    private final DreamBackend mBackend;

    public DreamHomeControlsPreferenceController(Context context, String key) {
        this(context, key, DreamBackend.getInstance(context));
    }
    public static final String PREF_KEY = "dream_home_controls_toggle";

    @VisibleForTesting
    public DreamHomeControlsPreferenceController(Context context, String key,
    public DreamHomeControlsPreferenceController(Context context,
            DreamBackend dreamBackend) {
        super(context, key);
        super(context, PREF_KEY);
        mBackend = dreamBackend;
    }

@@ -57,7 +53,6 @@ public class DreamHomeControlsPreferenceController extends TogglePreferenceContr
    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        preference.setEnabled(getAvailabilityStatus() == AVAILABLE);
        refreshSummary(preference);
    }

+42 −5
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static com.android.settingslib.dream.DreamBackend.WHILE_DOCKED;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.service.dreams.DreamService;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -61,9 +62,11 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
    private MainSwitchPreference mMainSwitchPreference;
    private Button mPreviewButton;
    private Preference mComplicationsTogglePreference;
    private Preference mHomeControllerTogglePreference;
    private RecyclerView mRecyclerView;

    private DreamPickerController mDreamPickerController;
    private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController;

    private final DreamPickerController.Callback mCallback =
            this::updateComplicationsToggleVisibility;
@@ -139,7 +142,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
        if (mDreamPickerController == null) {
            mDreamPickerController = new DreamPickerController(context);
        }
        if (mDreamHomeControlsPreferenceController == null) {
            mDreamHomeControlsPreferenceController = new DreamHomeControlsPreferenceController(
                    context, DreamBackend.getInstance(getContext()));
        }
        controllers.add(mDreamPickerController);
        controllers.add(mDreamHomeControlsPreferenceController);
        controllers.add(new WhenToDreamPreferenceController(context));
        return controllers;
    }
@@ -164,6 +172,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
        mDreamPickerController = dreamPickerController;
    }

    @VisibleForTesting
    void setDreamHomeControlsPreferenceController(DreamHomeControlsPreferenceController
            dreamHomeControlsPreferenceController) {
        mDreamHomeControlsPreferenceController = dreamHomeControlsPreferenceController;
    }

    private void setAllPreferencesEnabled(boolean isEnabled) {
        getPreferenceControllers().forEach(controllers -> {
            controllers.forEach(controller -> {
@@ -171,6 +185,9 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
                if (prefKey.equals(MAIN_SWITCH_PREF_KEY)) {
                    return;
                }
                if (prefKey.equals(DreamHomeControlsPreferenceController.PREF_KEY)) {
                    return;
                }
                final Preference pref = findPreference(prefKey);
                if (pref != null) {
                    pref.setEnabled(isEnabled);
@@ -178,6 +195,7 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
                }
            });
        });
        updateComplicationsToggleVisibility();
    }

    @Override
@@ -188,7 +206,10 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL

        mComplicationsTogglePreference = findPreference(
                DreamComplicationPreferenceController.PREF_KEY);
        updateComplicationsToggleVisibility();

        mHomeControllerTogglePreference = findPreference(
                DreamHomeControlsPreferenceController.PREF_KEY
        );

        mMainSwitchPreference = findPreference(MAIN_SWITCH_PREF_KEY);
        if (mMainSwitchPreference != null) {
@@ -230,15 +251,31 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
    }

    private void updateComplicationsToggleVisibility() {
        if (mDreamPickerController == null || mComplicationsTogglePreference == null) {
        if (mDreamPickerController == null) {
            return;
        }

        final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo();

        final DreamBackend dreamBackend = DreamBackend.getInstance(getContext());


        if (mComplicationsTogglePreference != null) {
            mComplicationsTogglePreference.setVisible(
                    activeDream != null && activeDream.supportsComplications);
        }

        if (mHomeControllerTogglePreference != null) {
            boolean isEnabled = dreamBackend.isEnabled()
                                && (activeDream == null
                                || (activeDream.dreamCategory
                                & DreamService.DREAM_CATEGORY_HOME_PANEL) == 0)
                                && mDreamHomeControlsPreferenceController
                                    .getAvailabilityStatus()
                                    == mDreamHomeControlsPreferenceController.AVAILABLE;
            mHomeControllerTogglePreference.setEnabled(isEnabled);
        }
    }

    private void updatePaddingForPreviewButton() {
        mPreviewButton.post(() -> {
            mRecyclerView.setPadding(0, 0, 0, mPreviewButton.getMeasuredHeight());
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public class DreamHomeControlsPreferenceControllerTest {
        mContext = ApplicationProvider.getApplicationContext();
        mShadowContentResolver = Shadow.extract(mContext.getContentResolver());
        mBackend = new DreamBackend(mContext);
        mController = new DreamHomeControlsPreferenceController(mContext, "key", mBackend);
        mController = new DreamHomeControlsPreferenceController(mContext, mBackend);
        mPreference = new SwitchPreference(mContext);
        mPreference.setKey(mController.getPreferenceKey());
        when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
+104 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.when;

import android.content.Context;
import android.os.Bundle;
import android.service.dreams.DreamService;

import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
@@ -88,7 +89,11 @@ public class DreamSettingsTest {
    @Mock
    private Preference mComplicationsTogglePref;
    @Mock
    private Preference mHomeControllerTogglePref;
    @Mock
    private DreamPickerController mDreamPickerController;
    @Mock
    private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController;
    @Captor
    private ArgumentCaptor<DreamPickerController.Callback> mDreamPickerCallbackCaptor;

@@ -236,18 +241,116 @@ public class DreamSettingsTest {
        verify(mComplicationsTogglePref).setVisible(true);
    }

    @Test
    public void homeControlToggle_enableWhenDreamCategoryIsDefault() {
        MockitoAnnotations.initMocks(this);

        final Context context = ApplicationProvider.getApplicationContext();
        final DreamSettings dreamSettings = prepareDreamSettings(context);

         // Active dream does not support complications
        final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo();
        activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT;

        when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream);

        dreamSettings.onAttach(context);
        dreamSettings.onCreate(Bundle.EMPTY);

        verify(mHomeControllerTogglePref).setEnabled(true);
    }

    @Test
    public void homePanelToggle_disableWhenDreamCategoryIsHomePanel() {
        MockitoAnnotations.initMocks(this);

        final Context context = ApplicationProvider.getApplicationContext();
        final DreamSettings dreamSettings = prepareDreamSettings(context);

        // Active dream does not support complications
        final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo();
        activeDream.dreamCategory = DreamService.DREAM_CATEGORY_HOME_PANEL;

        when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream);

        dreamSettings.onAttach(context);
        dreamSettings.onCreate(Bundle.EMPTY);

        verify(mHomeControllerTogglePref).setEnabled(false);
    }

    @Test
    public void homePanelToggle_disableWhenSwitchingFromDefaultToHomePanel() {
        MockitoAnnotations.initMocks(this);

        final Context context = ApplicationProvider.getApplicationContext();
        final DreamSettings dreamSettings = prepareDreamSettings(context);


        // Active dream does not support complications
        final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo();
        activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT;

        when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream);

        dreamSettings.onAttach(context);
        dreamSettings.onCreate(Bundle.EMPTY);

        verify(mHomeControllerTogglePref).setEnabled(true);
        verify(mDreamPickerController).addCallback(mDreamPickerCallbackCaptor.capture());

        activeDream.dreamCategory = DreamService.DREAM_CATEGORY_HOME_PANEL;
        mDreamPickerCallbackCaptor.getValue().onActiveDreamChanged();
        verify(mHomeControllerTogglePref).setEnabled(false);
    }

    @Test
    public void homePanelToggle_showWhenSwitchingFromHomePanelToDefault() {
        MockitoAnnotations.initMocks(this);

        final Context context = ApplicationProvider.getApplicationContext();
        final DreamSettings dreamSettings = prepareDreamSettings(context);


        // Active dream does not support complications
        final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo();
        activeDream.dreamCategory = DreamService.DREAM_CATEGORY_HOME_PANEL;

        when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream);

        dreamSettings.onAttach(context);
        dreamSettings.onCreate(Bundle.EMPTY);

        verify(mHomeControllerTogglePref).setEnabled(false);
        verify(mDreamPickerController).addCallback(mDreamPickerCallbackCaptor.capture());

        activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT;
        mDreamPickerCallbackCaptor.getValue().onActiveDreamChanged();
        verify(mHomeControllerTogglePref).setEnabled(true);
    }

    private DreamSettings prepareDreamSettings(Context context) {
        final TestDreamSettings dreamSettings = new TestDreamSettings(context);
        when(mDreamPickerController.getPreferenceKey()).thenReturn(DreamPickerController.PREF_KEY);
        when(mDreamHomeControlsPreferenceController.getPreferenceKey())
                .thenReturn(DreamHomeControlsPreferenceController.PREF_KEY);
        when(mDreamPickerPref.getExtras()).thenReturn(new Bundle());
        when(mDreamPickerPref.getKey()).thenReturn(DreamPickerController.PREF_KEY);
        when(mComplicationsTogglePref.getKey()).thenReturn(
                DreamComplicationPreferenceController.PREF_KEY);

        when(mHomeControllerTogglePref.getExtras()).thenReturn(new Bundle());
        when(mHomeControllerTogglePref.getKey()).thenReturn(
                DreamHomeControlsPreferenceController.PREF_KEY);
        when(mDreamHomeControlsPreferenceController.getAvailabilityStatus())
                .thenReturn(mDreamHomeControlsPreferenceController.AVAILABLE);
        dreamSettings.addPreference(DreamPickerController.PREF_KEY, mDreamPickerPref);
        dreamSettings.addPreference(DreamComplicationPreferenceController.PREF_KEY,
                mComplicationsTogglePref);
        dreamSettings.addPreference(DreamHomeControlsPreferenceController.PREF_KEY,
                mHomeControllerTogglePref);
        dreamSettings.setDreamPickerController(mDreamPickerController);
        dreamSettings
                .setDreamHomeControlsPreferenceController(mDreamHomeControlsPreferenceController);

        return dreamSettings;
    }