[RESTRICT AUTOMERGE] Force enabling Notes role from developer options affects all users.

Restricting merge due to conflicts; will manually CP this to master.

Bug: 276432652
Test: ForceEnableNotesRolePreferenceControllerTest
Change-Id: Ic0fa7f33dcb6509908008774c725eec386d0608b
This commit is contained in:
Vania Januar
2023-04-12 18:24:13 +01:00
parent 4d737d7813
commit a1b7888c30
2 changed files with 61 additions and 7 deletions

View File

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

View File

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