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

Commit b224b60c authored by Jean Chalard's avatar Jean Chalard
Browse files

Get information about the target application.

Bug: 6537051
Change-Id: I9fe7a07b5ddf2a423d5764840753ea70544206f1
parent 383f4d6a
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
@@ -80,7 +81,7 @@ import java.util.Locale;
 * Input method implementation for Qwerty'ish keyboard.
 */
public class LatinIME extends InputMethodService implements KeyboardActionListener,
        SuggestionsView.Listener {
        SuggestionsView.Listener, TargetApplicationGetter.OnTargetApplicationKnownListener {
    private static final String TAG = LatinIME.class.getSimpleName();
    private static final boolean TRACE = false;
    private static boolean DEBUG;
@@ -152,6 +153,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    private SuggestionsView mSuggestionsView;
    /* package for tests */ Suggest mSuggest;
    private CompletionInfo[] mApplicationSpecifiedCompletions;
    private ApplicationInfo mTargetApplicationInfo;

    private InputMethodManagerCompatWrapper mImm;
    private Resources mResources;
@@ -665,6 +667,10 @@ 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);

        LatinImeLogger.onStartInputView(editorInfo);
        // In landscape mode, this method gets called without the input view being created.
        if (inputView == null) {
@@ -718,6 +724,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        if (TRACE) Debug.startMethodTracing("/data/trace/latinime");
    }

    public void onTargetApplicationKnown(final ApplicationInfo info) {
        mTargetApplicationInfo = info;
    }

    @Override
    public void onWindowHidden() {
        super.onWindowHidden();
+57 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.android.inputmethod.latin;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;

public class TargetApplicationGetter extends AsyncTask<String, Void, ApplicationInfo> {

    public interface OnTargetApplicationKnownListener {
        public void onTargetApplicationKnown(final ApplicationInfo info);
    }

    private Context mContext;
    private final OnTargetApplicationKnownListener mListener;

    public TargetApplicationGetter(final Context context,
            final OnTargetApplicationKnownListener listener) {
        mContext = context;
        mListener = listener;
    }

    @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 */);
            return targetAppInfo;
        } catch (android.content.pm.PackageManager.NameNotFoundException e) {
            return null;
        }
    }

    @Override
    protected void onPostExecute(final ApplicationInfo info) {
        mListener.onTargetApplicationKnown(info);
    }
}