diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8e62c452d35..4c7446b5b23 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1447,6 +1447,16 @@
+
+
+
+
+
@@ -1457,9 +1467,7 @@
android:value="true" />
-
-
+
@*android:color/secondary_text_light
+
+
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 4ac4be4b209..383585c59a4 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -51,7 +51,6 @@ import androidx.preference.PreferenceManager;
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.core.instrumentation.SharedPreferencesLogger;
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 @@ public class SettingsActivity extends SettingsBaseActivity
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 077d94c51d9..bce6f3f2919 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 class SetupWizardUtils {
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 fc68d2caf04..0ed1644f522 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -16,23 +16,35 @@
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;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
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;
import com.android.settings.support.actionbar.HelpResourceProvider;
import com.android.settingslib.core.instrumentation.Instrumentable;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
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 CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW =
+ "com.android.settings.FontSizeSettingsForSetupWizardActivity";
+
@Override
protected void onSaveInstanceState(Bundle savedState) {
savedState.putCharSequence(SAVE_KEY_TITLE, getTitle());
@@ -79,4 +91,33 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit
.launch();
return true;
}
+
+ @Override
+ protected void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+
+ tryLaunchFontSizeSettings();
+ }
+
+ @VisibleForTesting
+ 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);
+ final SubSettingLauncher subSettingLauncher = new SubSettingLauncher(this)
+ .setDestination(FontSizePreferenceFragmentForSetupWizard.class.getName())
+ .setArguments(args)
+ .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN)
+ .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 cd1365404c8..5ff81d54aa6 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -37,8 +37,11 @@ import android.widget.Toolbar;
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 @@ public class SettingsBaseActivity extends FragmentActivity {
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 39ecd7875d5..5d9a5282021 100644
--- a/src/com/android/settings/core/SubSettingLauncher.java
+++ b/src/com/android/settings/core/SubSettingLauncher.java
@@ -19,6 +19,7 @@ package com.android.settings.core;
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 @@ public class SubSettingLauncher {
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 class SubSettingLauncher {
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 @@ public class SubSettingLauncher {
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 @@ public class SubSettingLauncher {
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 b965d788338..5f4f31b6ed3 100644
--- a/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
@@ -19,6 +19,7 @@ package com.android.settings;
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 @@ import org.robolectric.RobolectricTestRunner;
@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 @@ public class SetupWizardUtilsTest {
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 @@ public class SetupWizardUtilsTest {
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 a0a9de9c88a..c3a630b0670 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
@@ -16,18 +16,27 @@
package com.android.settings.accessibility;
+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;
import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
+
+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)
@SmallTest
@@ -41,4 +50,37 @@ public class AccessibilitySettingsForSetupWizardActivityTest {
assertThat(activity.getThemeResId()).isEqualTo(R.style.GlifV3Theme_Light);
}
+
+ @Test
+ public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() {
+ AccessibilitySettingsForSetupWizardActivity activity =
+ Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
+ 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.tryLaunchFontSizeSettings();
+
+ final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
+ assertThat(launchIntent).isNotNull();
+ assertThat(launchIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo(
+ 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();
+ }
}