Merge "Send componentName via extra for Accessibility usage notification" into sc-dev

This commit is contained in:
Lucy Chang
2021-04-08 07:22:58 +00:00
committed by Android (Google) Code Review
2 changed files with 39 additions and 43 deletions

View File

@@ -158,24 +158,29 @@ public class PolicyWarningUIController {
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, SEND_NOTIFICATION_DELAY_HOURS);
mAlarmManager.set(RTC_WAKEUP, cal.getTimeInMillis(),
createPendingIntent(mContext, userId, ACTION_SEND_NOTIFICATION,
service.flattenToShortString()));
createPendingIntent(mContext, userId, ACTION_SEND_NOTIFICATION, service));
}
private void cancelAlarm(int userId, ComponentName service) {
mAlarmManager.cancel(
createPendingIntent(mContext, userId, ACTION_SEND_NOTIFICATION,
service.flattenToShortString()));
createPendingIntent(mContext, userId, ACTION_SEND_NOTIFICATION, service));
}
protected static PendingIntent createPendingIntent(Context context, int userId, String action,
String serviceComponentName) {
ComponentName serviceComponentName) {
return PendingIntent.getBroadcast(context, 0,
createIntent(context, userId, action, serviceComponentName),
PendingIntent.FLAG_IMMUTABLE);
}
protected static Intent createIntent(Context context, int userId, String action,
ComponentName serviceComponentName) {
final Intent intent = new Intent(action);
intent.setPackage(context.getPackageName())
.setIdentifier(serviceComponentName)
.setIdentifier(serviceComponentName.flattenToShortString())
.putExtra(Intent.EXTRA_COMPONENT_NAME, serviceComponentName)
.putExtra(Intent.EXTRA_USER_ID, userId);
return PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_IMMUTABLE);
return intent;
}
/** A sub class to handle notifications and settings on the main thread. */
@@ -204,10 +209,9 @@ public class PolicyWarningUIController {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
final String service = intent.getIdentifier();
final ComponentName componentName = ComponentName.unflattenFromString(service);
if (TextUtils.isEmpty(action) || TextUtils.isEmpty(service)
|| componentName == null) {
final ComponentName componentName = intent.getParcelableExtra(
Intent.EXTRA_COMPONENT_NAME);
if (TextUtils.isEmpty(action) || componentName == null) {
return;
}
final int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.USER_SYSTEM);
@@ -215,7 +219,8 @@ public class PolicyWarningUIController {
trySendNotification(userId, componentName);
} else if (ACTION_A11Y_SETTINGS.equals(action)) {
launchSettings(userId, componentName);
mNotificationManager.cancel(service, NOTE_A11Y_VIEW_AND_CONTROL_ACCESS);
mNotificationManager.cancel(componentName.flattenToShortString(),
NOTE_A11Y_VIEW_AND_CONTROL_ACCESS);
onNotificationCanceled(userId, componentName);
} else if (ACTION_DISMISS_NOTIFICATION.equals(action)) {
onNotificationCanceled(userId, componentName);
@@ -257,8 +262,7 @@ public class PolicyWarningUIController {
mContext.getPackageManager());
final int size = mContext.getResources().getDimensionPixelSize(
android.R.dimen.app_icon_size);
sendNotification(userId, componentName.flattenToShortString(),
displayName,
sendNotification(userId, componentName, displayName,
ImageUtils.buildScaledBitmap(drawable, size, size));
}
break;
@@ -289,7 +293,8 @@ public class PolicyWarningUIController {
}
}
private void sendNotification(int userId, String serviceComponentName, CharSequence name,
private void sendNotification(int userId, ComponentName serviceComponentName,
CharSequence name,
Bitmap bitmap) {
final Notification.Builder notificationBuilder = new Notification.Builder(mContext,
SystemNotificationChannels.ACCESSIBILITY_SECURITY_POLICY);
@@ -315,7 +320,8 @@ public class PolicyWarningUIController {
if (bitmap != null) {
notificationBuilder.setLargeIcon(bitmap);
}
mNotificationManager.notify(serviceComponentName, NOTE_A11Y_VIEW_AND_CONTROL_ACCESS,
mNotificationManager.notify(serviceComponentName.flattenToShortString(),
NOTE_A11Y_VIEW_AND_CONTROL_ACCESS,
notificationBuilder.build());
}

View File

@@ -119,36 +119,36 @@ public class PolicyWarningUIControllerTest {
when(mAccessibilitySecurityPolicy.isA11yCategoryService(
mMockA11yServiceInfo)).thenReturn(false);
mFakeNotificationController.onReceive(mContext, createIntent(TEST_USER_ID,
PolicyWarningUIController.ACTION_SEND_NOTIFICATION,
TEST_COMPONENT_NAME.flattenToShortString()));
mFakeNotificationController.onReceive(mContext,
PolicyWarningUIController.createIntent(mContext, TEST_USER_ID,
PolicyWarningUIController.ACTION_SEND_NOTIFICATION,
TEST_COMPONENT_NAME));
verify(mNotificationManager).notify(eq(TEST_COMPONENT_NAME.flattenToShortString()),
eq(NOTE_A11Y_VIEW_AND_CONTROL_ACCESS), any(
Notification.class));
eq(NOTE_A11Y_VIEW_AND_CONTROL_ACCESS), any(Notification.class));
}
@Test
public void receiveActionA11ySettings_launchA11ySettingsAndDismissNotification() {
mFakeNotificationController.onReceive(mContext,
createIntent(TEST_USER_ID, PolicyWarningUIController.ACTION_A11Y_SETTINGS,
TEST_COMPONENT_NAME.flattenToShortString()));
PolicyWarningUIController.createIntent(mContext, TEST_USER_ID,
PolicyWarningUIController.ACTION_A11Y_SETTINGS,
TEST_COMPONENT_NAME));
verifyLaunchA11ySettings();
verify(mNotificationManager).cancel(TEST_COMPONENT_NAME.flattenToShortString(),
NOTE_A11Y_VIEW_AND_CONTROL_ACCESS);
assertNotifiedSettingsEqual(TEST_USER_ID,
TEST_COMPONENT_NAME.flattenToShortString());
assertNotifiedSettingsEqual(TEST_USER_ID, TEST_COMPONENT_NAME.flattenToShortString());
}
@Test
public void receiveActionDismissNotification_addToNotifiedSettings() {
mFakeNotificationController.onReceive(mContext, createIntent(TEST_USER_ID,
PolicyWarningUIController.ACTION_DISMISS_NOTIFICATION,
TEST_COMPONENT_NAME.flattenToShortString()));
mFakeNotificationController.onReceive(mContext,
PolicyWarningUIController.createIntent(mContext, TEST_USER_ID,
PolicyWarningUIController.ACTION_DISMISS_NOTIFICATION,
TEST_COMPONENT_NAME));
assertNotifiedSettingsEqual(TEST_USER_ID,
TEST_COMPONENT_NAME.flattenToShortString());
assertNotifiedSettingsEqual(TEST_USER_ID, TEST_COMPONENT_NAME.flattenToShortString());
}
@Test
@@ -172,8 +172,7 @@ public class PolicyWarningUIControllerTest {
verify(mAlarmManager).set(eq(RTC_WAKEUP), anyLong(),
eq(PolicyWarningUIController.createPendingIntent(mContext, TEST_USER_ID,
PolicyWarningUIController.ACTION_SEND_NOTIFICATION,
TEST_COMPONENT_NAME.flattenToShortString())));
PolicyWarningUIController.ACTION_SEND_NOTIFICATION, TEST_COMPONENT_NAME)));
}
@Test
@@ -184,8 +183,7 @@ public class PolicyWarningUIControllerTest {
verify(mAlarmManager).cancel(
eq(PolicyWarningUIController.createPendingIntent(mContext, TEST_USER_ID,
PolicyWarningUIController.ACTION_SEND_NOTIFICATION,
TEST_COMPONENT_NAME.flattenToShortString())));
PolicyWarningUIController.ACTION_SEND_NOTIFICATION, TEST_COMPONENT_NAME)));
}
private void assertNotifiedSettingsEqual(int userId, String settingString) {
@@ -196,14 +194,6 @@ public class PolicyWarningUIControllerTest {
assertEquals(settingString, notifiedServicesSetting);
}
private Intent createIntent(int userId, String action, String serviceComponentName) {
final Intent intent = new Intent(action);
intent.setPackage(mContext.getPackageName())
.setIdentifier(serviceComponentName)
.putExtra(Intent.EXTRA_USER_ID, userId);
return intent;
}
private void verifyLaunchA11ySettings() {
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
final ArgumentCaptor<UserHandle> userHandleCaptor = ArgumentCaptor.forClass(