Font size page support light theme in deferred setup.

Bug:124470158
Test: atest & manually test
Change-Id: I41e1e98a9a64e516a294c4a94c8b5f335434078f
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8e62f7f..aa48ed3 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1445,6 +1445,16 @@
                 <action android:name="android.settings.ACCESSIBILITY_SETTINGS_FOR_SUW" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.accessibility.AccessibilitySettingsForSetupWizard" />
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                android:value="true" />
+        </activity>
+
+        <activity-alias
+            android:name=".FontSizeSettingsForSetupWizardActivity"
+            android:exported="true"
+            android:targetActivity=".accessibility.AccessibilitySettingsForSetupWizardActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.suggested.category.DISPLAY_SETTINGS" />
@@ -1455,9 +1465,7 @@
                 android:value="true" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accessibility.AccessibilitySettingsForSetupWizard" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                android:value="true" />
-        </activity>
+        </activity-alias>
 
         <activity
             android:name="Settings$AccessibilityDaltonizerSettingsActivity"
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 4edd943..ce4eaaf 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -231,4 +231,17 @@
         <item name="android:textColorSecondary">@*android:color/secondary_text_light</item>
     </style>
 
+    <!-- Light theme for those pages inherit SubSettings and launched during setup flow -->
+    <style name="LightTheme.SubSettings.SetupWizard" parent="@android:style/Theme.DeviceDefault.Light">
+        <item name="android:windowLightStatusBar">true</item>
+        <item name="android:statusBarColor">@android:color/white</item>
+        <item name="android:navigationBarColor">@android:color/white</item>
+        <item name="android:windowLightNavigationBar">true</item>
+        <item name="android:windowBackground">@android:color/white</item>
+        <item name="android:navigationBarDividerColor">@*android:color/navigation_bar_divider_device_default_settings</item>
+
+        <item name="android:colorPrimary">@android:color/white</item>
+        <item name="android:colorPrimaryDark">@android:color/white</item>
+        <item name="android:colorAccent">@color/material_blue_700</item>
+    </style>
 </resources>
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 4ac4be4..383585c 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -51,7 +51,6 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.settings.Settings.WifiSettingsActivity;
 import com.android.settings.applications.manageapplications.ManageApplications;
-import com.android.settings.backup.BackupSettingsHelper;
 import com.android.settings.backup.UserBackupSettingsActivity;
 import com.android.settings.core.OnActivityResultListener;
 import com.android.settings.core.SettingsBaseActivity;
@@ -67,6 +66,8 @@
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
 import com.android.settingslib.drawer.DashboardCategory;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -243,8 +244,10 @@
                 intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
 
         // If this is a sub settings, then apply the SubSettings Theme for the ActionBar content
