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:
Prince
2024-02-15 20:41:32 +00:00
parent 4b0090700a
commit 8b02d17db8
5 changed files with 151 additions and 17 deletions

View File

@@ -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" />

View File

@@ -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);
}

View File

@@ -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,13 +251,29 @@ 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();
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() {

View File

@@ -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);

View File

@@ -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;
}