diff --git a/src/com/android/settings/development/ForceEnableNotesRolePreferenceController.java b/src/com/android/settings/development/ForceEnableNotesRolePreferenceController.java index 7821beca15a..4060bb696f9 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 @@ public class ForceEnableNotesRolePreferenceController 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 @@ public class ForceEnableNotesRolePreferenceController @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 32a28fe8427..6e2b07c7929 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 @@ package com.android.settings.development; 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.Mock; 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; @@ -61,6 +78,27 @@ public class ForceEnableNotesRolePreferenceControllerTest { mController.displayPreference(mScreen); } + @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); @@ -99,4 +137,12 @@ public class ForceEnableNotesRolePreferenceControllerTest { 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; + } + } }