-        // insets
-        if (isSubSettings) {
+        // insets.
+        // If this is in setup flow, don't apply theme. Because light theme needs to be applied
+        // in SettingsBaseActivity#onCreate().
+        if (isSubSettings && !WizardManagerHelper.isAnySetupWizard(getIntent())) {
             setTheme(R.style.Theme_SubSettings);
         }
 
diff --git a/src/com/android/settings/SetupWizardUtils.java b/src/com/android/settings/SetupWizardUtils.java
index 077d94c..bce6f3f 100644
--- a/src/com/android/settings/SetupWizardUtils.java
+++ b/src/com/android/settings/SetupWizardUtils.java
@@ -16,12 +16,18 @@
 
 package com.android.settings;
 
+import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_FIRST_RUN;
+import static com.google.android.setupcompat.util.WizardManagerHelper.EXTRA_IS_SETUP_FLOW;
+
 import android.content.Intent;
+import android.os.Bundle;
 import android.sysprop.SetupWizardProperties;
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
 import com.google.android.setupdesign.util.ThemeHelper;
 
+import java.util.Arrays;
+
 
 public class SetupWizardUtils {
 
@@ -90,4 +96,14 @@
     public static void copySetupExtras(Intent fromIntent, Intent toIntent) {
         WizardManagerHelper.copyWizardManagerExtras(fromIntent, toIntent);
     }
+
+    public static Bundle copyLifecycleExtra(Bundle srcBundle, Bundle dstBundle) {
+        for (String key :
+                Arrays.asList(
+                        EXTRA_IS_FIRST_RUN,
+                        EXTRA_IS_SETUP_FLOW)) {
+            dstBundle.putBoolean(key, srcBundle.getBoolean(key, false));
+        }
+        return dstBundle;
+    }
 }
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index 8f0819e..0ed1644 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -16,7 +16,9 @@
 
 package com.android.settings.accessibility;
 
+import android.content.ComponentName;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.Menu;
 import android.view.accessibility.AccessibilityEvent;
 
@@ -25,6 +27,7 @@
 import androidx.preference.PreferenceFragmentCompat;
 
 import com.android.settings.SettingsActivity;
+import com.android.settings.SetupWizardUtils;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
 import com.android.settings.search.actionbar.SearchMenuController;
@@ -35,10 +38,12 @@
 
 public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {
 
+    private static final String LOG_TAG = "A11ySettingsForSUW";
     private static final String SAVE_KEY_TITLE = "activity_title";
 
     @VisibleForTesting
-    static final String EXTRA_GO_TO_FONT_SIZE_PREFERENCE = "go_to_font_size_preference";
+    static final String CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW =
+            "com.android.settings.FontSizeSettingsForSetupWizardActivity";
 
     @Override
     protected void onSaveInstanceState(Bundle savedState) {
@@ -91,21 +96,27 @@
     protected void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
-        tryLaunchFontSizePreference();
+        tryLaunchFontSizeSettings();
     }
 
     @VisibleForTesting
-    void tryLaunchFontSizePreference() {
-        if (WizardManagerHelper.isAnySetupWizard(getIntent()) && getIntent().getBooleanExtra(
-                EXTRA_GO_TO_FONT_SIZE_PREFERENCE, false)) {
-            Bundle args = new Bundle();
+    void tryLaunchFontSizeSettings() {
+        if (WizardManagerHelper.isAnySetupWizard(getIntent())
+                && new ComponentName(getPackageName(),
+                CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW).equals(
+                getIntent().getComponent())) {
+            final Bundle args = new Bundle();
             args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0);
             args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false);
-            new SubSettingLauncher(this)
+            final SubSettingLauncher subSettingLauncher = new SubSettingLauncher(this)
                     .setDestination(FontSizePreferenceFragmentForSetupWizard.class.getName())
                     .setArguments(args)
                     .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN)
-                    .launch();
+                    .setExtras(SetupWizardUtils.copyLifecycleExtra(getIntent().getExtras(),
+                            new Bundle()));
+
+            Log.d(LOG_TAG, "Launch font size settings");
+            subSettingLauncher.launch();
             finish();
         }
     }
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index cd13654..5ff81d5 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -37,8 +37,11 @@
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.settings.R;
+import com.android.settings.SubSettings;
 import com.android.settings.dashboard.CategoryManager;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -65,6 +68,10 @@
         if (!theme.getBoolean(android.R.styleable.Theme_windowNoTitle, false)) {
             requestWindowFeature(Window.FEATURE_NO_TITLE);
         }
+        // Apply SetupWizard light theme during setup flow. This is for SubSettings pages.
+        if (WizardManagerHelper.isAnySetupWizard(getIntent()) && this instanceof SubSettings) {
+            setTheme(R.style.LightTheme_SubSettings_SetupWizard);
+        }
         super.setContentView(R.layout.settings_base_layout);
 
         final Toolbar toolbar = findViewById(R.id.action_bar);
diff --git a/src/com/android/settings/core/SubSettingLauncher.java b/src/com/android/settings/core/SubSettingLauncher.java
index 39ecd78..5d9a528 100644
--- a/src/com/android/settings/core/SubSettingLauncher.java
+++ b/src/com/android/settings/core/SubSettingLauncher.java
@@ -19,6 +19,7 @@
 import android.annotation.StringRes;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.text.TextUtils;
@@ -89,6 +90,11 @@
         return this;
     }
 
