Remove toggle switch on accessibility preference fragment detach
BUG: 13169998
Change-Id: Id6bac95feb53fec7bb56e6af5c7f5e407e8eba55
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
index 324c595..49e31cf 100644
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
@@ -69,6 +69,7 @@
private CaptioningManager mCaptioningManager;
private SubtitleView mPreviewText;
private View mPreviewWindow;
+ private ToggleSwitch mToggleSwitch;
// Standard options.
private LocalePreference mLocale;
@@ -124,13 +125,38 @@
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 @@
}
}
- 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 d56e37c..03f9072 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -18,6 +18,7 @@
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 @@
@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 @@
}
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) {