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

Commit f02f2ba0 authored by Joanne Chung's avatar Joanne Chung Committed by Automerger Merge Worker
Browse files

Merge "Callback translation usages for registered translation app." into...

Merge "Callback translation usages for registered translation app." into sc-dev am: e099738d am: 8a7c4098

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15126531

Change-Id: I1eb7f512d7518bc79a765704e65fbe449a9f1804
parents 7791e9f6 8a7c4098
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -182,15 +182,28 @@ final class TranslationManagerServiceImpl extends
                    + "translation state for token=" + token + " taskId=" + taskId);
            return;
        }
        int translationActivityUid = -1;
        try {
            IBinder activityToken = taskTopActivityTokens.getActivityToken();
            taskTopActivityTokens.getApplicationThread().updateUiTranslationState(
                    taskTopActivityTokens.getActivityToken(), state, sourceSpec, targetSpec,
                    activityToken, state, sourceSpec, targetSpec,
                    viewIds, uiTranslationSpec);
            mLastActivityTokens = new WeakReference<>(taskTopActivityTokens);
            ComponentName componentName =
                    mActivityTaskManagerInternal.getActivityName(activityToken);
            try {
                if (componentName != null) {
                    translationActivityUid =
                            getContext().getPackageManager().getApplicationInfoAsUser(
                                    componentName.getPackageName(), 0, getUserId()).uid;
                }
            } catch (PackageManager.NameNotFoundException e) {
                Slog.d(TAG, "Cannot find package for" +  componentName);
            }
        } catch (RemoteException e) {
            Slog.w(TAG, "Update UiTranslationState fail: " + e);
        }
        invokeCallbacks(state, sourceSpec, targetSpec);
        invokeCallbacks(state, sourceSpec, targetSpec, translationActivityUid);
    }

    @GuardedBy("mLock")
@@ -216,7 +229,8 @@ final class TranslationManagerServiceImpl extends
    }

    private void invokeCallbacks(
            int state, TranslationSpec sourceSpec, TranslationSpec targetSpec) {
            int state, TranslationSpec sourceSpec, TranslationSpec targetSpec,
            int translationActivityUid) {
        Bundle res = new Bundle();
        res.putInt(EXTRA_STATE, state);
        // TODO(177500482): Store the locale pair so it can be sent for RESUME events.
@@ -229,6 +243,14 @@ final class TranslationManagerServiceImpl extends
                LocalServices.getService(InputMethodManagerInternal.class)
                        .getEnabledInputMethodListAsUser(mUserId);
        mCallbacks.broadcast((callback, uid) -> {
            // callback to the application that is translated if registered.
            if ((int) uid == translationActivityUid) {
                try {
                    callback.sendResult(res);
                } catch (RemoteException e) {
                    Slog.w(TAG, "Failed to invoke UiTranslationStateCallback: " + e);
                }
            }
            // Code here is non-optimal since it's temporary..
            boolean isIme = false;
            for (InputMethodInfo inputMethod : enabledInputMethods) {