+    public SubSettingLauncher setExtras(Bundle extras) {
+        mLaunchRequest.extras = extras;
+        return this;
+    }
+
     public SubSettingLauncher setSourceMetricsCategory(int sourceMetricsCategory) {
         mLaunchRequest.sourceMetricsCategory = sourceMetricsCategory;
         return this;
@@ -136,6 +142,7 @@
 
     public Intent toIntent() {
         final Intent intent = new Intent(Intent.ACTION_MAIN);
+        copyExtras(intent);
         intent.setClass(mContext, SubSettings.class);
         if (TextUtils.isEmpty(mLaunchRequest.destinationName)) {
             throw new IllegalArgumentException("Destination fragment must be set");
@@ -180,6 +187,11 @@
         listener.startActivityForResult(intent, requestCode);
     }
 
+    private void copyExtras(Intent intent) {
+        if (mLaunchRequest.extras != null) {
+            intent.replaceExtras(mLaunchRequest.extras);
+        }
+    }
     /**
      * Simple container that has information about how to launch a subsetting.
      */
@@ -194,5 +206,6 @@
         int mRequestCode;
         UserHandle userHandle;
         Bundle arguments;
+        Bundle extras;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java b/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
index b965d78..5f4f31b 100644
--- a/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
@@ -19,6 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Intent;
+import android.os.Bundle;
 import android.sysprop.SetupWizardProperties;
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -31,9 +32,6 @@
 @RunWith(RobolectricTestRunner.class)
 public class SetupWizardUtilsTest {
 
-    private static final String EXTRA_IS_SETUP_FLOW = "isSetupFlow";
-    private static final String EXTRA_IS_FIRST_RUN = "firstRun";
-
     @Test
     public void testCopySetupExtras() {
         Intent fromIntent = new Intent();
@@ -46,6 +44,25 @@
         assertThat(theme).isEqualTo(toIntent.getStringExtra(WizardManagerHelper.EXTRA_THEME));
         assertThat(toIntent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, false))
                 .isTrue();
+        assertThat(toIntent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true))
+                .isFalse();
+    }
+
+    @Test
+    public void testCopyLifecycleExtra() {
+        Intent fromIntent = new Intent();
+        final String theme = "TEST_THEME";
+        fromIntent.putExtra(WizardManagerHelper.EXTRA_THEME, theme);
+        fromIntent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true);
+        Bundle dstBundle = new Bundle();
+        dstBundle = SetupWizardUtils.copyLifecycleExtra(fromIntent.getExtras(), dstBundle);
+
+        assertThat(dstBundle).isNotNull();
+        assertThat(dstBundle.getString(WizardManagerHelper.EXTRA_THEME)).isNull();
+        assertThat(dstBundle.getBoolean(WizardManagerHelper.EXTRA_IS_SETUP_FLOW))
+                .isTrue();
+        assertThat(dstBundle.getBoolean(WizardManagerHelper.EXTRA_IS_FIRST_RUN))
+                .isFalse();
     }
 
     @Test
@@ -87,7 +104,7 @@
 
     private Intent createSetupWizardIntent() {
         return new Intent()
-                .putExtra(EXTRA_IS_SETUP_FLOW, true)
-                .putExtra(EXTRA_IS_FIRST_RUN, true);
+                .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)
+                .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
index 3d82bef..c3a630b 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
@@ -16,10 +16,11 @@
 
 package com.android.settings.accessibility;
 
-import static com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity.EXTRA_GO_TO_FONT_SIZE_PREFERENCE;
+import static com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity.CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import android.content.ComponentName;
 import android.content.Intent;
 
 import androidx.test.filters.SmallTest;
@@ -28,11 +29,13 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
 
-import org.junit.Ignore;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.Shadows;
 
 @RunWith(RobolectricTestRunner.class)
@@ -49,14 +52,15 @@
   }
 
   @Test
-  @Ignore
-  public void onCreate_whenHasFontSizeExtra_shouldGoToFontSizePreferenceDirectly() {
+  public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() {
     AccessibilitySettingsForSetupWizardActivity activity =
             Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
-                    new Intent().putExtra(EXTRA_GO_TO_FONT_SIZE_PREFERENCE, true).
-                                 putExtra("isSetupFlow", true)).get();
+                    new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName(
+                            RuntimeEnvironment.application, CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW)).
+                            putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true).
+                            putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get();
 
-    activity.tryLaunchFontSizePreference();
+    activity.tryLaunchFontSizeSettings();
 
     final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
     assertThat(launchIntent).isNotNull();
@@ -64,4 +68,19 @@
             FontSizePreferenceFragmentForSetupWizard.class.getName());
     assertThat(activity.isFinishing()).isTrue();
   }
+
+  @Test
+  public void onCreate_noFontSizeComponent_shouldNotFinishCurrentActivity() {
+    AccessibilitySettingsForSetupWizardActivity activity =
+            Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
+                    new Intent(Intent.ACTION_MAIN).
+                            putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true).
+                            putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get();
+
+    activity.tryLaunchFontSizeSettings();
+
+    final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
+    assertThat(launchIntent).isNull();
+    assertThat(activity.isFinishing()).isFalse();
+  }
 }