Loading src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java +29 −8 Original line number Diff line number Diff line Loading @@ -54,6 +54,9 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { static final String ACTION_RESTORED = "com.android.settings.accessibility.ACTION_HIGH_CONTRAST_TEXT_RESTORED"; @VisibleForTesting static final String ACTION_OPEN_SETTINGS = "com.android.settings.accessibility.ACTION_OPEN_HIGH_CONTRAST_TEXT_SETTINGS"; @VisibleForTesting static final int NOTIFICATION_ID = 1; @Retention(RetentionPolicy.SOURCE) Loading @@ -74,7 +77,16 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { return; } if (ACTION_RESTORED.equals(intent.getAction())) { if (ACTION_OPEN_SETTINGS.equals(intent.getAction())) { // Close notification drawer before opening the HCT setting. context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); Intent settingsIntent = createHighContrastTextSettingsIntent(context); settingsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(settingsIntent); context.getSystemService(NotificationManager.class).cancel(NOTIFICATION_ID); } else if (ACTION_RESTORED.equals(intent.getAction())) { Log.i(TAG, "HCT attempted to be restored from backup; showing notification for userId: " + context.getUserId()); Settings.Secure.putInt(context.getContentResolver(), Loading Loading @@ -125,21 +137,20 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { R.string.accessibility_notification_high_contrast_text_content)) .setFlag(Notification.FLAG_NO_CLEAR, true); Intent settingsIntent = new Intent(Settings.ACTION_TEXT_READING_SETTINGS); settingsIntent.setPackage(context.getPackageName()); Intent settingsIntent = createHighContrastTextSettingsIntent(context); if (settingsIntent.resolveActivity(context.getPackageManager()) != null) { Bundle fragmentArgs = new Bundle(); fragmentArgs.putString(EXTRA_FRAGMENT_ARG_KEY, TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); settingsIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs); PendingIntent settingsPendingIntent = PendingIntent.getActivity(context, /* requestCode = */ 0, settingsIntent, PendingIntent.FLAG_IMMUTABLE); Intent actionIntent = new Intent(context, HighContrastTextMigrationReceiver.class); actionIntent.setAction(ACTION_OPEN_SETTINGS); PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, actionIntent, PendingIntent.FLAG_IMMUTABLE); Notification.Action settingsAction = new Notification.Action.Builder( /* icon= */ null, context.getString( R.string.accessibility_notification_high_contrast_text_action), settingsPendingIntent actionPendingIntent ).build(); notificationBuilder Loading @@ -156,4 +167,14 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { notificationManager.createNotificationChannel(notificationChannel); notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); } private Intent createHighContrastTextSettingsIntent(Context context) { Intent settingsIntent = new Intent(Settings.ACTION_TEXT_READING_SETTINGS); settingsIntent.setPackage(context.getPackageName()); Bundle fragmentArgs = new Bundle(); fragmentArgs.putString(EXTRA_FRAGMENT_ARG_KEY, TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); settingsIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs); return settingsIntent; } } tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java +29 −8 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENT import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.ACTION_RESTORED; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.ACTION_OPEN_SETTINGS; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_CHANNEL; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_ID; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.PromptState.PROMPT_SHOWN; Loading @@ -28,9 +29,9 @@ import static com.android.settings.accessibility.HighContrastTextMigrationReceiv import static com.google.common.truth.Truth.assertThat; import android.app.Application; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; Loading @@ -54,10 +55,13 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.Shadows; import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowNotification; import org.robolectric.shadows.ShadowNotificationManager; import org.robolectric.shadows.ShadowPackageManager; import java.util.List; /** Tests for {@link HighContrastTextMigrationReceiver}. */ @RunWith(RobolectricTestRunner.class) public class HighContrastTextMigrationReceiverTest { Loading @@ -66,6 +70,7 @@ public class HighContrastTextMigrationReceiverTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private final Context mContext = ApplicationProvider.getApplicationContext(); private HighContrastTextMigrationReceiver mReceiver; private ShadowApplication mShadowApplication; private ShadowNotificationManager mShadowNotificationManager; @Before Loading @@ -73,6 +78,7 @@ public class HighContrastTextMigrationReceiverTest { NotificationManager notificationManager = mContext.getSystemService(NotificationManager.class); mShadowNotificationManager = Shadows.shadowOf(notificationManager); mShadowApplication = Shadows.shadowOf((Application) mContext); // Setup Settings app as a system app ShadowPackageManager shadowPm = Shadows.shadowOf(mContext.getPackageManager()); Loading Loading @@ -187,6 +193,28 @@ public class HighContrastTextMigrationReceiverTest { verifyNotificationNotSent(); } @Test @EnableFlags(Flags.FLAG_HIGH_CONTRAST_TEXT_SMALL_TEXT_RECT) public void onReceive_openSettingsIntent_openHighContrastTextPreference() { Intent intent = new Intent(ACTION_OPEN_SETTINGS); mReceiver.onReceive(mContext, intent); List<Intent> broadcastIntents = mShadowApplication.getBroadcastIntents(); assertThat(broadcastIntents.size()).isEqualTo(1); assertThat(broadcastIntents.get(0).getAction()) .isEqualTo(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); Intent startedActivitie = mShadowApplication.getNextStartedActivity(); assertThat(startedActivitie).isNotNull(); Bundle fragmentArgs = startedActivitie.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); assertThat(fragmentArgs).isNotNull(); assertThat(fragmentArgs.getString(EXTRA_FRAGMENT_ARG_KEY)) .isEqualTo(TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID); assertThat(notification).isNull(); } private void verifyNotificationNotSent() { Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID); assertThat(notification).isNull(); Loading @@ -210,13 +238,6 @@ public class HighContrastTextMigrationReceiverTest { assertThat(notification.actions.length).isEqualTo(1); assertThat(notification.actions[0].title.toString()).isEqualTo( mContext.getString(R.string.accessibility_notification_high_contrast_text_action)); PendingIntent pendingIntent = notification.actions[0].actionIntent; Intent settingsIntent = Shadows.shadowOf(pendingIntent).getSavedIntent(); Bundle fragmentArgs = settingsIntent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); assertThat(fragmentArgs).isNotNull(); assertThat(fragmentArgs.getString(EXTRA_FRAGMENT_ARG_KEY)) .isEqualTo(TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); } private void assertPromptStateAndHctState( Loading Loading
src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java +29 −8 Original line number Diff line number Diff line Loading @@ -54,6 +54,9 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { static final String ACTION_RESTORED = "com.android.settings.accessibility.ACTION_HIGH_CONTRAST_TEXT_RESTORED"; @VisibleForTesting static final String ACTION_OPEN_SETTINGS = "com.android.settings.accessibility.ACTION_OPEN_HIGH_CONTRAST_TEXT_SETTINGS"; @VisibleForTesting static final int NOTIFICATION_ID = 1; @Retention(RetentionPolicy.SOURCE) Loading @@ -74,7 +77,16 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { return; } if (ACTION_RESTORED.equals(intent.getAction())) { if (ACTION_OPEN_SETTINGS.equals(intent.getAction())) { // Close notification drawer before opening the HCT setting. context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); Intent settingsIntent = createHighContrastTextSettingsIntent(context); settingsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(settingsIntent); context.getSystemService(NotificationManager.class).cancel(NOTIFICATION_ID); } else if (ACTION_RESTORED.equals(intent.getAction())) { Log.i(TAG, "HCT attempted to be restored from backup; showing notification for userId: " + context.getUserId()); Settings.Secure.putInt(context.getContentResolver(), Loading Loading @@ -125,21 +137,20 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { R.string.accessibility_notification_high_contrast_text_content)) .setFlag(Notification.FLAG_NO_CLEAR, true); Intent settingsIntent = new Intent(Settings.ACTION_TEXT_READING_SETTINGS); settingsIntent.setPackage(context.getPackageName()); Intent settingsIntent = createHighContrastTextSettingsIntent(context); if (settingsIntent.resolveActivity(context.getPackageManager()) != null) { Bundle fragmentArgs = new Bundle(); fragmentArgs.putString(EXTRA_FRAGMENT_ARG_KEY, TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); settingsIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs); PendingIntent settingsPendingIntent = PendingIntent.getActivity(context, /* requestCode = */ 0, settingsIntent, PendingIntent.FLAG_IMMUTABLE); Intent actionIntent = new Intent(context, HighContrastTextMigrationReceiver.class); actionIntent.setAction(ACTION_OPEN_SETTINGS); PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, actionIntent, PendingIntent.FLAG_IMMUTABLE); Notification.Action settingsAction = new Notification.Action.Builder( /* icon= */ null, context.getString( R.string.accessibility_notification_high_contrast_text_action), settingsPendingIntent actionPendingIntent ).build(); notificationBuilder Loading @@ -156,4 +167,14 @@ public class HighContrastTextMigrationReceiver extends BroadcastReceiver { notificationManager.createNotificationChannel(notificationChannel); notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); } private Intent createHighContrastTextSettingsIntent(Context context) { Intent settingsIntent = new Intent(Settings.ACTION_TEXT_READING_SETTINGS); settingsIntent.setPackage(context.getPackageName()); Bundle fragmentArgs = new Bundle(); fragmentArgs.putString(EXTRA_FRAGMENT_ARG_KEY, TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); settingsIntent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, fragmentArgs); return settingsIntent; } }
tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java +29 −8 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENT import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.ACTION_RESTORED; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.ACTION_OPEN_SETTINGS; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_CHANNEL; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.NOTIFICATION_ID; import static com.android.settings.accessibility.HighContrastTextMigrationReceiver.PromptState.PROMPT_SHOWN; Loading @@ -28,9 +29,9 @@ import static com.android.settings.accessibility.HighContrastTextMigrationReceiv import static com.google.common.truth.Truth.assertThat; import android.app.Application; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; Loading @@ -54,10 +55,13 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.Shadows; import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowNotification; import org.robolectric.shadows.ShadowNotificationManager; import org.robolectric.shadows.ShadowPackageManager; import java.util.List; /** Tests for {@link HighContrastTextMigrationReceiver}. */ @RunWith(RobolectricTestRunner.class) public class HighContrastTextMigrationReceiverTest { Loading @@ -66,6 +70,7 @@ public class HighContrastTextMigrationReceiverTest { public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private final Context mContext = ApplicationProvider.getApplicationContext(); private HighContrastTextMigrationReceiver mReceiver; private ShadowApplication mShadowApplication; private ShadowNotificationManager mShadowNotificationManager; @Before Loading @@ -73,6 +78,7 @@ public class HighContrastTextMigrationReceiverTest { NotificationManager notificationManager = mContext.getSystemService(NotificationManager.class); mShadowNotificationManager = Shadows.shadowOf(notificationManager); mShadowApplication = Shadows.shadowOf((Application) mContext); // Setup Settings app as a system app ShadowPackageManager shadowPm = Shadows.shadowOf(mContext.getPackageManager()); Loading Loading @@ -187,6 +193,28 @@ public class HighContrastTextMigrationReceiverTest { verifyNotificationNotSent(); } @Test @EnableFlags(Flags.FLAG_HIGH_CONTRAST_TEXT_SMALL_TEXT_RECT) public void onReceive_openSettingsIntent_openHighContrastTextPreference() { Intent intent = new Intent(ACTION_OPEN_SETTINGS); mReceiver.onReceive(mContext, intent); List<Intent> broadcastIntents = mShadowApplication.getBroadcastIntents(); assertThat(broadcastIntents.size()).isEqualTo(1); assertThat(broadcastIntents.get(0).getAction()) .isEqualTo(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); Intent startedActivitie = mShadowApplication.getNextStartedActivity(); assertThat(startedActivitie).isNotNull(); Bundle fragmentArgs = startedActivitie.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); assertThat(fragmentArgs).isNotNull(); assertThat(fragmentArgs.getString(EXTRA_FRAGMENT_ARG_KEY)) .isEqualTo(TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID); assertThat(notification).isNull(); } private void verifyNotificationNotSent() { Notification notification = mShadowNotificationManager.getNotification(NOTIFICATION_ID); assertThat(notification).isNull(); Loading @@ -210,13 +238,6 @@ public class HighContrastTextMigrationReceiverTest { assertThat(notification.actions.length).isEqualTo(1); assertThat(notification.actions[0].title.toString()).isEqualTo( mContext.getString(R.string.accessibility_notification_high_contrast_text_action)); PendingIntent pendingIntent = notification.actions[0].actionIntent; Intent settingsIntent = Shadows.shadowOf(pendingIntent).getSavedIntent(); Bundle fragmentArgs = settingsIntent.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); assertThat(fragmentArgs).isNotNull(); assertThat(fragmentArgs.getString(EXTRA_FRAGMENT_ARG_KEY)) .isEqualTo(TextReadingPreferenceFragment.HIGH_TEXT_CONTRAST_KEY); } private void assertPromptStateAndHctState( Loading