Merge "Toggle Home controls when user selects Home Control Panel Dream" into main
diff --git a/res/xml/dream_fragment_overview.xml b/res/xml/dream_fragment_overview.xml
index 6996908..fff6bfe 100644
--- a/res/xml/dream_fragment_overview.xml
+++ b/res/xml/dream_fragment_overview.xml
@@ -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" />
diff --git a/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java b/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java
index 0e777ec..e2c9f5e 100644
--- a/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java
+++ b/src/com/android/settings/dream/DreamHomeControlsPreferenceController.java
@@ -21,7 +21,6 @@
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 @@
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 @@
@Override
public void updateState(Preference preference) {
super.updateState(preference);
- preference.setEnabled(getAvailabilityStatus() == AVAILABLE);
refreshSummary(preference);
}
diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java
index 418bb64..4854fc6 100644
--- a/src/com/android/settings/dream/DreamSettings.java
+++ b/src/com/android/settings/dream/DreamSettings.java
@@ -25,6 +25,7 @@
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 @@
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 @@
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 @@
mDreamPickerController = dreamPickerController;
}
+ @VisibleForTesting
+ void setDreamHomeControlsPreferenceController(DreamHomeControlsPreferenceController
+ dreamHomeControlsPreferenceController) {
+ mDreamHomeControlsPreferenceController = dreamHomeControlsPreferenceController;
+ }
+
private void setAllPreferencesEnabled(boolean isEnabled) {
getPreferenceControllers().forEach(controllers -> {
controllers.forEach(controller -> {
@@ -171,6 +185,9 @@
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 @@
}
});
});
+ updateComplicationsToggleVisibility();
}
@Override
@@ -188,7 +206,10 @@
mComplicationsTogglePreference = findPreference(
DreamComplicationPreferenceController.PREF_KEY);
- updateComplicationsToggleVisibility();
+
+ mHomeControllerTogglePreference = findPreference(
+ DreamHomeControlsPreferenceController.PREF_KEY
+ );
mMainSwitchPreference = findPreference(MAIN_SWITCH_PREF_KEY);
if (mMainSwitchPreference != null) {
@@ -230,13 +251,29 @@
}
private void updateComplicationsToggleVisibility() {
- if (mDreamPickerController == null || mComplicationsTogglePreference == null) {
+ if (mDreamPickerController == null) {
return;
}
-
final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo();
- mComplicationsTogglePreference.setVisible(
- activeDream != null && activeDream.supportsComplications);
+
+ 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() {
diff --git a/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java
index 5773615..f172354 100644
--- a/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/dream/DreamHomeControlsPreferenceControllerTest.java
@@ -63,7 +63,7 @@
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);
diff --git a/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java b/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java
index 56dacdd..aeb3ba0 100644
--- a/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java
@@ -26,6 +26,7 @@
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 @@
@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 @@
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;
}