diff options
author | 2012-05-25 18:19:19 +0900 | |
---|---|---|
committer | 2012-05-25 18:54:53 +0900 | |
commit | 1b1243d61fd682d804e61de6a1eccbf0e8ba78b2 (patch) | |
tree | de39efbc03e64227b5ae39b4b604063a2c54fb07 /java/src/com/android/inputmethod | |
parent | b224b60c94d85f30de93f66685adf06e662618c0 (diff) | |
download | latinime-1b1243d61fd682d804e61de6a1eccbf0e8ba78b2.tar.gz latinime-1b1243d61fd682d804e61de6a1eccbf0e8ba78b2.tar.xz latinime-1b1243d61fd682d804e61de6a1eccbf0e8ba78b2.zip |
Cache application info.
Bug: 6537051
Change-Id: Ieca891235df0d697bdeb0510651b703654fdef38
Diffstat (limited to 'java/src/com/android/inputmethod')
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinIME.java | 9 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/TargetApplicationGetter.java | 12 |
2 files changed, 17 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 44aab3395..c58549497 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -667,9 +667,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen Log.w(TAG, "Use EditorInfo.IME_FLAG_FORCE_ASCII flag instead"); } - mTargetApplicationInfo = null; - new TargetApplicationGetter(this /* context */, this /* listener */) - .execute(editorInfo.packageName); + mTargetApplicationInfo = + TargetApplicationGetter.getCachedApplicationInfo(editorInfo.packageName); + if (null == mTargetApplicationInfo) { + new TargetApplicationGetter(this /* context */, this /* listener */) + .execute(editorInfo.packageName); + } LatinImeLogger.onStartInputView(editorInfo); // In landscape mode, this method gets called without the input view being created. diff --git a/java/src/com/android/inputmethod/latin/TargetApplicationGetter.java b/java/src/com/android/inputmethod/latin/TargetApplicationGetter.java index 109f23f4c..46300b479 100644 --- a/java/src/com/android/inputmethod/latin/TargetApplicationGetter.java +++ b/java/src/com/android/inputmethod/latin/TargetApplicationGetter.java @@ -20,9 +20,19 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.AsyncTask; +import android.util.LruCache; public class TargetApplicationGetter extends AsyncTask<String, Void, ApplicationInfo> { + private static final int MAX_CACHE_ENTRIES = 64; // arbitrary + private static LruCache<String, ApplicationInfo> sCache = + new LruCache<String, ApplicationInfo>(MAX_CACHE_ENTRIES); + + public static ApplicationInfo getCachedApplicationInfo(final String packageName) { + return sCache.get(packageName); + } + // TODO: Wipe the cache when new packages are installed. + public interface OnTargetApplicationKnownListener { public void onTargetApplicationKnown(final ApplicationInfo info); } @@ -38,12 +48,12 @@ public class TargetApplicationGetter extends AsyncTask<String, Void, Application @Override protected ApplicationInfo doInBackground(final String... packageName) { - // TODO: cache app info. Wipe the cache when new packages are installed. final PackageManager pm = mContext.getPackageManager(); mContext = null; // Bazooka-powered anti-leak device try { final ApplicationInfo targetAppInfo = pm.getApplicationInfo(packageName[0], 0 /* flags */); + sCache.put(packageName[0], targetAppInfo); return targetAppInfo; } catch (android.content.pm.PackageManager.NameNotFoundException e) { return null; |