Force enabling Notes role from developer options affects all users.
CP from ag/22598718 due to conflicts in downstream branch.
Bug: 276432652
Test: ForceEnableNotesRolePreferenceControllerTest
Change-Id: Ic0fa7f33dcb6509908008774c725eec386d0608b
diff --git a/src/com/android/settings/development/ForceEnableNotesRolePreferenceController.java b/src/com/android/settings/development/ForceEnableNotesRolePreferenceController.java
index 7821bec..4060bb6 100644
--- a/src/com/android/settings/development/ForceEnableNotesRolePreferenceController.java
+++ b/src/com/android/settings/development/ForceEnableNotesRolePreferenceController.java
@@ -31,12 +31,12 @@
package com.android.settings.development;
-import static android.os.UserHandle.USER_CURRENT;
-
import android.content.Context;
import android.content.om.IOverlayManager;
+import android.content.pm.UserInfo;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserManager;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
@@ -50,18 +50,22 @@
extends DeveloperOptionsPreferenceController
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+ @VisibleForTesting
+ static final String OVERLAY_PACKAGE_NAME =
+ "com.android.role.notes.enabled";
+
private static final String NOTES_ROLE_ENABLED_KEY =
"force_enable_notes_role";
- private static final String OVERLAY_PACKAGE_NAME =
- "com.android.role.notes.enabled";
-
private final IOverlayManager mOverlayManager;
+ private final UserManager mUserManager;
public ForceEnableNotesRolePreferenceController(Context context) {
super(context);
mOverlayManager = IOverlayManager.Stub.asInterface(
ServiceManager.getService(Context.OVERLAY_SERVICE));
+ mUserManager = context.getSystemService(UserManager.class);
}
@Override
@@ -95,7 +99,11 @@
@VisibleForTesting
protected void setEnabled(boolean enabled) {
try {
- mOverlayManager.setEnabled(OVERLAY_PACKAGE_NAME, enabled, USER_CURRENT);
+ for (UserInfo user : mUserManager.getUsers()) {
+ if (user.isFull() || user.isProfile()) {
+ mOverlayManager.setEnabled(OVERLAY_PACKAGE_NAME, enabled, user.id);
+ }
+ }
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/tests/robotests/src/com/android/settings/development/ForceEnableNotesRolePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ForceEnableNotesRolePreferenceControllerTest.java
index 32a28fe..6e2b07c 100644
--- a/tests/robotests/src/com/android/settings/development/ForceEnableNotesRolePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/ForceEnableNotesRolePreferenceControllerTest.java
@@ -18,9 +18,17 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.Context;
+import android.content.om.IOverlayManager;
+import android.content.pm.UserInfo;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.UserManager;
+
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
@@ -31,14 +39,23 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+import java.util.Arrays;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ForceEnableNotesRolePreferenceControllerTest.ShadowOverlayManagerStub.class)
public class ForceEnableNotesRolePreferenceControllerTest {
-
@Mock
private PreferenceScreen mScreen;
@Mock
private SwitchPreference mPreference;
+ @Mock
+ private UserManager mUserManager;
+ @Mock
+ private static IOverlayManager sOverlayManager;
private ForceEnableNotesRolePreferenceController mController;
@@ -62,6 +79,27 @@
}
@Test
+ public void setEnabled_updatesForAllFullAndProfileUsers() throws RemoteException {
+ Context context = spy(RuntimeEnvironment.application.getApplicationContext());
+ UserInfo user1 = new UserInfo(1, "Name", "Path", 0x0ff0ff,
+ UserManager.USER_TYPE_FULL_SYSTEM);
+ UserInfo user2 = new UserInfo(2, "Name", "Path", 0x0ff0ff,
+ UserManager.USER_TYPE_PROFILE_MANAGED);
+ UserInfo user3 = new UserInfo(3, "Name", "Path", 0x0ff0ff, "Some other type");
+ when(context.getSystemService(UserManager.class)).thenReturn(mUserManager);
+
+ when(mUserManager.getUsers()).thenReturn(Arrays.asList(user1, user2, user3));
+
+ mController = new ForceEnableNotesRolePreferenceController(context);
+ mController.setEnabled(true);
+
+ verify(sOverlayManager).setEnabled(
+ ForceEnableNotesRolePreferenceController.OVERLAY_PACKAGE_NAME, true, 1);
+ verify(sOverlayManager).setEnabled(
+ ForceEnableNotesRolePreferenceController.OVERLAY_PACKAGE_NAME, true, 2);
+ }
+
+ @Test
public void updateState_enabled_preferenceShouldBeChecked() {
mController.setEnabled(true);
mController.updateState(mPreference);
@@ -99,4 +137,12 @@
verify(mPreference).setEnabled(false);
verify(mPreference).setChecked(false);
}
+
+ @Implements(IOverlayManager.Stub.class)
+ public static class ShadowOverlayManagerStub {
+ @Implementation
+ public static IOverlayManager asInterface(IBinder iBinder) {
+ return sOverlayManager;
+ }
+ }
}