Merge "Allow dnd access for secondary users" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c2496f917c
@@ -135,6 +135,7 @@ interface INotificationManager
|
||||
void setNotificationPolicy(String pkg, in NotificationManager.Policy policy);
|
||||
boolean isNotificationPolicyAccessGrantedForPackage(String pkg);
|
||||
void setNotificationPolicyAccessGranted(String pkg, boolean granted);
|
||||
void setNotificationPolicyAccessGrantedForUser(String pkg, int userId, boolean granted);
|
||||
AutomaticZenRule getAutomaticZenRule(String id);
|
||||
List<ZenModeConfig.ZenRule> getZenRules();
|
||||
String addAutomaticZenRule(in AutomaticZenRule automaticZenRule);
|
||||
|
||||
@@ -1196,7 +1196,6 @@ public class NotificationManagerService extends SystemService {
|
||||
mAccessibilityManager = am;
|
||||
}
|
||||
|
||||
|
||||
// TODO: All tests should use this init instead of the one-off setters above.
|
||||
@VisibleForTesting
|
||||
void init(Looper looper, IPackageManager packageManager,
|
||||
@@ -2764,19 +2763,25 @@ public class NotificationManagerService extends SystemService {
|
||||
@Override
|
||||
public void setNotificationPolicyAccessGranted(String pkg, boolean granted)
|
||||
throws RemoteException {
|
||||
setNotificationPolicyAccessGrantedForUser(
|
||||
pkg, getCallingUserHandle().getIdentifier(), granted);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNotificationPolicyAccessGrantedForUser(
|
||||
String pkg, int userId, boolean granted) {
|
||||
checkCallerIsSystemOrShell();
|
||||
final long identity = Binder.clearCallingIdentity();
|
||||
try {
|
||||
if (!mActivityManager.isLowRamDevice()) {
|
||||
mConditionProviders.setPackageOrComponentEnabled(
|
||||
pkg, getCallingUserHandle().getIdentifier(), true, granted);
|
||||
pkg, userId, true, granted);
|
||||
|
||||
getContext().sendBroadcastAsUser(new Intent(
|
||||
NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
|
||||
.setPackage(pkg)
|
||||
.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY),
|
||||
getCallingUserHandle(), null);
|
||||
|
||||
UserHandle.of(userId), null);
|
||||
savePolicyFile();
|
||||
}
|
||||
} finally {
|
||||
@@ -2871,11 +2876,10 @@ public class NotificationManagerService extends SystemService {
|
||||
userId, true, granted);
|
||||
|
||||
getContext().sendBroadcastAsUser(new Intent(
|
||||
NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
|
||||
|
||||
NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
|
||||
.setPackage(listener.getPackageName())
|
||||
.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY),
|
||||
getCallingUserHandle(), null);
|
||||
UserHandle.of(userId), null);
|
||||
|
||||
savePolicyFile();
|
||||
}
|
||||
@@ -2901,7 +2905,7 @@ public class NotificationManagerService extends SystemService {
|
||||
NotificationManager.ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED)
|
||||
.setPackage(assistant.getPackageName())
|
||||
.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY),
|
||||
getCallingUserHandle(), null);
|
||||
UserHandle.of(userId), null);
|
||||
|
||||
savePolicyFile();
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.assertFalse;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static junit.framework.Assert.assertNull;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static junit.framework.Assert.fail;
|
||||
@@ -38,6 +39,7 @@ import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -67,6 +69,7 @@ import android.service.notification.NotificationListenerService;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableContext;
|
||||
import android.testing.TestableLooper;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
import android.util.ArrayMap;
|
||||
@@ -108,7 +111,7 @@ public class NotificationManagerServiceTest extends NotificationTestCase {
|
||||
private IPackageManager mPackageManager;
|
||||
@Mock
|
||||
private PackageManager mPackageManagerClient;
|
||||
private Context mContext = getContext();
|
||||
private TestableContext mContext = spy(getContext());
|
||||
private final String PKG = mContext.getPackageName();
|
||||
private TestableLooper mTestableLooper;
|
||||
@Mock
|
||||
@@ -169,12 +172,14 @@ public class NotificationManagerServiceTest extends NotificationTestCase {
|
||||
mTestableLooper = TestableLooper.get(this);
|
||||
mHandler = mNotificationManagerService.new WorkerHandler(mTestableLooper.getLooper());
|
||||
// MockPackageManager - default returns ApplicationInfo with matching calling UID
|
||||
mContext.setMockPackageManager(mPackageManagerClient);
|
||||
final ApplicationInfo applicationInfo = new ApplicationInfo();
|
||||
applicationInfo.uid = mUid;
|
||||
when(mPackageManager.getApplicationInfo(anyString(), anyInt(), anyInt()))
|
||||
.thenReturn(applicationInfo);
|
||||
when(mPackageManagerClient.getApplicationInfoAsUser(anyString(), anyInt(), anyInt()))
|
||||
.thenReturn(applicationInfo);
|
||||
when(mPackageManagerClient.getPackageUidAsUser(any(), anyInt())).thenReturn(mUid);
|
||||
final LightsManager mockLightsManager = mock(LightsManager.class);
|
||||
when(mockLightsManager.getLight(anyInt())).thenReturn(mock(Light.class));
|
||||
when(mAudioManager.getRingerModeInternal()).thenReturn(AudioManager.RINGER_MODE_NORMAL);
|
||||
@@ -222,6 +227,7 @@ public class NotificationManagerServiceTest extends NotificationTestCase {
|
||||
|
||||
mBinderService.createNotificationChannels(
|
||||
PKG, new ParceledListSlice(Arrays.asList(mTestNotificationChannel)));
|
||||
assertNotNull(mBinderService.getNotificationChannel(PKG, TEST_CHANNEL_ID));
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -1310,6 +1316,72 @@ public class NotificationManagerServiceTest extends NotificationTestCase {
|
||||
verify(mSnoozeHelper, never()).repostGroupSummary(anyString(), anyInt(), anyString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetListenerAccessForUser() throws Exception {
|
||||
UserHandle user = UserHandle.of(10);
|
||||
ComponentName c = ComponentName.unflattenFromString("package/Component");
|
||||
try {
|
||||
mBinderService.setNotificationListenerAccessGrantedForUser(
|
||||
c, user.getIdentifier(), true);
|
||||
} catch (SecurityException e) {
|
||||
if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
verify(mContext, times(1)).sendBroadcastAsUser(any(), eq(user), any());
|
||||
verify(mListeners, times(1)).setPackageOrComponentEnabled(
|
||||
c.flattenToString(), user.getIdentifier(), true, true);
|
||||
verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
|
||||
c.flattenToString(), user.getIdentifier(), false, true);
|
||||
verify(mAssistants, never()).setPackageOrComponentEnabled(
|
||||
any(), anyInt(), anyBoolean(), anyBoolean());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetAssistantAccessForUser() throws Exception {
|
||||
UserHandle user = UserHandle.of(10);
|
||||
ComponentName c = ComponentName.unflattenFromString("package/Component");
|
||||
try {
|
||||
mBinderService.setNotificationAssistantAccessGrantedForUser(
|
||||
c, user.getIdentifier(), true);
|
||||
} catch (SecurityException e) {
|
||||
if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
verify(mContext, times(1)).sendBroadcastAsUser(any(), eq(user), any());
|
||||
verify(mAssistants, times(1)).setPackageOrComponentEnabled(
|
||||
c.flattenToString(), user.getIdentifier(), true, true);
|
||||
verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
|
||||
c.flattenToString(), user.getIdentifier(), false, true);
|
||||
verify(mListeners, never()).setPackageOrComponentEnabled(
|
||||
any(), anyInt(), anyBoolean(), anyBoolean());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetDndAccessForUser() throws Exception {
|
||||
UserHandle user = UserHandle.of(10);
|
||||
ComponentName c = ComponentName.unflattenFromString("package/Component");
|
||||
try {
|
||||
mBinderService.setNotificationPolicyAccessGrantedForUser(
|
||||
c.getPackageName(), user.getIdentifier(), true);
|
||||
} catch (SecurityException e) {
|
||||
if (!e.getMessage().contains("Permission Denial: not allowed to send broadcast")) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
verify(mContext, times(1)).sendBroadcastAsUser(any(), eq(user), any());
|
||||
verify(mConditionProviders, times(1)).setPackageOrComponentEnabled(
|
||||
c.getPackageName(), user.getIdentifier(), true, true);
|
||||
verify(mAssistants, never()).setPackageOrComponentEnabled(
|
||||
any(), anyInt(), anyBoolean(), anyBoolean());
|
||||
verify(mListeners, never()).setPackageOrComponentEnabled(
|
||||
any(), anyInt(), anyBoolean(), anyBoolean());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetListenerAccess() throws Exception {
|
||||
ComponentName c = ComponentName.unflattenFromString("package/Component");
|
||||
|
||||
Reference in New Issue
Block a user