Font size page support light theme in deferred setup.

Bug:124470158
Test: atest & manually test
Change-Id: I41e1e98a9a64e516a294c4a94c8b5f335434078f
This commit is contained in:
cnchen
2019-05-06 10:19:10 +08:00
parent 82adb00c8c
commit 7a83d51a6b
9 changed files with 133 additions and 26 deletions

View File

@@ -1445,6 +1445,16 @@
<action android:name="android.settings.ACCESSIBILITY_SETTINGS_FOR_SUW" /> <action android:name="android.settings.ACCESSIBILITY_SETTINGS_FOR_SUW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </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> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="com.android.settings.suggested.category.DISPLAY_SETTINGS" /> <category android:name="com.android.settings.suggested.category.DISPLAY_SETTINGS" />
@@ -1455,9 +1465,7 @@
android:value="true" /> android:value="true" />
<meta-data android:name="com.android.settings.FRAGMENT_CLASS" <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.accessibility.AccessibilitySettingsForSetupWizard" /> android:value="com.android.settings.accessibility.AccessibilitySettingsForSetupWizard" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED" </activity-alias>
android:value="true" />
</activity>
<activity <activity
android:name="Settings$AccessibilityDaltonizerSettingsActivity" android:name="Settings$AccessibilityDaltonizerSettingsActivity"

View File

@@ -231,4 +231,17 @@
<item name="android:textColorSecondary">@*android:color/secondary_text_light</item> <item name="android:textColorSecondary">@*android:color/secondary_text_light</item>
</style> </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> </resources>

View File

@@ -51,7 +51,6 @@ import androidx.preference.PreferenceManager;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
import com.android.settings.Settings.WifiSettingsActivity; import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.backup.BackupSettingsHelper;
import com.android.settings.backup.UserBackupSettingsActivity; import com.android.settings.backup.UserBackupSettingsActivity;
import com.android.settings.core.OnActivityResultListener; import com.android.settings.core.OnActivityResultListener;
import com.android.settings.core.SettingsBaseActivity; 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.development.DevelopmentSettingsEnabler;
import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.DashboardCategory;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -243,8 +244,10 @@ public class SettingsActivity extends SettingsBaseActivity
intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false); intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
// If this is a sub settings, then apply the SubSettings Theme for the ActionBar content // If this is a sub settings, then apply the SubSettings Theme for the ActionBar content
// insets // insets.
if (isSubSettings) { // 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); setTheme(R.style.Theme_SubSettings);
} }

View File

