Loading core/java/android/view/textservice/TextServicesManager.java +14 −6 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import android.content.Context; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; import android.view.textservice.SpellCheckerInfo; import android.service.textservice.SpellCheckerSession; import android.service.textservice.SpellCheckerSession.SpellCheckerSessionListener; import android.util.Log; import java.util.Locale; Loading @@ -38,6 +38,7 @@ import java.util.Locale; */ public final class TextServicesManager { private static final String TAG = TextServicesManager.class.getSimpleName(); private static final boolean DBG = false; private static TextServicesManager sInstance; private static ITextServicesManager sService; Loading Loading @@ -75,12 +76,14 @@ public final class TextServicesManager { // TODO: Handle referToSpellCheckerLanguageSettings public SpellCheckerSession newSpellCheckerSession(Locale locale, SpellCheckerSessionListener listener, boolean referToSpellCheckerLanguageSettings) { if (locale == null || listener == null) { if (listener == null) { throw new NullPointerException(); } // TODO: set a proper locale instead of the dummy locale final String localeString = locale == null ? "en" : locale.toString(); final SpellCheckerInfo info; try { info = sService.getCurrentSpellChecker(locale.toString()); info = sService.getCurrentSpellChecker(localeString); } catch (RemoteException e) { return null; } Loading @@ -89,8 +92,8 @@ public final class TextServicesManager { } final SpellCheckerSession session = new SpellCheckerSession(info, sService, listener); try { sService.getSpellCheckerService( info, locale.toString(), session.getTextServicesSessionListener(), sService.getSpellCheckerService(info, localeString, session.getTextServicesSessionListener(), session.getSpellCheckerSessionListener()); } catch (RemoteException e) { return null; Loading @@ -103,8 +106,13 @@ public final class TextServicesManager { */ public SpellCheckerInfo[] getEnabledSpellCheckers() { try { return sService.getEnabledSpellCheckers(); final SpellCheckerInfo[] retval = sService.getEnabledSpellCheckers(); if (DBG) { Log.d(TAG, "getEnabledSpellCheckers: " + (retval != null ? retval.length : "null")); } return retval; } catch (RemoteException e) { Log.e(TAG, "Error in getEnabledSpellCheckers: " + e); return null; } } Loading services/java/com/android/server/TextServicesManagerService.java +36 −10 Original line number Diff line number Diff line Loading @@ -81,14 +81,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { buildSpellCheckerMapLocked(mContext, mSpellCheckerList, mSpellCheckerMap); // TODO: Update for each locale SpellCheckerInfo sci = getCurrentSpellChecker(null); if (sci == null) { sci = findAvailSpellCheckerLocked(null, null); if (sci == null) return; // 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. setCurrentSpellChecker(sci); } final String packageName = sci.getPackageName(); final int change = isPackageDisappearing(packageName); if (change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE) { Loading Loading @@ -125,6 +118,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { list.add(sci); map.put(sci.getId(), sci); } if (DBG) { Slog.d(TAG, "buildSpellCheckerMapLocked: " + list.size() + "," + map.size()); } } // TODO: find an appropriate spell checker for specified locale Loading @@ -138,6 +134,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { for (int i = 0; i < spellCheckersCount; ++i) { final SpellCheckerInfo sci = mSpellCheckerList.get(i); if (prefPackage.equals(sci.getPackageName())) { if (DBG) { Slog.d(TAG, "findAvailSpellCheckerLocked: " + sci.getPackageName()); } return sci; } } Loading @@ -153,14 +152,20 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { @Override public SpellCheckerInfo getCurrentSpellChecker(String locale) { synchronized (mSpellCheckerMap) { final String curSpellCheckerId = String curSpellCheckerId = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.SPELL_CHECKER_SERVICE); if (DBG) { Slog.w(TAG, "getCurrentSpellChecker: " + curSpellCheckerId); } if (TextUtils.isEmpty(curSpellCheckerId)) { return null; final SpellCheckerInfo sci = findAvailSpellCheckerLocked(null, null); if (sci == null) return null; // 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. setCurrentSpellChecker(sci); return sci; } return mSpellCheckerMap.get(curSpellCheckerId); } Loading Loading @@ -202,11 +207,20 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { @Override public SpellCheckerInfo[] getEnabledSpellCheckers() { if (DBG) { Slog.d(TAG, "getEnabledSpellCheckers: " + mSpellCheckerList.size()); for (int i = 0; i < mSpellCheckerList.size(); ++i) { Slog.d(TAG, "EnabledSpellCheckers: " + mSpellCheckerList.get(i).getPackageName()); } } return mSpellCheckerList.toArray(new SpellCheckerInfo[mSpellCheckerList.size()]); } @Override public void finishSpellCheckerService(ISpellCheckerSessionListener listener) { if (DBG) { Slog.d(TAG, "FinishSpellCheckerService"); } synchronized(mSpellCheckerMap) { for (SpellCheckerBindGroup group : mSpellCheckerBindGroups.values()) { if (group == null) continue; Loading Loading @@ -240,6 +254,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } public void onServiceConnected(ISpellCheckerService spellChecker) { if (DBG) { Slog.d(TAG, "onServiceConnected"); } synchronized(mSpellCheckerMap) { for (InternalDeathRecipient listener : mListeners) { try { Loading @@ -254,6 +271,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { public void addListener(ITextServicesSessionListener tsListener, String locale, ISpellCheckerSessionListener scListener) { if (DBG) { Slog.d(TAG, "addListener: " + locale); } synchronized(mSpellCheckerMap) { try { final int size = mListeners.size(); Loading @@ -276,6 +296,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } public void removeListener(ISpellCheckerSessionListener listener) { if (DBG) { Slog.d(TAG, "remove listener"); } synchronized(mSpellCheckerMap) { final int size = mListeners.size(); final ArrayList<InternalDeathRecipient> removeList = Loading @@ -295,6 +318,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } private void cleanLocked() { if (DBG) { Slog.d(TAG, "cleanLocked"); } if (mListeners.isEmpty()) { mSpellCheckerBindGroups.remove(this); // Unbind service when there is no active clients. Loading Loading
core/java/android/view/textservice/TextServicesManager.java +14 −6 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import android.content.Context; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; import android.view.textservice.SpellCheckerInfo; import android.service.textservice.SpellCheckerSession; import android.service.textservice.SpellCheckerSession.SpellCheckerSessionListener; import android.util.Log; import java.util.Locale; Loading @@ -38,6 +38,7 @@ import java.util.Locale; */ public final class TextServicesManager { private static final String TAG = TextServicesManager.class.getSimpleName(); private static final boolean DBG = false; private static TextServicesManager sInstance; private static ITextServicesManager sService; Loading Loading @@ -75,12 +76,14 @@ public final class TextServicesManager { // TODO: Handle referToSpellCheckerLanguageSettings public SpellCheckerSession newSpellCheckerSession(Locale locale, SpellCheckerSessionListener listener, boolean referToSpellCheckerLanguageSettings) { if (locale == null || listener == null) { if (listener == null) { throw new NullPointerException(); } // TODO: set a proper locale instead of the dummy locale final String localeString = locale == null ? "en" : locale.toString(); final SpellCheckerInfo info; try { info = sService.getCurrentSpellChecker(locale.toString()); info = sService.getCurrentSpellChecker(localeString); } catch (RemoteException e) { return null; } Loading @@ -89,8 +92,8 @@ public final class TextServicesManager { } final SpellCheckerSession session = new SpellCheckerSession(info, sService, listener); try { sService.getSpellCheckerService( info, locale.toString(), session.getTextServicesSessionListener(), sService.getSpellCheckerService(info, localeString, session.getTextServicesSessionListener(), session.getSpellCheckerSessionListener()); } catch (RemoteException e) { return null; Loading @@ -103,8 +106,13 @@ public final class TextServicesManager { */ public SpellCheckerInfo[] getEnabledSpellCheckers() { try { return sService.getEnabledSpellCheckers(); final SpellCheckerInfo[] retval = sService.getEnabledSpellCheckers(); if (DBG) { Log.d(TAG, "getEnabledSpellCheckers: " + (retval != null ? retval.length : "null")); } return retval; } catch (RemoteException e) { Log.e(TAG, "Error in getEnabledSpellCheckers: " + e); return null; } } Loading
services/java/com/android/server/TextServicesManagerService.java +36 −10 Original line number Diff line number Diff line Loading @@ -81,14 +81,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { buildSpellCheckerMapLocked(mContext, mSpellCheckerList, mSpellCheckerMap); // TODO: Update for each locale SpellCheckerInfo sci = getCurrentSpellChecker(null); if (sci == null) { sci = findAvailSpellCheckerLocked(null, null); if (sci == null) return; // 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. setCurrentSpellChecker(sci); } final String packageName = sci.getPackageName(); final int change = isPackageDisappearing(packageName); if (change == PACKAGE_PERMANENT_CHANGE || change == PACKAGE_TEMPORARY_CHANGE) { Loading Loading @@ -125,6 +118,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { list.add(sci); map.put(sci.getId(), sci); } if (DBG) { Slog.d(TAG, "buildSpellCheckerMapLocked: " + list.size() + "," + map.size()); } } // TODO: find an appropriate spell checker for specified locale Loading @@ -138,6 +134,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { for (int i = 0; i < spellCheckersCount; ++i) { final SpellCheckerInfo sci = mSpellCheckerList.get(i); if (prefPackage.equals(sci.getPackageName())) { if (DBG) { Slog.d(TAG, "findAvailSpellCheckerLocked: " + sci.getPackageName()); } return sci; } } Loading @@ -153,14 +152,20 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { @Override public SpellCheckerInfo getCurrentSpellChecker(String locale) { synchronized (mSpellCheckerMap) { final String curSpellCheckerId = String curSpellCheckerId = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.SPELL_CHECKER_SERVICE); if (DBG) { Slog.w(TAG, "getCurrentSpellChecker: " + curSpellCheckerId); } if (TextUtils.isEmpty(curSpellCheckerId)) { return null; final SpellCheckerInfo sci = findAvailSpellCheckerLocked(null, null); if (sci == null) return null; // 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. setCurrentSpellChecker(sci); return sci; } return mSpellCheckerMap.get(curSpellCheckerId); } Loading Loading @@ -202,11 +207,20 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { @Override public SpellCheckerInfo[] getEnabledSpellCheckers() { if (DBG) { Slog.d(TAG, "getEnabledSpellCheckers: " + mSpellCheckerList.size()); for (int i = 0; i < mSpellCheckerList.size(); ++i) { Slog.d(TAG, "EnabledSpellCheckers: " + mSpellCheckerList.get(i).getPackageName()); } } return mSpellCheckerList.toArray(new SpellCheckerInfo[mSpellCheckerList.size()]); } @Override public void finishSpellCheckerService(ISpellCheckerSessionListener listener) { if (DBG) { Slog.d(TAG, "FinishSpellCheckerService"); } synchronized(mSpellCheckerMap) { for (SpellCheckerBindGroup group : mSpellCheckerBindGroups.values()) { if (group == null) continue; Loading Loading @@ -240,6 +254,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } public void onServiceConnected(ISpellCheckerService spellChecker) { if (DBG) { Slog.d(TAG, "onServiceConnected"); } synchronized(mSpellCheckerMap) { for (InternalDeathRecipient listener : mListeners) { try { Loading @@ -254,6 +271,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { public void addListener(ITextServicesSessionListener tsListener, String locale, ISpellCheckerSessionListener scListener) { if (DBG) { Slog.d(TAG, "addListener: " + locale); } synchronized(mSpellCheckerMap) { try { final int size = mListeners.size(); Loading @@ -276,6 +296,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } public void removeListener(ISpellCheckerSessionListener listener) { if (DBG) { Slog.d(TAG, "remove listener"); } synchronized(mSpellCheckerMap) { final int size = mListeners.size(); final ArrayList<InternalDeathRecipient> removeList = Loading @@ -295,6 +318,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } private void cleanLocked() { if (DBG) { Slog.d(TAG, "cleanLocked"); } if (mListeners.isEmpty()) { mSpellCheckerBindGroups.remove(this); // Unbind service when there is no active clients. Loading