From 061333c26bbb848b8982b04d6043061cb2451a90 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Mon, 24 Feb 2014 17:57:44 -0800 Subject: [PATCH] Remove toggle switch on accessibility preference fragment detach BUG: 13169998 Change-Id: Id6bac95feb53fec7bb56e6af5c7f5e407e8eba55 --- .../CaptionPropertiesFragment.java | 74 +++++++++++++------ .../ToggleFeaturePreferenceFragment.java | 55 +++++++++----- 2 files changed, 88 insertions(+), 41 deletions(-) diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java index 324c595d70c..49e31cfe5ea 100644 --- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java +++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java @@ -69,6 +69,7 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment private CaptioningManager mCaptioningManager; private SubtitleView mPreviewText; private View mPreviewWindow; + private ToggleSwitch mToggleSwitch; // Standard options. private LocalePreference mLocale; @@ -124,13 +125,38 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + final boolean enabled = mCaptioningManager.isEnabled(); mPreviewText = (SubtitleView) view.findViewById(R.id.preview_text); + mPreviewText.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE); + + final Context context = view.getContext(); + final int padding = context.getResources().getDimensionPixelSize( + R.dimen.action_bar_switch_padding); + mToggleSwitch = new ToggleSwitch(context); + mToggleSwitch.setPaddingRelative(0, 0, padding, 0); + mToggleSwitch.setCheckedInternal(enabled); + mPreviewWindow = view.findViewById(R.id.preview_window); - installActionBarToggleSwitch(); + getPreferenceScreen().setEnabled(enabled); + refreshPreviewText(); } + @Override + public void onResume() { + super.onResume(); + + installActionBarToggleSwitch(); + } + + @Override + public void onPause() { + removeActionBarToggleSwitch(); + + super.onPause(); + } + private void refreshPreviewText() { final Context context = getActivity(); if (context == null) { @@ -176,39 +202,41 @@ public class CaptionPropertiesFragment extends SettingsPreferenceFragment } } - private void installActionBarToggleSwitch() { - final Activity activity = getActivity(); - final ToggleSwitch toggleSwitch = new ToggleSwitch(activity); - - final int padding = getResources().getDimensionPixelSize( - R.dimen.action_bar_switch_padding); - toggleSwitch.setPaddingRelative(0, 0, padding, 0); - - final ActionBar actionBar = activity.getActionBar(); - actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM); - - final ActionBar.LayoutParams params = new ActionBar.LayoutParams( - ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, - Gravity.CENTER_VERTICAL | Gravity.END); - actionBar.setCustomView(toggleSwitch, params); - - final boolean enabled = mCaptioningManager.isEnabled(); - getPreferenceScreen().setEnabled(enabled); - mPreviewText.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE); - toggleSwitch.setCheckedInternal(enabled); - toggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { + protected void onInstallActionBarToggleSwitch() { + mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { @Override public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { toggleSwitch.setCheckedInternal(checked); Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, checked ? 1 : 0); getPreferenceScreen().setEnabled(checked); - mPreviewText.setVisibility(checked ? View.VISIBLE : View.INVISIBLE); + if (mPreviewText != null) { + mPreviewText.setVisibility(checked ? View.VISIBLE : View.INVISIBLE); + } return false; } }); } + private void installActionBarToggleSwitch() { + final ActionBar ab = getActivity().getActionBar(); + final ActionBar.LayoutParams params = new ActionBar.LayoutParams( + ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END); + ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM); + ab.setCustomView(mToggleSwitch, params); + + onInstallActionBarToggleSwitch(); + } + + private void removeActionBarToggleSwitch() { + mToggleSwitch.setOnBeforeCheckedChangeListener(null); + + final ActionBar ab = getActivity().getActionBar(); + ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM); + ab.setCustomView(null); + } + private void initializeAllPreferences() { mLocale = (LocalePreference) findPreference(PREF_LOCALE); mFontSize = (ListPreference) findPreference(PREF_FONT_SIZE); diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index d56e37cb44e..03f90726367 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -18,6 +18,7 @@ package com.android.settings.accessibility; import android.app.ActionBar; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; @@ -86,15 +87,28 @@ public abstract class ToggleFeaturePreferenceFragment @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - onInstallActionBarToggleSwitch(); + + final Context context = view.getContext(); + final int padding = context.getResources().getDimensionPixelSize( + R.dimen.action_bar_switch_padding); + mToggleSwitch = new ToggleSwitch(context); + mToggleSwitch.setPaddingRelative(0, 0, padding, 0); + onProcessArguments(getArguments()); } @Override - public void onDestroyView() { - getActivity().getActionBar().setCustomView(null); - mToggleSwitch.setOnBeforeCheckedChangeListener(null); - super.onDestroyView(); + public void onResume() { + super.onResume(); + + installActionBarToggleSwitch(); + } + + @Override + public void onPause() { + removeActionBarToggleSwitch(); + + super.onPause(); } protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled); @@ -108,21 +122,26 @@ public abstract class ToggleFeaturePreferenceFragment } protected void onInstallActionBarToggleSwitch() { - mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity()); + // Implement this to set a checked listener. } - private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) { - ToggleSwitch toggleSwitch = new ToggleSwitch(activity); - final int padding = activity.getResources().getDimensionPixelSize( - R.dimen.action_bar_switch_padding); - toggleSwitch.setPaddingRelative(0, 0, padding, 0); - activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, - ActionBar.DISPLAY_SHOW_CUSTOM); - activity.getActionBar().setCustomView(toggleSwitch, - new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, - ActionBar.LayoutParams.WRAP_CONTENT, - Gravity.CENTER_VERTICAL | Gravity.END)); - return toggleSwitch; + private void installActionBarToggleSwitch() { + final ActionBar ab = getActivity().getActionBar(); + final ActionBar.LayoutParams params = new ActionBar.LayoutParams( + ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END); + ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM); + ab.setCustomView(mToggleSwitch, params); + + onInstallActionBarToggleSwitch(); + } + + private void removeActionBarToggleSwitch() { + mToggleSwitch.setOnBeforeCheckedChangeListener(null); + + final ActionBar ab = getActivity().getActionBar(); + ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_CUSTOM); + ab.setCustomView(null); } public void setTitle(String title) {