Toggle Home controls when user selects Home Control Panel Dream
Test: DreamSettingsTest Flag: ACONFIG android.service.controls.flags.home_panel_dream STAGING Fixes: 323887821 Change-Id: Iba7c2ff41e3e0074a28f96c4e5fa1028b80f7a92
This commit is contained in:
@@ -49,8 +49,7 @@
|
|||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
android:key="dream_home_controls_toggle"
|
android:key="dream_home_controls_toggle"
|
||||||
android:title="@string/dream_home_controls_toggle_title"
|
android:title="@string/dream_home_controls_toggle_title"
|
||||||
android:summary="@string/dream_home_controls_toggle_summary"
|
android:summary="@string/dream_home_controls_toggle_summary" />
|
||||||
settings:controller="com.android.settings.dream.DreamHomeControlsPreferenceController"/>
|
|
||||||
|
|
||||||
<com.android.settings.applications.SpacePreference
|
<com.android.settings.applications.SpacePreference
|
||||||
android:layout_height="16dp" />
|
android:layout_height="16dp" />
|
||||||
|
@@ -21,7 +21,6 @@ import android.provider.Settings;
|
|||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
import com.android.settingslib.dream.DreamBackend;
|
import com.android.settingslib.dream.DreamBackend;
|
||||||
@@ -33,14 +32,11 @@ import com.android.settingslib.dream.DreamBackend;
|
|||||||
public class DreamHomeControlsPreferenceController extends TogglePreferenceController {
|
public class DreamHomeControlsPreferenceController extends TogglePreferenceController {
|
||||||
private final DreamBackend mBackend;
|
private final DreamBackend mBackend;
|
||||||
|
|
||||||
public DreamHomeControlsPreferenceController(Context context, String key) {
|
public static final String PREF_KEY = "dream_home_controls_toggle";
|
||||||
this(context, key, DreamBackend.getInstance(context));
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
public DreamHomeControlsPreferenceController(Context context,
|
||||||
public DreamHomeControlsPreferenceController(Context context, String key,
|
|
||||||
DreamBackend dreamBackend) {
|
DreamBackend dreamBackend) {
|
||||||
super(context, key);
|
super(context, PREF_KEY);
|
||||||
mBackend = dreamBackend;
|
mBackend = dreamBackend;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +53,6 @@ public class DreamHomeControlsPreferenceController extends TogglePreferenceContr
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(preference);
|
super.updateState(preference);
|
||||||
preference.setEnabled(getAvailabilityStatus() == AVAILABLE);
|
|
||||||
refreshSummary(preference);
|
refreshSummary(preference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -25,6 +25,7 @@ import static com.android.settingslib.dream.DreamBackend.WHILE_DOCKED;
|
|||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.service.dreams.DreamService;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@@ -61,9 +62,11 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
|
|||||||
private MainSwitchPreference mMainSwitchPreference;
|
private MainSwitchPreference mMainSwitchPreference;
|
||||||
private Button mPreviewButton;
|
private Button mPreviewButton;
|
||||||
private Preference mComplicationsTogglePreference;
|
private Preference mComplicationsTogglePreference;
|
||||||
|
private Preference mHomeControllerTogglePreference;
|
||||||
private RecyclerView mRecyclerView;
|
private RecyclerView mRecyclerView;
|
||||||
|
|
||||||
private DreamPickerController mDreamPickerController;
|
private DreamPickerController mDreamPickerController;
|
||||||
|
private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController;
|
||||||
|
|
||||||
private final DreamPickerController.Callback mCallback =
|
private final DreamPickerController.Callback mCallback =
|
||||||
this::updateComplicationsToggleVisibility;
|
this::updateComplicationsToggleVisibility;
|
||||||
@@ -139,7 +142,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
|
|||||||
if (mDreamPickerController == null) {
|
if (mDreamPickerController == null) {
|
||||||
mDreamPickerController = new DreamPickerController(context);
|
mDreamPickerController = new DreamPickerController(context);
|
||||||
}
|
}
|
||||||
|
if (mDreamHomeControlsPreferenceController == null) {
|
||||||
|
mDreamHomeControlsPreferenceController = new DreamHomeControlsPreferenceController(
|
||||||
|
context, DreamBackend.getInstance(getContext()));
|
||||||
|
}
|
||||||
controllers.add(mDreamPickerController);
|
controllers.add(mDreamPickerController);
|
||||||
|
controllers.add(mDreamHomeControlsPreferenceController);
|
||||||
controllers.add(new WhenToDreamPreferenceController(context));
|
controllers.add(new WhenToDreamPreferenceController(context));
|
||||||
return controllers;
|
return controllers;
|
||||||
}
|
}
|
||||||
@@ -164,6 +172,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
|
|||||||
mDreamPickerController = dreamPickerController;
|
mDreamPickerController = dreamPickerController;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
void setDreamHomeControlsPreferenceController(DreamHomeControlsPreferenceController
|
||||||
|
dreamHomeControlsPreferenceController) {
|
||||||
|
mDreamHomeControlsPreferenceController = dreamHomeControlsPreferenceController;
|
||||||
|
}
|
||||||
|
|
||||||
private void setAllPreferencesEnabled(boolean isEnabled) {
|
private void setAllPreferencesEnabled(boolean isEnabled) {
|
||||||
getPreferenceControllers().forEach(controllers -> {
|
getPreferenceControllers().forEach(controllers -> {
|
||||||
controllers.forEach(controller -> {
|
controllers.forEach(controller -> {
|
||||||
@@ -171,6 +185,9 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
|
|||||||
if (prefKey.equals(MAIN_SWITCH_PREF_KEY)) {
|
if (prefKey.equals(MAIN_SWITCH_PREF_KEY)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (prefKey.equals(DreamHomeControlsPreferenceController.PREF_KEY)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
final Preference pref = findPreference(prefKey);
|
final Preference pref = findPreference(prefKey);
|
||||||
if (pref != null) {
|
if (pref != null) {
|
||||||
pref.setEnabled(isEnabled);
|
pref.setEnabled(isEnabled);
|
||||||
@@ -178,6 +195,7 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
updateComplicationsToggleVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -188,7 +206,10 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
|
|||||||
|
|
||||||
mComplicationsTogglePreference = findPreference(
|
mComplicationsTogglePreference = findPreference(
|
||||||
DreamComplicationPreferenceController.PREF_KEY);
|
DreamComplicationPreferenceController.PREF_KEY);
|
||||||
updateComplicationsToggleVisibility();
|
|
||||||
|
mHomeControllerTogglePreference = findPreference(
|
||||||
|
DreamHomeControlsPreferenceController.PREF_KEY
|
||||||
|
);
|
||||||
|
|
||||||
mMainSwitchPreference = findPreference(MAIN_SWITCH_PREF_KEY);
|
mMainSwitchPreference = findPreference(MAIN_SWITCH_PREF_KEY);
|
||||||
if (mMainSwitchPreference != null) {
|
if (mMainSwitchPreference != null) {
|
||||||
@@ -230,15 +251,31 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateComplicationsToggleVisibility() {
|
private void updateComplicationsToggleVisibility() {
|
||||||
if (mDreamPickerController == null || mComplicationsTogglePreference == null) {
|
if (mDreamPickerController == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo();
|
final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo();
|
||||||
|
|
||||||
|
final DreamBackend dreamBackend = DreamBackend.getInstance(getContext());
|
||||||
|
|
||||||
|
|
||||||
|
if (mComplicationsTogglePreference != null) {
|
||||||
mComplicationsTogglePreference.setVisible(
|
mComplicationsTogglePreference.setVisible(
|
||||||
activeDream != null && activeDream.supportsComplications);
|
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() {
|
private void updatePaddingForPreviewButton() {
|
||||||
mPreviewButton.post(() -> {
|
mPreviewButton.post(() -> {
|
||||||
mRecyclerView.setPadding(0, 0, 0, mPreviewButton.getMeasuredHeight());
|
mRecyclerView.setPadding(0, 0, 0, mPreviewButton.getMeasuredHeight());
|
||||||
|
@@ -63,7 +63,7 @@ public class DreamHomeControlsPreferenceControllerTest {
|
|||||||
mContext = ApplicationProvider.getApplicationContext();
|
mContext = ApplicationProvider.getApplicationContext();
|
||||||
mShadowContentResolver = Shadow.extract(mContext.getContentResolver());
|
mShadowContentResolver = Shadow.extract(mContext.getContentResolver());
|
||||||
mBackend = new DreamBackend(mContext);
|
mBackend = new DreamBackend(mContext);
|
||||||
mController = new DreamHomeControlsPreferenceController(mContext, "key", mBackend);
|
mController = new DreamHomeControlsPreferenceController(mContext, mBackend);
|
||||||
mPreference = new SwitchPreference(mContext);
|
mPreference = new SwitchPreference(mContext);
|
||||||
mPreference.setKey(mController.getPreferenceKey());
|
mPreference.setKey(mController.getPreferenceKey());
|
||||||
when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
|
when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
|
||||||
|
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.when;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.service.dreams.DreamService;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
@@ -88,7 +89,11 @@ public class DreamSettingsTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private Preference mComplicationsTogglePref;
|
private Preference mComplicationsTogglePref;
|
||||||
@Mock
|
@Mock
|
||||||
|
private Preference mHomeControllerTogglePref;
|
||||||
|
@Mock
|
||||||
private DreamPickerController mDreamPickerController;
|
private DreamPickerController mDreamPickerController;
|
||||||
|
@Mock
|
||||||
|
private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController;
|
||||||
@Captor
|
@Captor
|
||||||
private ArgumentCaptor<DreamPickerController.Callback> mDreamPickerCallbackCaptor;
|
private ArgumentCaptor<DreamPickerController.Callback> mDreamPickerCallbackCaptor;
|
||||||
|
|
||||||
@@ -236,18 +241,116 @@ public class DreamSettingsTest {
|
|||||||
verify(mComplicationsTogglePref).setVisible(true);
|
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) {
|
private DreamSettings prepareDreamSettings(Context context) {
|
||||||
final TestDreamSettings dreamSettings = new TestDreamSettings(context);
|
final TestDreamSettings dreamSettings = new TestDreamSettings(context);
|
||||||
when(mDreamPickerController.getPreferenceKey()).thenReturn(DreamPickerController.PREF_KEY);
|
when(mDreamPickerController.getPreferenceKey()).thenReturn(DreamPickerController.PREF_KEY);
|
||||||
|
when(mDreamHomeControlsPreferenceController.getPreferenceKey())
|
||||||
|
.thenReturn(DreamHomeControlsPreferenceController.PREF_KEY);
|
||||||
when(mDreamPickerPref.getExtras()).thenReturn(new Bundle());
|
when(mDreamPickerPref.getExtras()).thenReturn(new Bundle());
|
||||||
when(mDreamPickerPref.getKey()).thenReturn(DreamPickerController.PREF_KEY);
|
when(mDreamPickerPref.getKey()).thenReturn(DreamPickerController.PREF_KEY);
|
||||||
when(mComplicationsTogglePref.getKey()).thenReturn(
|
when(mComplicationsTogglePref.getKey()).thenReturn(
|
||||||
DreamComplicationPreferenceController.PREF_KEY);
|
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(DreamPickerController.PREF_KEY, mDreamPickerPref);
|
||||||
dreamSettings.addPreference(DreamComplicationPreferenceController.PREF_KEY,
|
dreamSettings.addPreference(DreamComplicationPreferenceController.PREF_KEY,
|
||||||
mComplicationsTogglePref);
|
mComplicationsTogglePref);
|
||||||
|
dreamSettings.addPreference(DreamHomeControlsPreferenceController.PREF_KEY,
|
||||||
|
mHomeControllerTogglePref);
|
||||||
dreamSettings.setDreamPickerController(mDreamPickerController);
|
dreamSettings.setDreamPickerController(mDreamPickerController);
|
||||||
|
dreamSettings
|
||||||
|
.setDreamHomeControlsPreferenceController(mDreamHomeControlsPreferenceController);
|
||||||
|
|
||||||
return dreamSettings;
|
return dreamSettings;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user