From 46a54e8be637c0e7922bcbec0bf5bc308dcdf69d Mon Sep 17 00:00:00 2001 From: Guliz Tuncay Date: Fri, 23 Jun 2017 10:35:41 -0700 Subject: [PATCH] Remove the internal APIs of TSM to change spell checker settings Previously, TextServicesManager was exposing APIs to system services to modify spell checker settings. However, Settings application is the only client of these APIs and there is no need to expose it to all the other services. Settings app already has the WRITE_SECURE_SETTINGS permission and can directly update the spell checker settings. Hence, we can remove these APIs from TSM. Fixes: 62950392 Test: Manually as follows. 1. Build and flash an OS image. 2. Complete the setup wizard (if any). 3. Make sure AOSP Keyboard (com.android.inputmethod.latin) is installed 4. Install SampleSpellCheckerService 4.1 tapas SampleSpellCheckerService 4.2. make -j 4.3. adb install -r out/target/product/generic/system/app/SampleSpellCheckerService/SampleSpellCheckerService.apk 5. Set the current spell checker service to be AOSP SCS by adb shell settings put secure selected_spell_checker com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService 6. Run a test program that has TextView and tap on one of the TextViews and type some text. 7. Observe that there is a connection to AOSP SCS by adb shell dumpsys textservices 8. Set the current spell checker service to be SampleSpellCheckerService SCS by adb shell settings put secure selected_spell_checker com.example.android.samplespellcheckerservice/.SampleSpellCheckerService 9. Observe that there is a connection to SampleSpellCheckerService SCS by adb shell dumpsys textservices Change-Id: I4513ca661788f00785f684c21d7244c233b6e33e --- .../view/textservice/TextServicesManager.java | 42 ----------- .../textservice/ITextServicesManager.aidl | 3 - .../server/TextServicesManagerService.java | 71 ------------------- 3 files changed, 116 deletions(-) diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java index d9bfade33539d..f368c74a17b58 100644 --- a/core/java/android/view/textservice/TextServicesManager.java +++ b/core/java/android/view/textservice/TextServicesManager.java @@ -210,20 +210,6 @@ public final class TextServicesManager { } } - /** - * @hide - */ - public void setCurrentSpellChecker(SpellCheckerInfo sci) { - try { - if (sci == null) { - throw new NullPointerException("SpellCheckerInfo is null."); - } - mService.setCurrentSpellChecker(null, sci.getId()); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - /** * @hide */ @@ -237,34 +223,6 @@ public final class TextServicesManager { } } - /** - * @hide - */ - public void setSpellCheckerSubtype(SpellCheckerSubtype subtype) { - try { - final int hashCode; - if (subtype == null) { - hashCode = 0; - } else { - hashCode = subtype.hashCode(); - } - mService.setCurrentSpellCheckerSubtype(null, hashCode); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - - /** - * @hide - */ - public void setSpellCheckerEnabled(boolean enabled) { - try { - mService.setSpellCheckerEnabled(enabled); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - /** * @hide */ diff --git a/core/java/com/android/internal/textservice/ITextServicesManager.aidl b/core/java/com/android/internal/textservice/ITextServicesManager.aidl index 4882a127f24bb..c5940ba4dde28 100644 --- a/core/java/com/android/internal/textservice/ITextServicesManager.aidl +++ b/core/java/com/android/internal/textservice/ITextServicesManager.aidl @@ -36,9 +36,6 @@ interface ITextServicesManager { in ITextServicesSessionListener tsListener, in ISpellCheckerSessionListener scListener, in Bundle bundle); oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener); - oneway void setCurrentSpellChecker(String locale, String sciId); - oneway void setCurrentSpellCheckerSubtype(String locale, int hashCode); - oneway void setSpellCheckerEnabled(boolean enabled); boolean isSpellCheckerEnabled(); SpellCheckerInfo[] getEnabledSpellCheckers(); } diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java index 098b43c897e74..7a9bf216e8639 100644 --- a/services/core/java/com/android/server/TextServicesManagerService.java +++ b/services/core/java/com/android/server/TextServicesManagerService.java @@ -642,57 +642,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } } - @Override - public void setCurrentSpellChecker(String locale, String sciId) { - if (!calledFromValidUser()) { - return; - } - synchronized(mSpellCheckerMap) { - if (mContext.checkCallingOrSelfPermission( - android.Manifest.permission.WRITE_SECURE_SETTINGS) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException( - "Requires permission " - + android.Manifest.permission.WRITE_SECURE_SETTINGS); - } - setCurrentSpellCheckerLocked(sciId); - } - } - - @Override - public void setCurrentSpellCheckerSubtype(String locale, int hashCode) { - if (!calledFromValidUser()) { - return; - } - synchronized(mSpellCheckerMap) { - if (mContext.checkCallingOrSelfPermission( - android.Manifest.permission.WRITE_SECURE_SETTINGS) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException( - "Requires permission " - + android.Manifest.permission.WRITE_SECURE_SETTINGS); - } - setCurrentSpellCheckerSubtypeLocked(hashCode); - } - } - - @Override - public void setSpellCheckerEnabled(boolean enabled) { - if (!calledFromValidUser()) { - return; - } - synchronized(mSpellCheckerMap) { - if (mContext.checkCallingOrSelfPermission( - android.Manifest.permission.WRITE_SECURE_SETTINGS) - != PackageManager.PERMISSION_GRANTED) { - throw new SecurityException( - "Requires permission " - + android.Manifest.permission.WRITE_SECURE_SETTINGS); - } - setSpellCheckerEnabledLocked(enabled); - } - } - private void setCurrentSpellCheckerLocked(String sciId) { if (DBG) { Slog.w(TAG, "setCurrentSpellChecker: " + sciId); @@ -732,18 +681,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } } - private void setSpellCheckerEnabledLocked(boolean enabled) { - if (DBG) { - Slog.w(TAG, "setSpellCheckerEnabled: " + enabled); - } - final long ident = Binder.clearCallingIdentity(); - try { - mSettings.setSpellCheckerEnabled(enabled); - } finally { - Binder.restoreCallingIdentity(ident); - } - } - private boolean isSpellCheckerEnabledLocked() { final long ident = Binder.clearCallingIdentity(); try { @@ -1135,10 +1072,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { return Settings.Secure.getIntForUser(mResolver, key, defaultValue, mCurrentUserId); } - private void putBoolean(final String key, final boolean value) { - putInt(key, value ? 1 : 0); - } - private boolean getBoolean(final String key, final boolean defaultValue) { return getInt(key, defaultValue ? 1 : 0) == 1; } @@ -1178,10 +1111,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { putInt(Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, hashCode); } - public void setSpellCheckerEnabled(boolean enabled) { - putBoolean(Settings.Secure.SPELL_CHECKER_ENABLED, enabled); - } - @NonNull public String getSelectedSpellChecker() { return getString(Settings.Secure.SELECTED_SPELL_CHECKER, "");