Merge "Send componentName via extra for Accessibility usage notification" into sc-dev
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user