Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b1243d6 authored by Jean Chalard's avatar Jean Chalard
Browse files

Cache application info.

Bug: 6537051
Change-Id: Ieca891235df0d697bdeb0510651b703654fdef38
parent b224b60c
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -667,9 +667,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
            Log.w(TAG, "Use EditorInfo.IME_FLAG_FORCE_ASCII flag instead");
        }

        mTargetApplicationInfo = null;
        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.
+11 −1
Original line number Diff line number Diff line
@@ -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;