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