[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:
@@ -31,12 +31,12 @@
|
|||||||
|
|
||||||
package com.android.settings.development;
|
package com.android.settings.development;
|
||||||
|
|
||||||
import static android.os.UserHandle.USER_CURRENT;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.om.IOverlayManager;
|
import android.content.om.IOverlayManager;
|
||||||
|
import android.content.pm.UserInfo;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
|
import android.os.UserManager;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.SwitchPreference;
|
import androidx.preference.SwitchPreference;
|
||||||
@@ -50,18 +50,22 @@ public class ForceEnableNotesRolePreferenceController
|
|||||||
extends DeveloperOptionsPreferenceController
|
extends DeveloperOptionsPreferenceController
|
||||||
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
|
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
|
||||||
|
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
static final String OVERLAY_PACKAGE_NAME =
|
||||||
|
"com.android.role.notes.enabled";
|
||||||
|
|
||||||
private static final String NOTES_ROLE_ENABLED_KEY =
|
private static final String NOTES_ROLE_ENABLED_KEY =
|
||||||
"force_enable_notes_role";
|
"force_enable_notes_role";
|
||||||
|
|
||||||
private static final String OVERLAY_PACKAGE_NAME =
|
|
||||||
"com.android.role.notes.enabled";
|
|
||||||
|
|
||||||
private final IOverlayManager mOverlayManager;
|
private final IOverlayManager mOverlayManager;
|
||||||
|
private final UserManager mUserManager;
|
||||||
|
|
||||||
public ForceEnableNotesRolePreferenceController(Context context) {
|
public ForceEnableNotesRolePreferenceController(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
mOverlayManager = IOverlayManager.Stub.asInterface(
|
mOverlayManager = IOverlayManager.Stub.asInterface(
|
||||||
ServiceManager.getService(Context.OVERLAY_SERVICE));
|
ServiceManager.getService(Context.OVERLAY_SERVICE));
|
||||||
|
mUserManager = context.getSystemService(UserManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -95,7 +99,11 @@ public class ForceEnableNotesRolePreferenceController
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
protected void setEnabled(boolean enabled) {
|
protected void setEnabled(boolean enabled) {
|
||||||
try {
|
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) {
|
} catch (RemoteException e) {
|
||||||
throw e.rethrowFromSystemServer();
|
throw e.rethrowFromSystemServer();
|
||||||
}
|
}
|
||||||
|
@@ -18,9 +18,17 @@ package com.android.settings.development;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
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.PreferenceScreen;
|
||||||
import androidx.preference.SwitchPreference;
|
import androidx.preference.SwitchPreference;
|
||||||
|
|
||||||
@@ -31,14 +39,23 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
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)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@Config(shadows = ForceEnableNotesRolePreferenceControllerTest.ShadowOverlayManagerStub.class)
|
||||||
public class ForceEnableNotesRolePreferenceControllerTest {
|
public class ForceEnableNotesRolePreferenceControllerTest {
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private PreferenceScreen mScreen;
|
private PreferenceScreen mScreen;
|
||||||
@Mock
|
@Mock
|
||||||
private SwitchPreference mPreference;
|
private SwitchPreference mPreference;
|
||||||
|
@Mock
|
||||||
|
private UserManager mUserManager;
|
||||||
|
@Mock
|
||||||
|
private static IOverlayManager sOverlayManager;
|
||||||
|
|
||||||
private ForceEnableNotesRolePreferenceController mController;
|
private ForceEnableNotesRolePreferenceController mController;
|
||||||
|
|
||||||
@@ -61,6 +78,27 @@ public class ForceEnableNotesRolePreferenceControllerTest {
|
|||||||
mController.displayPreference(mScreen);
|
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
|
@Test
|
||||||
public void updateState_enabled_preferenceShouldBeChecked() {
|
public void updateState_enabled_preferenceShouldBeChecked() {
|
||||||
mController.setEnabled(true);
|
mController.setEnabled(true);
|
||||||
@@ -99,4 +137,12 @@ public class ForceEnableNotesRolePreferenceControllerTest {
|
|||||||
verify(mPreference).setEnabled(false);
|
verify(mPreference).setEnabled(false);
|
||||||
verify(mPreference).setChecked(false);
|
verify(mPreference).setChecked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Implements(IOverlayManager.Stub.class)
|
||||||
|
public static class ShadowOverlayManagerStub {
|
||||||
|
@Implementation
|
||||||
|
public static IOverlayManager asInterface(IBinder iBinder) {
|
||||||
|
return sOverlayManager;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user