From 820dc4c910e81fb8576dfcca2d64632f81c402b0 Mon Sep 17 00:00:00 2001 From: Przemyslaw Szczepaniak Date: Wed, 28 Nov 2012 16:18:22 +0000 Subject: [PATCH] Fix radio buttons when user cancel TTS engine change When user decides to change tts engine, and if it's not system one, then he sees dialog warning about possibility of sending all kinds of data to the engine. If user chooses to not changes engine, radio button still sticks to the new position. This change delays all operations regarding changing current engine after user closes dialog. It also unsets the radio button if user chooses to cancel it. Bug: 7628362 Change-Id: I977abe71b3547f2545a971fc0d69179be6fafb44 --- .../settings/tts/TextToSpeechSettings.java | 33 +--------- .../settings/tts/TtsEnginePreference.java | 66 +++++++++++++++++-- 2 files changed, 60 insertions(+), 39 deletions(-) diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java index 847c7089659..ab2ecc75a23 100644 --- a/src/com/android/settings/tts/TextToSpeechSettings.java +++ b/src/com/android/settings/tts/TextToSpeechSettings.java @@ -26,7 +26,6 @@ import com.android.settings.tts.TtsEnginePreference.RadioButtonGroupState; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.ContentResolver; -import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.preference.ListPreference; @@ -358,27 +357,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements mDefaultRatePref.setEnabled(enable); } - private void displayDataAlert(final String key) { - Log.i(TAG, "Displaying data alert for :" + key); - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setTitle(android.R.string.dialog_alert_title); - builder.setIconAttribute(android.R.attr.alertDialogIcon); - builder.setMessage(getActivity().getString( - R.string.tts_engine_security_warning, mEnginesHelper.getEngineInfo(key).label)); - builder.setCancelable(true); - builder.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - updateDefaultEngine(key); - } - }); - builder.setNegativeButton(android.R.string.cancel, null); - - AlertDialog dialog = builder.create(); - dialog.show(); - } - private void displayNetworkAlert() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(android.R.string.dialog_alert_title); @@ -496,11 +474,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements updateWidgetState(true); } - private boolean shouldDisplayDataAlert(String engine) { - final EngineInfo info = mEnginesHelper.getEngineInfo(engine); - return !info.system; - } - @Override public Checkable getCurrentChecked() { return mCurrentChecked; @@ -519,11 +492,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements @Override public void setCurrentKey(String key) { mCurrentEngine = key; - if (shouldDisplayDataAlert(mCurrentEngine)) { - displayDataAlert(mCurrentEngine); - } else { - updateDefaultEngine(mCurrentEngine); - } + updateDefaultEngine(mCurrentEngine); } } diff --git a/src/com/android/settings/tts/TtsEnginePreference.java b/src/com/android/settings/tts/TtsEnginePreference.java index 3d612f0644c..80c4ac74fed 100644 --- a/src/com/android/settings/tts/TtsEnginePreference.java +++ b/src/com/android/settings/tts/TtsEnginePreference.java @@ -16,12 +16,15 @@ package com.android.settings.tts; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import android.speech.tts.TextToSpeech.EngineInfo; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Checkable; @@ -34,6 +37,8 @@ import com.android.settings.R; public class TtsEnginePreference extends Preference { + private static final String TAG = "TtsEnginePreference"; + /** * Key for the name of the TTS engine passed in to the engine * settings fragment {@link TtsEngineSettingsFragment}. @@ -173,22 +178,69 @@ public class TtsEnginePreference extends Preference { } } - private void onRadioButtonClicked(CompoundButton buttonView, boolean isChecked) { + private boolean shouldDisplayDataAlert() { + return !mEngineInfo.system; + } + + + private void displayDataAlert( + DialogInterface.OnClickListener positiveOnClickListener, + DialogInterface.OnClickListener negativeOnClickListener) { + Log.i(TAG, "Displaying data alert for :" + mEngineInfo.name); + + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle(android.R.string.dialog_alert_title); + builder.setIconAttribute(android.R.attr.alertDialogIcon); + builder.setMessage(getContext().getString( + R.string.tts_engine_security_warning, mEngineInfo.label)); + builder.setCancelable(true); + builder.setPositiveButton(android.R.string.ok, positiveOnClickListener); + builder.setNegativeButton(android.R.string.cancel, negativeOnClickListener); + + AlertDialog dialog = builder.create(); + dialog.show(); + } + + + private void onRadioButtonClicked(final CompoundButton buttonView, + boolean isChecked) { if (mPreventRadioButtonCallbacks || (mSharedState.getCurrentChecked() == buttonView)) { return; } if (isChecked) { - if (mSharedState.getCurrentChecked() != null) { - mSharedState.getCurrentChecked().setChecked(false); + // Should we alert user? if that's true, delay making engine current one. + if (shouldDisplayDataAlert()) { + displayDataAlert(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + makeCurrentEngine(buttonView); + } + },new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Undo the click. + buttonView.setChecked(false); + } + }); + } else { + // Privileged engine, set it current + makeCurrentEngine(buttonView); } - mSharedState.setCurrentChecked(buttonView); - mSharedState.setCurrentKey(getKey()); - callChangeListener(mSharedState.getCurrentKey()); + } else { + mSettingsIcon.setEnabled(false); } + } - mSettingsIcon.setEnabled(isChecked); + private void makeCurrentEngine(Checkable current) { + if (mSharedState.getCurrentChecked() != null) { + mSharedState.getCurrentChecked().setChecked(false); + } + mSharedState.setCurrentChecked(current); + mSharedState.setCurrentKey(getKey()); + callChangeListener(mSharedState.getCurrentKey()); + mSettingsIcon.setEnabled(true); }