From 3358e2a0a11b537fc3255cf7366b346417888316 Mon Sep 17 00:00:00 2001 From: Will Leshner Date: Wed, 15 Feb 2023 16:00:10 -0800 Subject: [PATCH] Restrict screen saver settings searches to enabled users. If a user can't enable screen saver, they shouldn't be able to accidentally find screen saver related settings in Settings. Bug: 260276394 Test: atest ScreenSaverPreferenceControllerTest Test: manually by settings up a second user on a device that supports screen saver, switching to that user, and making sure that searches for "screen saver" don't accidentally reveal settings that can't be accessed. Merged-In: If2f465b2acb548455f0868507cf47217ea1a626f Change-Id: I96fb8f9c6c4960f203b51bb43994f7bafdcefdf5 --- src/com/android/settings/Utils.java | 18 ++++++++++++++++++ .../ScreenSaverPreferenceController.java | 14 ++------------ .../android/settings/dream/DreamSettings.java | 14 +++++++++++++- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index f996444b482..58788de2f88 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -1229,4 +1229,22 @@ public final class Utils extends com.android.settingslib.Utils { public static int getHomepageIconColorHighlight(Context context) { return context.getColor(R.color.accent_select_primary_text); } + + /** + * Returns if dreams are available to the current user. + */ + public static boolean areDreamsAvailableToCurrentUser(Context context) { + if (!context.getResources().getBoolean( + com.android.internal.R.bool.config_dreamsSupported)) { + return false; + } + + if (!context.getResources().getBoolean( + com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser)) { + return true; + } + + final UserManager userManager = context.getSystemService(UserManager.class); + return userManager != null && userManager.isSystemUser(); + } } diff --git a/src/com/android/settings/display/ScreenSaverPreferenceController.java b/src/com/android/settings/display/ScreenSaverPreferenceController.java index db4bc37054a..52b709a33fe 100644 --- a/src/com/android/settings/display/ScreenSaverPreferenceController.java +++ b/src/com/android/settings/display/ScreenSaverPreferenceController.java @@ -17,6 +17,7 @@ import android.content.Context; import android.os.UserManager; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.dream.DreamSettings; @@ -35,13 +36,7 @@ public class ScreenSaverPreferenceController extends BasePreferenceController im @Override public int getAvailabilityStatus() { - final boolean dreamsSupported = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_dreamsSupported); - final boolean dreamsOnlyEnabledForDockUser = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser); - // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. - return (dreamsSupported && (!dreamsOnlyEnabledForDockUser || isSystemUser())) - ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + return Utils.areDreamsAvailableToCurrentUser(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override @@ -53,9 +48,4 @@ public class ScreenSaverPreferenceController extends BasePreferenceController im return DreamSettings.getSummaryTextWithDreamName(mContext); } } - - private boolean isSystemUser() { - final UserManager userManager = mContext.getSystemService(UserManager.class); - return userManager.isSystemUser(); - } } diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java index 622f57a434d..df50a08f169 100644 --- a/src/com/android/settings/dream/DreamSettings.java +++ b/src/com/android/settings/dream/DreamSettings.java @@ -36,6 +36,7 @@ import androidx.preference.Preference; import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; @@ -251,6 +252,17 @@ public class DreamSettings extends DashboardFragment implements OnMainSwitchChan } public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider(R.xml.dream_fragment_overview); + new SearchIndexProvider(R.xml.dream_fragment_overview); + + static class SearchIndexProvider extends BaseSearchIndexProvider { + SearchIndexProvider(int xmlRes) { + super(xmlRes); + } + + @Override + protected boolean isPageSearchEnabled(Context context) { + return Utils.areDreamsAvailableToCurrentUser(context); + } + } }