@@ -16,12 +16,18 @@
package com.android.settings; 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.content.Intent;
import android.os.Bundle;
import android.sysprop.SetupWizardProperties; import android.sysprop.SetupWizardProperties;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.util.ThemeHelper; import com.google.android.setupdesign.util.ThemeHelper;
import java.util.Arrays;
public class SetupWizardUtils { public class SetupWizardUtils {
@@ -90,4 +96,14 @@ public class SetupWizardUtils {
public static void copySetupExtras(Intent fromIntent, Intent toIntent) { public static void copySetupExtras(Intent fromIntent, Intent toIntent) {
WizardManagerHelper.copyWizardManagerExtras(fromIntent, 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;
}
} }

View File

@@ -16,7 +16,9 @@
package com.android.settings.accessibility; package com.android.settings.accessibility;
import android.content.ComponentName;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityEvent;
@@ -25,6 +27,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SetupWizardUtils;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard; import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
import com.android.settings.search.actionbar.SearchMenuController; import com.android.settings.search.actionbar.SearchMenuController;
@@ -35,10 +38,12 @@ import com.google.android.setupcompat.util.WizardManagerHelper;
public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity { public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {
private static final String LOG_TAG = "A11ySettingsForSUW";
private static final String SAVE_KEY_TITLE = "activity_title"; private static final String SAVE_KEY_TITLE = "activity_title";
@VisibleForTesting @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 @Override
protected void onSaveInstanceState(Bundle savedState) { protected void onSaveInstanceState(Bundle savedState) {
@@ -91,21 +96,27 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit
protected void onCreate(Bundle savedState) { protected void onCreate(Bundle savedState) {
super.onCreate(savedState); super.onCreate(savedState);
tryLaunchFontSizePreference(); tryLaunchFontSizeSettings();
} }
@VisibleForTesting @VisibleForTesting
void tryLaunchFontSizePreference() { void tryLaunchFontSizeSettings() {
if (WizardManagerHelper.isAnySetupWizard(getIntent()) && getIntent().getBooleanExtra( if (WizardManagerHelper.isAnySetupWizard(getIntent())
EXTRA_GO_TO_FONT_SIZE_PREFERENCE, false)) { && new ComponentName(getPackageName(),
Bundle args = new Bundle(); CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW).equals(
getIntent().getComponent())) {
final Bundle args = new Bundle();
args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0); args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0);
args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false); args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false);
new SubSettingLauncher(this) final SubSettingLauncher subSettingLauncher = new SubSettingLauncher(this)
.setDestination(FontSizePreferenceFragmentForSetupWizard.class.getName()) .setDestination(FontSizePreferenceFragmentForSetupWizard.class.getName())
.setArguments(args) .setArguments(args)
.setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN)
.launch(); .setExtras(SetupWizardUtils.copyLifecycleExtra(getIntent().getExtras(),
new Bundle()));
Log.d(LOG_TAG, "Launch font size settings");
subSettingLauncher.launch();
finish(); finish();
} }
} }

View File

@@ -37,8 +37,11 @@ import android.widget.Toolbar;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SubSettings;
import com.android.settings.dashboard.CategoryManager; import com.android.settings.dashboard.CategoryManager;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -65,6 +68,10 @@ public class SettingsBaseActivity extends FragmentActivity {
if (!theme.getBoolean(android.R.styleable.Theme_windowNoTitle, false)) { if (!theme.getBoolean(android.R.styleable.Theme_windowNoTitle, false)) {
requestWindowFeature(Window.FEATURE_NO_TITLE); 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); super.setContentView(R.layout.settings_base_layout);
final Toolbar toolbar = findViewById(R.id.action_bar); final Toolbar toolbar = findViewById(R.id.action_bar);

View File

@@ -19,6 +19,7 @@ package com.android.settings.core;
import android.annotation.StringRes; import android.annotation.StringRes;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.text.TextUtils; import android.text.TextUtils;
@@ -89,6 +90,11 @@ public class SubSettingLauncher {
return this; return this;
} }
public SubSettingLauncher setExtras(Bundle extras) {
mLaunchRequest.extras = extras;
return this;
}
public SubSettingLauncher setSourceMetricsCategory(int sourceMetricsCategory) { public SubSettingLauncher setSourceMetricsCategory(int sourceMetricsCategory) {
mLaunchRequest.sourceMetricsCategory = sourceMetricsCategory; mLaunchRequest.sourceMetricsCategory = sourceMetricsCategory;
return this; return this;
@@ -136,6 +142,7 @@ public class SubSettingLauncher {
public Intent toIntent() { public Intent toIntent() {
final Intent intent = new Intent(Intent.ACTION_MAIN); final Intent intent = new Intent(Intent.ACTION_MAIN);
copyExtras(intent);
intent.setClass(mContext, SubSettings.class); intent.setClass(mContext, SubSettings.class);
if (TextUtils.isEmpty(mLaunchRequest.destinationName)) { if (TextUtils.isEmpty(mLaunchRequest.destinationName)) {
throw new IllegalArgumentException("Destination fragment must be set"); throw new IllegalArgumentException("Destination fragment must be set");
@@ -180,6 +187,11 @@ public class SubSettingLauncher {
listener.startActivityForResult(intent, requestCode); 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. * Simple container that has information about how to launch a subsetting.
*/ */
@@ -194,5 +206,6 @@ public class SubSettingLauncher {
int mRequestCode; int mRequestCode;
UserHandle userHandle; UserHandle userHandle;
Bundle arguments; Bundle arguments;
Bundle extras;
} }
} }

View File

@@ -19,6 +19,7 @@ package com.android.settings;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle;
import android.sysprop.SetupWizardProperties; import android.sysprop.SetupWizardProperties;
import com.google.android.setupcompat.util.WizardManagerHelper; import com.google.android.setupcompat.util.WizardManagerHelper;
@@ -31,9 +32,6 @@ import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class SetupWizardUtilsTest { public class SetupWizardUtilsTest {
private static final String EXTRA_IS_SETUP_FLOW = "isSetupFlow";
private static final String EXTRA_IS_FIRST_RUN = "firstRun";
@Test @Test
public void testCopySetupExtras() { public void testCopySetupExtras() {
Intent fromIntent = new Intent(); Intent fromIntent = new Intent();
@@ -46,6 +44,25 @@ public class SetupWizardUtilsTest {
assertThat(theme).isEqualTo(toIntent.getStringExtra(WizardManagerHelper.EXTRA_THEME)); assertThat(theme).isEqualTo(toIntent.getStringExtra(WizardManagerHelper.EXTRA_THEME));
assertThat(toIntent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, false)) assertThat(toIntent.getBooleanExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, false))
.isTrue(); .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 @Test
@@ -87,7 +104,7 @@ public class SetupWizardUtilsTest {
private Intent createSetupWizardIntent() { private Intent createSetupWizardIntent() {
return new Intent() return new Intent()
.putExtra(EXTRA_IS_SETUP_FLOW, true) .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)
.putExtra(EXTRA_IS_FIRST_RUN, true); .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true);
} }
} }

View File

@@ -16,10 +16,11 @@
package com.android.settings.accessibility; 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 static com.google.common.truth.Truth.assertThat;
import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
@@ -28,11 +29,13 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard; import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
import org.junit.Ignore; import com.google.android.setupcompat.util.WizardManagerHelper;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.Robolectric; import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows; import org.robolectric.Shadows;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@@ -49,14 +52,15 @@ public class AccessibilitySettingsForSetupWizardActivityTest {
} }
@Test @Test
@Ignore public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() {
public void onCreate_whenHasFontSizeExtra_shouldGoToFontSizePreferenceDirectly() {
AccessibilitySettingsForSetupWizardActivity activity = AccessibilitySettingsForSetupWizardActivity activity =
Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
new Intent().putExtra(EXTRA_GO_TO_FONT_SIZE_PREFERENCE, true). new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName(
putExtra("isSetupFlow", true)).get(); 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(); final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
assertThat(launchIntent).isNotNull(); assertThat(launchIntent).isNotNull();
@@ -64,4 +68,19 @@ public class AccessibilitySettingsForSetupWizardActivityTest {
FontSizePreferenceFragmentForSetupWizard.class.getName()); FontSizePreferenceFragmentForSetupWizard.class.getName());
assertThat(activity.isFinishing()).isTrue(); 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();
}
} }