From 3eee5cf02e5fda758a1f5e471648d9838a299187 Mon Sep 17 00:00:00 2001 From: cnchen Date: Mon, 6 May 2019 10:19:10 +0800 Subject: [PATCH] Font size page support light theme in deferred setup Bug:124470158 Test: atest & manually test Change-Id: I41e1e98a9a64e516a294c4a94c8b5f335434078f Merged-In: I41e1e98a9a64e516a294c4a94c8b5f335434078f --- AndroidManifest.xml | 14 +++++-- res/values/themes.xml | 13 ++++++ .../android/settings/SettingsActivity.java | 9 ++-- .../android/settings/SetupWizardUtils.java | 16 +++++++ ...ibilitySettingsForSetupWizardActivity.java | 41 ++++++++++++++++++ .../settings/core/SettingsBaseActivity.java | 7 ++++ .../settings/core/SubSettingLauncher.java | 13 ++++++ .../settings/SetupWizardUtilsTest.java | 27 +++++++++--- ...itySettingsForSetupWizardActivityTest.java | 42 +++++++++++++++++++ 9 files changed, 171 insertions(+), 11 deletions(-) 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(); + } }