Replace SystemUser checks with MainUser.

Bug: 257333623
Test: atest CommunalPreferenceControllerTest, atest UtilsTest, atest
TimeoutToDockUserPreferenceControllerTest

Change-Id: I5d2a818f9f35968ced1db7f9fa4b79432a502023
This commit is contained in:
Victor Truong
2023-01-20 10:49:41 -05:00
parent 4e03bc2133
commit f3c9a09cac
7 changed files with 78 additions and 29 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -32,6 +32,7 @@ import android.provider.Settings;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.fuelgauge.BatteryBackupHelperTest.ShadowUserHandle;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
@@ -106,15 +107,17 @@ public class TimeoutToDockUserPreferenceControllerTest {
}
@Test
public void getAvailabilityStatus_isCurrentlyUserZero_returnDisabledForUser() {
ShadowUserHandle.setUid(UserHandle.USER_SYSTEM);
public void getAvailabilityStatus_isCurrentlyMainUser_returnDisabledForUser() {
when(Utils.canCurrentUserDream(mContext)).thenReturn(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.DISABLED_FOR_USER);
}
@Test
public void getAvailabilityStatus_featureAndMultiUserEnabledAndNonUserZero_returnAvailable() {
public void getAvailabilityStatus_featureAndMultiUserEnabledAndNonMainUser_returnAvailable() {
when(Utils.canCurrentUserDream(mContext)).thenReturn(false);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
BasePreferenceController.AVAILABLE);
}

View File

@@ -28,6 +28,7 @@ import android.os.UserManager;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.Utils;
import com.android.settings.testutils.ResourcesUtils;
import org.junit.Before;
@@ -41,6 +42,7 @@ public class CommunalPreferenceControllerTest {
@Mock
private UserManager mUserManager;
private Context mContext;
private Resources mResources;
private CommunalPreferenceController mController;
@@ -49,33 +51,33 @@ public class CommunalPreferenceControllerTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
final Context context = spy(ApplicationProvider.getApplicationContext());
mResources = spy(context.getResources());
mContext = spy(ApplicationProvider.getApplicationContext());
mResources = spy(mContext.getResources());
mController = new CommunalPreferenceController(context, PREF_KEY);
mController = new CommunalPreferenceController(mContext, PREF_KEY);
when(context.getResources()).thenReturn(mResources);
when(context.getSystemService(UserManager.class)).thenReturn(mUserManager);
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
}
@Test
public void isAvailable_communalEnabled_shouldBeTrueForSystemUser() {
public void isAvailable_communalEnabled_shouldBeTrueForDockUser() {
setCommunalEnabled(true);
when(mUserManager.isSystemUser()).thenReturn(true);
when(Utils.canCurrentUserDream(mContext)).thenReturn(true);
assertTrue(mController.isAvailable());
}
@Test
public void isAvailable_communalEnabled_shouldBeFalseForNonSystemUser() {
public void isAvailable_communalEnabled_shouldBeFalseForNonDockUser() {
setCommunalEnabled(true);
when(mUserManager.isSystemUser()).thenReturn(false);
when(Utils.canCurrentUserDream(mContext)).thenReturn(false);
assertFalse(mController.isAvailable());
}
@Test
public void isAvailable_communalDisabled_shouldBeFalseForSystemUser() {
public void isAvailable_communalDisabled_shouldBeFalseForDockUser() {
setCommunalEnabled(false);
when(mUserManager.isSystemUser()).thenReturn(true);
when(Utils.canCurrentUserDream(mContext)).thenReturn(true);
assertFalse(mController.isAvailable());
}