Loading src/com/android/settings/Utils.java +12 −0 Original line number Diff line number Diff line Loading @@ -1277,4 +1277,16 @@ public final class Utils extends com.android.settingslib.Utils { } return -1; } /** * Returns if the current user is able to use Dreams. */ public static boolean canCurrentUserDream(Context context) { final UserHandle mainUser = context.getSystemService(UserManager.class).getMainUser(); if (mainUser == null) { return false; } return context.createContextAsUser(mainUser, 0).getSystemService(UserManager.class) .isUserForeground(); } } src/com/android/settings/communal/CommunalPreferenceController.java +2 −8 Original line number Diff line number Diff line Loading @@ -17,9 +17,9 @@ package com.android.settings.communal; import android.content.Context; import android.os.UserManager; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; /** Loading @@ -32,14 +32,8 @@ public class CommunalPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { // TODO(b/257333623): Allow the communal user to be non-SystemUser user in HSUM. return (mContext.getResources().getBoolean(R.bool.config_show_communal_settings) && isSystemUser()) && Utils.canCurrentUserDream(mContext)) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } private boolean isSystemUser() { final UserManager userManager = mContext.getSystemService(UserManager.class); return userManager != null && userManager.isSystemUser(); } } src/com/android/settings/display/ScreenSaverPreferenceController.java +3 −4 Original line number Diff line number Diff line Loading @@ -14,9 +14,9 @@ package com.android.settings.display; 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; Loading @@ -39,9 +39,8 @@ public class ScreenSaverPreferenceController extends BasePreferenceController im com.android.internal.R.bool.config_dreamsSupported); final boolean dreamsOnlyEnabledForDockUser = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser); final UserManager userManager = mContext.getSystemService(UserManager.class); // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. return (dreamsSupported && (!dreamsOnlyEnabledForDockUser || userManager.isMainUser())) return (dreamsSupported && (!dreamsOnlyEnabledForDockUser || Utils.canCurrentUserDream(mContext))) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } Loading src/com/android/settings/users/TimeoutToDockUserPreferenceController.java +2 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.provider.Settings; import androidx.preference.PreferenceScreen; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import java.util.Arrays; Loading Loading @@ -67,9 +68,7 @@ public class TimeoutToDockUserPreferenceController extends BasePreferenceControl return CONDITIONALLY_UNAVAILABLE; } // Is currently user zero. Only non user zero can have this setting. // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. if (UserHandle.myUserId() == UserHandle.USER_SYSTEM) { if (Utils.canCurrentUserDream(mContext)) { return DISABLED_FOR_USER; } Loading tests/robotests/src/com/android/settings/UtilsTest.java +40 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.net.LinkProperties; import android.net.Network; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.DiskInfo; import android.os.storage.StorageManager; Loading Loading @@ -299,4 +300,43 @@ public class UtilsTest { assertThat(Utils.isSettingsIntelligence(mContext)).isFalse(); } @Test public void canCurrentUserDream_isMainUser_returnTrue() { Context mockContext = mock(Context.class); UserManager mockUserManager = mock(UserManager.class); when(mockContext.getSystemService(UserManager.class)).thenReturn(mockUserManager); // mock MainUser UserHandle mainUser = new UserHandle(10); when(mockUserManager.getMainUser()).thenReturn(mainUser); when(mockUserManager.isUserForeground()).thenReturn(true); when(mockContext.createContextAsUser(mainUser, 0)).thenReturn(mockContext); assertThat(Utils.canCurrentUserDream(mockContext)).isTrue(); } @Test public void canCurrentUserDream_nullMainUser_returnFalse() { Context mockContext = mock(Context.class); UserManager mockUserManager = mock(UserManager.class); when(mockContext.getSystemService(UserManager.class)).thenReturn(mockUserManager); when(mockUserManager.getMainUser()).thenReturn(null); assertThat(Utils.canCurrentUserDream(mockContext)).isFalse(); } @Test public void canCurrentUserDream_notMainUser_returnFalse() { Context mockContext = mock(Context.class); UserManager mockUserManager = mock(UserManager.class); when(mockContext.getSystemService(UserManager.class)).thenReturn(mockUserManager); when(mockUserManager.isUserForeground()).thenReturn(false); assertThat(Utils.canCurrentUserDream(mockContext)).isFalse(); } } Loading
src/com/android/settings/Utils.java +12 −0 Original line number Diff line number Diff line Loading @@ -1277,4 +1277,16 @@ public final class Utils extends com.android.settingslib.Utils { } return -1; } /** * Returns if the current user is able to use Dreams. */ public static boolean canCurrentUserDream(Context context) { final UserHandle mainUser = context.getSystemService(UserManager.class).getMainUser(); if (mainUser == null) { return false; } return context.createContextAsUser(mainUser, 0).getSystemService(UserManager.class) .isUserForeground(); } }
src/com/android/settings/communal/CommunalPreferenceController.java +2 −8 Original line number Diff line number Diff line Loading @@ -17,9 +17,9 @@ package com.android.settings.communal; import android.content.Context; import android.os.UserManager; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; /** Loading @@ -32,14 +32,8 @@ public class CommunalPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { // TODO(b/257333623): Allow the communal user to be non-SystemUser user in HSUM. return (mContext.getResources().getBoolean(R.bool.config_show_communal_settings) && isSystemUser()) && Utils.canCurrentUserDream(mContext)) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } private boolean isSystemUser() { final UserManager userManager = mContext.getSystemService(UserManager.class); return userManager != null && userManager.isSystemUser(); } }
src/com/android/settings/display/ScreenSaverPreferenceController.java +3 −4 Original line number Diff line number Diff line Loading @@ -14,9 +14,9 @@ package com.android.settings.display; 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; Loading @@ -39,9 +39,8 @@ public class ScreenSaverPreferenceController extends BasePreferenceController im com.android.internal.R.bool.config_dreamsSupported); final boolean dreamsOnlyEnabledForDockUser = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser); final UserManager userManager = mContext.getSystemService(UserManager.class); // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. return (dreamsSupported && (!dreamsOnlyEnabledForDockUser || userManager.isMainUser())) return (dreamsSupported && (!dreamsOnlyEnabledForDockUser || Utils.canCurrentUserDream(mContext))) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } Loading
src/com/android/settings/users/TimeoutToDockUserPreferenceController.java +2 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.provider.Settings; import androidx.preference.PreferenceScreen; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import java.util.Arrays; Loading Loading @@ -67,9 +68,7 @@ public class TimeoutToDockUserPreferenceController extends BasePreferenceControl return CONDITIONALLY_UNAVAILABLE; } // Is currently user zero. Only non user zero can have this setting. // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. if (UserHandle.myUserId() == UserHandle.USER_SYSTEM) { if (Utils.canCurrentUserDream(mContext)) { return DISABLED_FOR_USER; } Loading
tests/robotests/src/com/android/settings/UtilsTest.java +40 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.net.LinkProperties; import android.net.Network; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.DiskInfo; import android.os.storage.StorageManager; Loading Loading @@ -299,4 +300,43 @@ public class UtilsTest { assertThat(Utils.isSettingsIntelligence(mContext)).isFalse(); } @Test public void canCurrentUserDream_isMainUser_returnTrue() { Context mockContext = mock(Context.class); UserManager mockUserManager = mock(UserManager.class); when(mockContext.getSystemService(UserManager.class)).thenReturn(mockUserManager); // mock MainUser UserHandle mainUser = new UserHandle(10); when(mockUserManager.getMainUser()).thenReturn(mainUser); when(mockUserManager.isUserForeground()).thenReturn(true); when(mockContext.createContextAsUser(mainUser, 0)).thenReturn(mockContext); assertThat(Utils.canCurrentUserDream(mockContext)).isTrue(); } @Test public void canCurrentUserDream_nullMainUser_returnFalse() { Context mockContext = mock(Context.class); UserManager mockUserManager = mock(UserManager.class); when(mockContext.getSystemService(UserManager.class)).thenReturn(mockUserManager); when(mockUserManager.getMainUser()).thenReturn(null); assertThat(Utils.canCurrentUserDream(mockContext)).isFalse(); } @Test public void canCurrentUserDream_notMainUser_returnFalse() { Context mockContext = mock(Context.class); UserManager mockUserManager = mock(UserManager.class); when(mockContext.getSystemService(UserManager.class)).thenReturn(mockUserManager); when(mockUserManager.isUserForeground()).thenReturn(false); assertThat(Utils.canCurrentUserDream(mockContext)).isFalse(); } }