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
This commit is contained in:
@@ -87,25 +87,31 @@ public class AccessibilitySettingsForSetupWizard extends DashboardFragment
|
|||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
if (view instanceof GlifPreferenceLayout) {
|
||||||
final String title = getContext().getString(R.string.vision_settings_title);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
||||||
final String description = getContext().getString(R.string.vision_settings_description);
|
final String title = getContext().getString(R.string.vision_settings_title);
|
||||||
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
final String description = getContext().getString(R.string.vision_settings_description);
|
||||||
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
||||||
description, icon);
|
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
||||||
|
description, icon);
|
||||||
|
|
||||||
final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
|
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();
|
setResult(RESULT_CANCELED);
|
||||||
});
|
finish();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
if (parent instanceof GlifPreferenceLayout) {
|
||||||
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
||||||
|
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
|
}
|
||||||
|
return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -20,7 +20,6 @@ import android.os.Bundle;
|
|||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.accessibility.AccessibilityEvent;
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
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.core.instrumentation.Instrumentable;
|
||||||
import com.android.settingslib.transition.SettingsTransitionHelper;
|
import com.android.settingslib.transition.SettingsTransitionHelper;
|
||||||
|
|
||||||
|
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||||
import com.google.android.setupdesign.util.ThemeHelper;
|
import com.google.android.setupdesign.util.ThemeHelper;
|
||||||
|
|
||||||
public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {
|
public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {
|
||||||
|
|
||||||
private static final String SAVE_KEY_TITLE = "activity_title";
|
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
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle savedState) {
|
protected void onSaveInstanceState(Bundle savedState) {
|
||||||
savedState.putCharSequence(SAVE_KEY_TITLE, getTitle());
|
savedState.putCharSequence(SAVE_KEY_TITLE, getTitle());
|
||||||
@@ -101,8 +97,11 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void applyTheme() {
|
private void applyTheme() {
|
||||||
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
|
final boolean isAnySetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
|
||||||
setTheme(R.style.SettingsPreferenceTheme_SetupWizard);
|
if (isAnySetupWizard) {
|
||||||
ThemeHelper.trySetDynamicColor(this);
|
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
|
||||||
|
setTheme(R.style.SettingsPreferenceTheme_SetupWizard);
|
||||||
|
ThemeHelper.trySetDynamicColor(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -45,30 +45,36 @@ public class TextReadingPreferenceFragmentForSetupWizard extends TextReadingPref
|
|||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
if (view instanceof GlifPreferenceLayout) {
|
||||||
final String title = getContext().getString(
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
||||||
R.string.accessibility_text_reading_options_title);
|
final String title = getContext().getString(
|
||||||
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
R.string.accessibility_text_reading_options_title);
|
||||||
icon.setTintList(Utils.getColorAttr(getContext(), android.R.attr.colorPrimary));
|
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
||||||
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
icon.setTintList(Utils.getColorAttr(getContext(), android.R.attr.colorPrimary));
|
||||||
/* description= */ null, icon);
|
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
||||||
|
/* description= */ null, icon);
|
||||||
|
|
||||||
final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
|
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();
|
setResult(RESULT_CANCELED);
|
||||||
});
|
finish();
|
||||||
AccessibilitySetupWizardUtils.setSecondaryButton(getContext(), mixin,
|
});
|
||||||
R.string.accessibility_text_reading_reset_button_title,
|
AccessibilitySetupWizardUtils.setSecondaryButton(getContext(), mixin,
|
||||||
() -> showDialog(DIALOG_RESET_SETTINGS)
|
R.string.accessibility_text_reading_reset_button_title,
|
||||||
);
|
() -> showDialog(DIALOG_RESET_SETTINGS)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
if (parent instanceof GlifPreferenceLayout) {
|
||||||
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
||||||
|
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
|
}
|
||||||
|
return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -39,20 +39,23 @@ public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard
|
|||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
if (view instanceof GlifPreferenceLayout) {
|
||||||
final String title = getContext().getString(
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
||||||
R.string.accessibility_screen_magnification_title);
|
final String title = getContext().getString(
|
||||||
final String description = getContext().getString(
|
R.string.accessibility_screen_magnification_title);
|
||||||
R.string.accessibility_screen_magnification_intro_text);
|
final String description = getContext().getString(
|
||||||
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
R.string.accessibility_screen_magnification_intro_text);
|
||||||
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
||||||
description, icon);
|
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
||||||
|
description, icon);
|
||||||
|
|
||||||
final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
|
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();
|
setResult(RESULT_CANCELED);
|
||||||
});
|
finish();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
hidePreferenceSettingComponents();
|
hidePreferenceSettingComponents();
|
||||||
}
|
}
|
||||||
@@ -78,8 +81,11 @@ public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard
|
|||||||
@Override
|
@Override
|
||||||
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
if (parent instanceof GlifPreferenceLayout) {
|
||||||
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
||||||
|
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
|
}
|
||||||
|
return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -41,18 +41,21 @@ public class ToggleScreenReaderPreferenceFragmentForSetupWizard
|
|||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
if (view instanceof GlifPreferenceLayout) {
|
||||||
final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
||||||
final String description = getContext().getString(R.string.talkback_summary);
|
final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE);
|
||||||
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
final String description = getContext().getString(R.string.talkback_summary);
|
||||||
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
||||||
description, icon);
|
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
||||||
|
description, icon);
|
||||||
|
|
||||||
final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
|
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();
|
setResult(RESULT_CANCELED);
|
||||||
});
|
finish();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked();
|
mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked();
|
||||||
if (mTopIntroPreference != null) {
|
if (mTopIntroPreference != null) {
|
||||||
@@ -63,8 +66,11 @@ public class ToggleScreenReaderPreferenceFragmentForSetupWizard
|
|||||||
@Override
|
@Override
|
||||||
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
if (parent instanceof GlifPreferenceLayout) {
|
||||||
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
||||||
|
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
|
}
|
||||||
|
return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -41,18 +41,21 @@ public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard
|
|||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
if (view instanceof GlifPreferenceLayout) {
|
||||||
final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
|
||||||
final String description = getContext().getString(R.string.select_to_speak_summary);
|
final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE);
|
||||||
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
final String description = getContext().getString(R.string.select_to_speak_summary);
|
||||||
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
|
||||||
description, icon);
|
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
|
||||||
|
description, icon);
|
||||||
|
|
||||||
final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
|
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();
|
setResult(RESULT_CANCELED);
|
||||||
});
|
finish();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked();
|
mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked();
|
||||||
if (mTopIntroPreference != null) {
|
if (mTopIntroPreference != null) {
|
||||||
@@ -63,8 +66,11 @@ public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard
|
|||||||
@Override
|
@Override
|
||||||
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
if (parent instanceof GlifPreferenceLayout) {
|
||||||
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
|
||||||
|
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
|
}
|
||||||
|
return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user