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
|
||||
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" />
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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());
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user