Loading core/java/android/view/textservice/TextServicesManager.java +10 −7 Original line number Diff line number Diff line Loading @@ -81,18 +81,18 @@ public final class TextServicesManager { } // TODO: set a proper locale instead of the dummy locale final String localeString = locale == null ? "en" : locale.toString(); final SpellCheckerInfo info; final SpellCheckerInfo sci; try { info = sService.getCurrentSpellChecker(localeString); sci = sService.getCurrentSpellChecker(localeString); } catch (RemoteException e) { return null; } if (info == null) { if (sci == null) { return null; } final SpellCheckerSession session = new SpellCheckerSession(info, sService, listener); final SpellCheckerSession session = new SpellCheckerSession(sci, sService, listener); try { sService.getSpellCheckerService(info, localeString, sService.getSpellCheckerService(sci.getId(), localeString, session.getTextServicesSessionListener(), session.getSpellCheckerSessionListener()); } catch (RemoteException e) { Loading Loading @@ -132,9 +132,12 @@ public final class TextServicesManager { /** * @hide */ public void setCurrentSpellChecker(SpellCheckerInfo info) { public void setCurrentSpellChecker(SpellCheckerInfo sci) { try { sService.setCurrentSpellChecker(info); if (sci == null) { throw new NullPointerException("SpellCheckerInfo is null"); } sService.setCurrentSpellChecker(sci.getId()); } catch (RemoteException e) { Log.e(TAG, "Error in setCurrentSpellChecker: " + e); } Loading core/java/com/android/internal/textservice/ITextServicesManager.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -28,10 +28,10 @@ import android.view.textservice.SpellCheckerInfo; */ interface ITextServicesManager { SpellCheckerInfo getCurrentSpellChecker(String locale); oneway void getSpellCheckerService(in SpellCheckerInfo info, in String locale, oneway void getSpellCheckerService(String sciId, in String locale, in ITextServicesSessionListener tsListener, in ISpellCheckerSessionListener scListener); oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener); oneway void setCurrentSpellChecker(in SpellCheckerInfo info); oneway void setCurrentSpellChecker(String sciId); SpellCheckerInfo[] getEnabledSpellCheckers(); } services/java/com/android/server/TextServicesManagerService.java +19 −17 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { // Set the current spell checker if there is one or more spell checkers // available. In this case, "sci" is the first one in the available spell // checkers. setCurrentSpellCheckerLocked(sci); setCurrentSpellCheckerLocked(sci.getId()); } } } Loading @@ -95,12 +95,14 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { if (sci == null) return; final String packageName = sci.getPackageName(); final int change = isPackageDisappearing(packageName); if (change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE) { // Package disappearing setCurrentSpellCheckerLocked(findAvailSpellCheckerLocked(null, packageName)); } else if (isPackageModified(packageName)) { if (// Package disappearing change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE // Package modified setCurrentSpellCheckerLocked(findAvailSpellCheckerLocked(null, packageName)); || isPackageModified(packageName)) { sci = findAvailSpellCheckerLocked(null, packageName); if (sci != null) { setCurrentSpellCheckerLocked(sci.getId()); } } } } Loading Loading @@ -177,20 +179,20 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } @Override public void getSpellCheckerService(SpellCheckerInfo info, String locale, public void getSpellCheckerService(String sciId, String locale, ITextServicesSessionListener tsListener, ISpellCheckerSessionListener scListener) { if (!mSystemReady) { return; } if (info == null || tsListener == null || scListener == null) { if (TextUtils.isEmpty(sciId) || tsListener == null || scListener == null) { Slog.e(TAG, "getSpellCheckerService: Invalid input."); return; } final String sciId = info.getId(); synchronized(mSpellCheckerMap) { if (!mSpellCheckerMap.containsKey(sciId)) { return; } final SpellCheckerInfo sci = mSpellCheckerMap.get(sciId); final int uid = Binder.getCallingUid(); if (mSpellCheckerBindGroups.containsKey(sciId)) { final SpellCheckerBindGroup bindGroup = mSpellCheckerBindGroups.get(sciId); Loading Loading @@ -234,7 +236,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } final long ident = Binder.clearCallingIdentity(); try { startSpellCheckerServiceInnerLocked(info, locale, tsListener, scListener, uid); startSpellCheckerServiceInnerLocked(sci, locale, tsListener, scListener, uid); } finally { Binder.restoreCallingIdentity(ident); } Loading Loading @@ -290,7 +292,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } @Override public void setCurrentSpellChecker(SpellCheckerInfo sci) { public void setCurrentSpellChecker(String sciId) { synchronized(mSpellCheckerMap) { if (mContext.checkCallingOrSelfPermission( android.Manifest.permission.WRITE_SECURE_SETTINGS) Loading @@ -299,19 +301,19 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { "Requires permission " + android.Manifest.permission.WRITE_SECURE_SETTINGS); } setCurrentSpellCheckerLocked(sci); setCurrentSpellCheckerLocked(sciId); } } private void setCurrentSpellCheckerLocked(SpellCheckerInfo sci) { private void setCurrentSpellCheckerLocked(String sciId) { if (DBG) { Slog.w(TAG, "setCurrentSpellChecker: " + sci.getId()); Slog.w(TAG, "setCurrentSpellChecker: " + sciId); } if (sci == null || !mSpellCheckerMap.containsKey(sci.getId())) return; if (TextUtils.isEmpty(sciId) || !mSpellCheckerMap.containsKey(sciId)) return; final long ident = Binder.clearCallingIdentity(); try { Settings.Secure.putString(mContext.getContentResolver(), Settings.Secure.SPELL_CHECKER_SERVICE, sci == null ? "" : sci.getId()); Settings.Secure.SPELL_CHECKER_SERVICE, sciId); } finally { Binder.restoreCallingIdentity(ident); } Loading Loading
core/java/android/view/textservice/TextServicesManager.java +10 −7 Original line number Diff line number Diff line Loading @@ -81,18 +81,18 @@ public final class TextServicesManager { } // TODO: set a proper locale instead of the dummy locale final String localeString = locale == null ? "en" : locale.toString(); final SpellCheckerInfo info; final SpellCheckerInfo sci; try { info = sService.getCurrentSpellChecker(localeString); sci = sService.getCurrentSpellChecker(localeString); } catch (RemoteException e) { return null; } if (info == null) { if (sci == null) { return null; } final SpellCheckerSession session = new SpellCheckerSession(info, sService, listener); final SpellCheckerSession session = new SpellCheckerSession(sci, sService, listener); try { sService.getSpellCheckerService(info, localeString, sService.getSpellCheckerService(sci.getId(), localeString, session.getTextServicesSessionListener(), session.getSpellCheckerSessionListener()); } catch (RemoteException e) { Loading Loading @@ -132,9 +132,12 @@ public final class TextServicesManager { /** * @hide */ public void setCurrentSpellChecker(SpellCheckerInfo info) { public void setCurrentSpellChecker(SpellCheckerInfo sci) { try { sService.setCurrentSpellChecker(info); if (sci == null) { throw new NullPointerException("SpellCheckerInfo is null"); } sService.setCurrentSpellChecker(sci.getId()); } catch (RemoteException e) { Log.e(TAG, "Error in setCurrentSpellChecker: " + e); } Loading
core/java/com/android/internal/textservice/ITextServicesManager.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -28,10 +28,10 @@ import android.view.textservice.SpellCheckerInfo; */ interface ITextServicesManager { SpellCheckerInfo getCurrentSpellChecker(String locale); oneway void getSpellCheckerService(in SpellCheckerInfo info, in String locale, oneway void getSpellCheckerService(String sciId, in String locale, in ITextServicesSessionListener tsListener, in ISpellCheckerSessionListener scListener); oneway void finishSpellCheckerService(in ISpellCheckerSessionListener listener); oneway void setCurrentSpellChecker(in SpellCheckerInfo info); oneway void setCurrentSpellChecker(String sciId); SpellCheckerInfo[] getEnabledSpellCheckers(); }
services/java/com/android/server/TextServicesManagerService.java +19 −17 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { // Set the current spell checker if there is one or more spell checkers // available. In this case, "sci" is the first one in the available spell // checkers. setCurrentSpellCheckerLocked(sci); setCurrentSpellCheckerLocked(sci.getId()); } } } Loading @@ -95,12 +95,14 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { if (sci == null) return; final String packageName = sci.getPackageName(); final int change = isPackageDisappearing(packageName); if (change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE) { // Package disappearing setCurrentSpellCheckerLocked(findAvailSpellCheckerLocked(null, packageName)); } else if (isPackageModified(packageName)) { if (// Package disappearing change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE // Package modified setCurrentSpellCheckerLocked(findAvailSpellCheckerLocked(null, packageName)); || isPackageModified(packageName)) { sci = findAvailSpellCheckerLocked(null, packageName); if (sci != null) { setCurrentSpellCheckerLocked(sci.getId()); } } } } Loading Loading @@ -177,20 +179,20 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } @Override public void getSpellCheckerService(SpellCheckerInfo info, String locale, public void getSpellCheckerService(String sciId, String locale, ITextServicesSessionListener tsListener, ISpellCheckerSessionListener scListener) { if (!mSystemReady) { return; } if (info == null || tsListener == null || scListener == null) { if (TextUtils.isEmpty(sciId) || tsListener == null || scListener == null) { Slog.e(TAG, "getSpellCheckerService: Invalid input."); return; } final String sciId = info.getId(); synchronized(mSpellCheckerMap) { if (!mSpellCheckerMap.containsKey(sciId)) { return; } final SpellCheckerInfo sci = mSpellCheckerMap.get(sciId); final int uid = Binder.getCallingUid(); if (mSpellCheckerBindGroups.containsKey(sciId)) { final SpellCheckerBindGroup bindGroup = mSpellCheckerBindGroups.get(sciId); Loading Loading @@ -234,7 +236,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } final long ident = Binder.clearCallingIdentity(); try { startSpellCheckerServiceInnerLocked(info, locale, tsListener, scListener, uid); startSpellCheckerServiceInnerLocked(sci, locale, tsListener, scListener, uid); } finally { Binder.restoreCallingIdentity(ident); } Loading Loading @@ -290,7 +292,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } @Override public void setCurrentSpellChecker(SpellCheckerInfo sci) { public void setCurrentSpellChecker(String sciId) { synchronized(mSpellCheckerMap) { if (mContext.checkCallingOrSelfPermission( android.Manifest.permission.WRITE_SECURE_SETTINGS) Loading @@ -299,19 +301,19 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { "Requires permission " + android.Manifest.permission.WRITE_SECURE_SETTINGS); } setCurrentSpellCheckerLocked(sci); setCurrentSpellCheckerLocked(sciId); } } private void setCurrentSpellCheckerLocked(SpellCheckerInfo sci) { private void setCurrentSpellCheckerLocked(String sciId) { if (DBG) { Slog.w(TAG, "setCurrentSpellChecker: " + sci.getId()); Slog.w(TAG, "setCurrentSpellChecker: " + sciId); } if (sci == null || !mSpellCheckerMap.containsKey(sci.getId())) return; if (TextUtils.isEmpty(sciId) || !mSpellCheckerMap.containsKey(sciId)) return; final long ident = Binder.clearCallingIdentity(); try { Settings.Secure.putString(mContext.getContentResolver(), Settings.Secure.SPELL_CHECKER_SERVICE, sci == null ? "" : sci.getId()); Settings.Secure.SPELL_CHECKER_SERVICE, sciId); } finally { Binder.restoreCallingIdentity(ident); } Loading