Merge "Hide "additional info" when active dream does not support." into tm-qpr-dev

This commit is contained in:
Darrell Shi
2023-02-24 16:10:13 +00:00
committed by Android (Google) Code Review
6 changed files with 240 additions and 14 deletions

View File

@@ -29,6 +29,8 @@ import com.android.settingslib.dream.DreamBackend;
public class DreamComplicationPreferenceController extends TogglePreferenceController {
private final DreamBackend mBackend;
public static final String PREF_KEY = "dream_complications_toggle";
public DreamComplicationPreferenceController(Context context, String key) {
super(context, key);
mBackend = DreamBackend.getInstance(context);

View File

@@ -33,6 +33,7 @@ import com.android.settingslib.dream.DreamBackend;
import com.android.settingslib.dream.DreamBackend.DreamInfo;
import com.android.settingslib.widget.LayoutPreference;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
@@ -40,6 +41,7 @@ import java.util.stream.Collectors;
* Controller for the dream picker where the user can select a screensaver.
*/
public class DreamPickerController extends BasePreferenceController {
public static final String PREF_KEY = "dream_picker";
private final DreamBackend mBackend;
private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -48,12 +50,14 @@ public class DreamPickerController extends BasePreferenceController {
private DreamInfo mActiveDream;
private DreamAdapter mAdapter;
public DreamPickerController(Context context, String key) {
this(context, key, DreamBackend.getInstance(context));
private final HashSet<Callback> mCallbacks = new HashSet<>();
public DreamPickerController(Context context) {
this(context, DreamBackend.getInstance(context));
}
public DreamPickerController(Context context, String key, DreamBackend backend) {
super(context, key);
public DreamPickerController(Context context, DreamBackend backend) {
super(context, PREF_KEY);
mBackend = backend;
mDreamInfos = mBackend.getDreamInfos();
mActiveDream = getActiveDreamInfo(mDreamInfos);
@@ -96,6 +100,11 @@ public class DreamPickerController extends BasePreferenceController {
}
}
@Nullable
public DreamInfo getActiveDreamInfo() {
return mActiveDream;
}
@Nullable
private static DreamInfo getActiveDreamInfo(List<DreamInfo> dreamInfos) {
return dreamInfos
@@ -105,6 +114,19 @@ public class DreamPickerController extends BasePreferenceController {
.orElse(null);
}
void addCallback(Callback callback) {
mCallbacks.add(callback);
}
void removeCallback(Callback callback) {
mCallbacks.remove(callback);
}
interface Callback {
// Triggered when the selected dream changes.
void onActiveDreamChanged();
}
private class DreamItem implements IDreamItem {
DreamInfo mDreamInfo;
@@ -131,6 +153,7 @@ public class DreamPickerController extends BasePreferenceController {
public void onItemClicked() {
mActiveDream = mDreamInfo;
mBackend.setActiveDream(mDreamInfo.componentName);
mCallbacks.forEach(Callback::onActiveDreamChanged);
mMetricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
SettingsEnums.ACTION_DREAM_SELECT_TYPE, SettingsEnums.DREAM,
mDreamInfo.componentName.flattenToString(), 1);

View File

@@ -59,8 +59,14 @@ public class DreamSettings extends DashboardFragment implements OnMainSwitchChan
private MainSwitchPreference mMainSwitchPreference;
private Button mPreviewButton;
private Preference mComplicationsTogglePreference;
private RecyclerView mRecyclerView;
private DreamPickerController mDreamPickerController;
private final DreamPickerController.Callback mCallback =
this::updateComplicationsToggleVisibility;
@WhenToDream
static int getSettingFromPrefKey(String key) {
switch (key) {
@@ -128,7 +134,13 @@ public class DreamSettings extends DashboardFragment implements OnMainSwitchChan
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
return buildPreferenceControllers(context);
final List<AbstractPreferenceController> controllers = new ArrayList<>();
if (mDreamPickerController == null) {
mDreamPickerController = new DreamPickerController(context);
}
controllers.add(mDreamPickerController);
controllers.add(new WhenToDreamPreferenceController(context));
return controllers;
}
public static CharSequence getSummaryTextWithDreamName(Context context) {
@@ -146,10 +158,9 @@ public class DreamSettings extends DashboardFragment implements OnMainSwitchChan
}
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new WhenToDreamPreferenceController(context));
return controllers;
@VisibleForTesting
void setDreamPickerController(DreamPickerController dreamPickerController) {
mDreamPickerController = dreamPickerController;
}
private void setAllPreferencesEnabled(boolean isEnabled) {
@@ -174,12 +185,29 @@ public class DreamSettings extends DashboardFragment implements OnMainSwitchChan
final DreamBackend dreamBackend = DreamBackend.getInstance(getContext());
mComplicationsTogglePreference = findPreference(
DreamComplicationPreferenceController.PREF_KEY);
updateComplicationsToggleVisibility();
mMainSwitchPreference = findPreference(MAIN_SWITCH_PREF_KEY);
if (mMainSwitchPreference != null) {
mMainSwitchPreference.addOnSwitchChangeListener(this);
}
setAllPreferencesEnabled(dreamBackend.isEnabled());
if (mDreamPickerController != null) {
mDreamPickerController.addCallback(mCallback);
}
}
@Override
public void onDestroy() {
if (mDreamPickerController != null) {
mDreamPickerController.removeCallback(mCallback);
}
super.onDestroy();
}
@Override
@@ -199,6 +227,16 @@ public class DreamSettings extends DashboardFragment implements OnMainSwitchChan
return mRecyclerView;
}
private void updateComplicationsToggleVisibility() {
if (mDreamPickerController == null || mComplicationsTogglePreference == null) {
return;
}
final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo();
mComplicationsTogglePreference.setVisible(
activeDream != null && activeDream.supportsComplications);
}
private void updatePaddingForPreviewButton() {
mPreviewButton.post(() -> {
mRecyclerView.setPadding(0, 0, 0, mPreviewButton.getMeasuredHeight());