diff --git a/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java b/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java index 803546707fd..8e311858f51 100644 --- a/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java +++ b/src/com/android/settings/accessibility/HighContrastTextMigrationReceiver.java @@ -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) @@ -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(), @@ -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 @@ -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; + } } diff --git a/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java b/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java index 1b663936fcb..b0864aa1073 100644 --- a/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/HighContrastTextMigrationReceiverTest.java @@ -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; @@ -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; @@ -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 { @@ -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 @@ -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()); @@ -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 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(); @@ -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(