Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fdc9a1b8 authored by menghanli's avatar menghanli
Browse files

Fix ClassCastException when users starts A11y vision settings from out of setup flow

Root cause: Launch A11y vision settings from out of setup flow would not apply setup wizard theme (SettingsPreferenceTheme_SetupWizard). This throws ClassCastException when converting the layout to support auto-switching two-panel pattern.
Solution: Only converting the layout if launched in setup flow.

Bug: 269267419
Test: Manual testing by `adb shell am start -n com.android.settings/com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity` for out of setup flow cases & 'adb shell am start -a android.intent.action.MAIN -n com.google.android.setupwizard/.SetupWizardTestActivity' for setup flow.

Change-Id: I16871b2fa800dd1de539b7b4b96c32ce7b2cd5c9
parent 408a4045
Loading
Loading
Loading
Loading
+21 −15
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ public class AccessibilitySettingsForSetupWizard extends DashboardFragment
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        if (view instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
            final String title = getContext().getString(R.string.vision_settings_title);
            final String description = getContext().getString(R.string.vision_settings_description);
@@ -95,18 +96,23 @@ public class AccessibilitySettingsForSetupWizard extends DashboardFragment
                    description, icon);

            final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
        AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done, () -> {
            AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done,
                    () -> {
                        setResult(RESULT_CANCELED);
                        finish();
                    });
        }
    }

    @Override
    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
        if (parent instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
            return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
        }
        return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
    }

    @Override
    public void onCreate(Bundle icicle) {
+7 −8
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.os.Bundle;
import android.view.Menu;
import android.view.accessibility.AccessibilityEvent;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;

@@ -33,16 +32,13 @@ import com.android.settings.support.actionbar.HelpResourceProvider;
import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.transition.SettingsTransitionHelper;

import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.util.ThemeHelper;

public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {

    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());
@@ -101,8 +97,11 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit
    }

    private void applyTheme() {
        final boolean isAnySetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
        if (isAnySetupWizard) {
            setTheme(SetupWizardUtils.getTheme(this, getIntent()));
            setTheme(R.style.SettingsPreferenceTheme_SetupWizard);
            ThemeHelper.trySetDynamicColor(this);
        }
    }
}
+24 −18
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ public class TextReadingPreferenceFragmentForSetupWizard extends TextReadingPref
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        if (view instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
            final String title = getContext().getString(
                    R.string.accessibility_text_reading_options_title);
@@ -54,7 +55,8 @@ public class TextReadingPreferenceFragmentForSetupWizard extends TextReadingPref
                    /* description= */ null, icon);

            final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
        AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done, () -> {
            AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done,
                    () -> {
                        setResult(RESULT_CANCELED);
                        finish();
                    });
@@ -63,13 +65,17 @@ public class TextReadingPreferenceFragmentForSetupWizard extends TextReadingPref
                    () -> showDialog(DIALOG_RESET_SETTINGS)
            );
        }
    }

    @Override
    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
        if (parent instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
            return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
        }
        return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
    }

    @Override
    public int getMetricsCategory() {
+22 −16
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        if (view instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
            final String title = getContext().getString(
                    R.string.accessibility_screen_magnification_title);
@@ -49,10 +50,12 @@ public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard
                    description, icon);

            final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
        AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done, () -> {
            AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done,
                    () -> {
                        setResult(RESULT_CANCELED);
                        finish();
                    });
        }

        hidePreferenceSettingComponents();
    }
@@ -78,9 +81,12 @@ public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard
    @Override
    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
        if (parent instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
            return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
        }
        return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
    }

    @Override
    public int getMetricsCategory() {
+19 −13
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ public class ToggleScreenReaderPreferenceFragmentForSetupWizard
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        if (view instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
            final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE);
            final String description = getContext().getString(R.string.talkback_summary);
@@ -49,10 +50,12 @@ public class ToggleScreenReaderPreferenceFragmentForSetupWizard
                    description, icon);

            final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
        AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done, () -> {
            AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done,
                    () -> {
                        setResult(RESULT_CANCELED);
                        finish();
                    });
        }

        mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked();
        if (mTopIntroPreference != null) {
@@ -63,9 +66,12 @@ public class ToggleScreenReaderPreferenceFragmentForSetupWizard
    @Override
    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
        if (parent instanceof GlifPreferenceLayout) {
            final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
            return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
        }
        return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
    }

    @Override
    public int getMetricsCategory() {
Loading