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

Commit 9b93817b authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "Get information about the target application." into jb-dev

parents b6c314e4 b224b60c
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);
    }
}