aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2012-05-25 18:19:19 +0900
committerJean Chalard <jchalard@google.com>2012-05-25 18:54:53 +0900
commit1b1243d61fd682d804e61de6a1eccbf0e8ba78b2 (patch)
treede39efbc03e64227b5ae39b4b604063a2c54fb07 /java
parentb224b60c94d85f30de93f66685adf06e662618c0 (diff)
downloadlatinime-1b1243d61fd682d804e61de6a1eccbf0e8ba78b2.tar.gz
latinime-1b1243d61fd682d804e61de6a1eccbf0e8ba78b2.tar.xz
latinime-1b1243d61fd682d804e61de6a1eccbf0e8ba78b2.zip
Cache application info.
Bug: 6537051 Change-Id: Ieca891235df0d697bdeb0510651b703654fdef38
Diffstat (limited to 'java')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java9
-rw-r--r--java/src/com/android/inputmethod/latin/TargetApplicationGetter.java12
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;