summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsatok <satok@google.com>2011-10-05 18:49:51 +0900
committersatok <satok@google.com>2011-10-05 19:11:28 +0900
commita43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91 (patch)
tree3aed3a5fa13e28d4cbc95233c3240ffbfae2ad17
parentb965e1ccd78980390be89f95ad0fe38ed81e7657 (diff)
downloadpackages_apps_Settings-a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91.zip
packages_apps_Settings-a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91.tar.gz
packages_apps_Settings-a43dd3962eaf9df8cbd7c8fcf8dab96fcb428b91.tar.bz2
Show a security warning dialog when switching a spell checker
Bug: 5402295 Change-Id: I021e6e923fa137248d23c8fa39e68afdf73fead9
-rw-r--r--res/values/strings.xml7
-rw-r--r--src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java1
-rw-r--r--src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java7
-rw-r--r--src/com/android/settings/inputmethod/SpellCheckersSettings.java57
-rw-r--r--src/com/android/settings/inputmethod/UserDictionaryList.java1
5 files changed, 65 insertions, 8 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7b554bb..7307dff 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2568,6 +2568,13 @@ found in the list of installed apps.</string>
card numbers. It comes from the app
<xliff:g id="ime_application_name">%1$s</xliff:g>.
Use this input method?</string>
+ <!-- Warning message about security implications of enabling a spell checker, displayed as a dialog
+ message when the user selects to enable a spell checker. -->
+ <string name="spellchecker_security_warning">This spell checker may be able to collect
+ all the text you type, including personal data like passwords and credit
+ card numbers. It comes from the app
+ <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
+ Use this spell checker?</string>
<!-- On Language & input settings screen, heading. Inside the "Language & input settings" screen, this is the header for settings that relate to mouse and trackpad devices. [CHAR LIMIT=40] -->
<string name="pointer_settings_category">Mouse/trackpad</string>
<!-- On Language & input settings screen, setting summary. Setting for mouse pointer speed. [CHAR LIMIT=35] -->
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
index d36e33c..ea3ddf4 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java
@@ -38,7 +38,6 @@ import android.view.inputmethod.InputMethodSubtype;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
diff --git a/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java b/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java
index 753d1f0..2a62017 100644
--- a/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java
+++ b/src/com/android/settings/inputmethod/SingleSpellCheckerPreference.java
@@ -44,6 +44,7 @@ public class SingleSpellCheckerPreference extends Preference {
private final SpellCheckersSettings mFragment;
private final Resources mRes;
private final TextServicesManager mTsm;
+ private AlertDialog mDialog = null;
private TextView mTitleText;
private TextView mSummaryText;
private View mPrefAll;
@@ -127,6 +128,9 @@ public class SingleSpellCheckerPreference extends Preference {
}
private void onSubtypeButtonClicked(View arg0) {
+ if (mDialog != null && mDialog.isShowing()) {
+ mDialog.dismiss();
+ }
final AlertDialog.Builder builder = new AlertDialog.Builder(mFragment.getActivity());
builder.setTitle(R.string.phone_language);
final int size = mSpellCheckerInfo.getSubtypeCount();
@@ -167,7 +171,8 @@ public class SingleSpellCheckerPreference extends Preference {
dialog.dismiss();
}
});
- builder.show();
+ mDialog = builder.create();
+ mDialog.show();
}
private void onSettingsButtonClicked(View arg0) {
diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
index b964999..d3e5181 100644
--- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java
+++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
@@ -19,14 +19,16 @@ package com.android.settings.inputmethod;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
+import android.app.AlertDialog;
import android.content.Context;
+import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.view.textservice.SpellCheckerInfo;
-import android.view.textservice.SpellCheckerSubtype;
import android.view.textservice.TextServicesManager;
import java.util.ArrayList;
@@ -36,6 +38,7 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
private static final String TAG = SpellCheckersSettings.class.getSimpleName();
private static final boolean DBG = false;
+ private AlertDialog mDialog = null;
private SpellCheckerInfo mCurrentSci;
private SpellCheckerInfo[] mEnabledScis;
private TextServicesManager mTsm;
@@ -96,17 +99,61 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
}
@Override
- public boolean onPreferenceClick(Preference arg0) {
+ public boolean onPreferenceClick(Preference pref) {
+ SingleSpellCheckerPreference targetScp = null;
for (SingleSpellCheckerPreference scp : mSpellCheckers) {
- if (arg0.equals(scp)) {
- mTsm.setCurrentSpellChecker(scp.getSpellCheckerInfo());
+ if (pref.equals(scp)) {
+ targetScp = scp;
}
}
+ if (targetScp != null) {
+ if (!isSystemApp(targetScp.getSpellCheckerInfo())) {
+ showSecurityWarnDialog(targetScp);
+ } else {
+ changeCurrentSpellChecker(targetScp);
+ }
+ }
+ return true;
+ }
+
+ private void showSecurityWarnDialog(final SingleSpellCheckerPreference scp) {
+ if (mDialog != null && mDialog.isShowing()) {
+ mDialog.dismiss();
+ }
+ mDialog = (new AlertDialog.Builder(getActivity()))
+ .setTitle(android.R.string.dialog_alert_title)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setCancelable(true)
+ .setPositiveButton(android.R.string.ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ changeCurrentSpellChecker(scp);
+ }
+ })
+ .setNegativeButton(android.R.string.cancel,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ }
+ })
+ .create();
+ mDialog.setMessage(getResources().getString(R.string.spellchecker_security_warning,
+ scp.getSpellCheckerInfo().getServiceInfo().applicationInfo.loadLabel(
+ getActivity().getPackageManager())));
+ mDialog.show();
+ }
+
+ private void changeCurrentSpellChecker(SingleSpellCheckerPreference scp) {
+ mTsm.setCurrentSpellChecker(scp.getSpellCheckerInfo());
if (DBG) {
Log.d(TAG, "Current spell check is "
+ SpellCheckerUtils.getCurrentSpellChecker(mTsm).getId());
}
updateScreen();
- return true;
+ }
+
+ private static boolean isSystemApp(SpellCheckerInfo sci) {
+ return (sci.getServiceInfo().applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
}
}
diff --git a/src/com/android/settings/inputmethod/UserDictionaryList.java b/src/com/android/settings/inputmethod/UserDictionaryList.java
index 894dd8a..6b1ca7b 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryList.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryList.java
@@ -18,7 +18,6 @@ package com.android.settings.inputmethod;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.UserDictionarySettings;
import com.android.settings.Utils;
import android.app.Activity;