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

Commit ef585fd9 authored by Joanne Chung's avatar Joanne Chung Committed by Android (Google) Code Review
Browse files

Merge "Callback immediately even no TranslationService is set on device"

parents b837c547 dabef238
Loading
Loading
Loading
Loading
+26 −1
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.translation;
package com.android.server.translation;


import static android.view.translation.TranslationManager.EXTRA_CAPABILITIES;
import static android.view.translation.TranslationManager.EXTRA_CAPABILITIES;
import static android.view.translation.TranslationManager.STATUS_SYNC_CALL_FAIL;
import static android.view.translation.UiTranslationManager.EXTRA_PACKAGE_NAME;
import static android.view.translation.UiTranslationManager.EXTRA_PACKAGE_NAME;
import static android.view.translation.UiTranslationManager.EXTRA_SOURCE_LOCALE;
import static android.view.translation.UiTranslationManager.EXTRA_SOURCE_LOCALE;
import static android.view.translation.UiTranslationManager.EXTRA_STATE;
import static android.view.translation.UiTranslationManager.EXTRA_STATE;
@@ -32,7 +33,9 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Activity;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
import android.os.Bundle;
import android.os.IBinder;
import android.os.IBinder;
@@ -40,6 +43,7 @@ import android.os.IRemoteCallback;
import android.os.RemoteCallbackList;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ResultReceiver;
import android.service.translation.TranslationService;
import android.service.translation.TranslationServiceInfo;
import android.service.translation.TranslationServiceInfo;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.ArraySet;
@@ -156,12 +160,27 @@ final class TranslationManagerServiceImpl extends
                return null;
                return null;
            }
            }
            final ComponentName serviceComponent = ComponentName.unflattenFromString(serviceName);
            final ComponentName serviceComponent = ComponentName.unflattenFromString(serviceName);
            if (!isServiceAvailableForUser(serviceComponent)) {
                if (mMaster.verbose) {
                    Slog.v(TAG, "ensureRemoteServiceLocked(): " + serviceComponent
                            + " is not available,");
                }
                return null;
            }
            mRemoteTranslationService = new RemoteTranslationService(getContext(), serviceComponent,
            mRemoteTranslationService = new RemoteTranslationService(getContext(), serviceComponent,
                    mUserId, /* isInstantAllowed= */ false, mRemoteServiceCallback);
                    mUserId, /* isInstantAllowed= */ false, mRemoteServiceCallback);
        }
        }
        return mRemoteTranslationService;
        return mRemoteTranslationService;
    }
    }


    private boolean isServiceAvailableForUser(ComponentName serviceComponent) {
        Intent intent = new Intent(TranslationService.SERVICE_INTERFACE)
                .setComponent(serviceComponent);
        final ResolveInfo resolveInfo = getContext().getPackageManager().resolveServiceAsUser(
                intent, PackageManager.GET_SERVICES | PackageManager.GET_META_DATA, mUserId);
        return resolveInfo != null && resolveInfo.serviceInfo != null;
    }

    @GuardedBy("mLock")
    @GuardedBy("mLock")
    void onTranslationCapabilitiesRequestLocked(@TranslationSpec.DataFormat int sourceFormat,
    void onTranslationCapabilitiesRequestLocked(@TranslationSpec.DataFormat int sourceFormat,
            @TranslationSpec.DataFormat int destFormat,
            @TranslationSpec.DataFormat int destFormat,
@@ -170,6 +189,9 @@ final class TranslationManagerServiceImpl extends
        if (remoteService != null) {
        if (remoteService != null) {
            remoteService.onTranslationCapabilitiesRequest(sourceFormat, destFormat,
            remoteService.onTranslationCapabilitiesRequest(sourceFormat, destFormat,
                    resultReceiver);
                    resultReceiver);
        } else {
            Slog.v(TAG, "onTranslationCapabilitiesRequestLocked(): no remote service.");
            resultReceiver.send(STATUS_SYNC_CALL_FAIL, null);
        }
        }
    }
    }


@@ -184,10 +206,13 @@ final class TranslationManagerServiceImpl extends


    @GuardedBy("mLock")
    @GuardedBy("mLock")
    void onSessionCreatedLocked(@NonNull TranslationContext translationContext, int sessionId,
    void onSessionCreatedLocked(@NonNull TranslationContext translationContext, int sessionId,
            IResultReceiver resultReceiver) {
            IResultReceiver resultReceiver) throws RemoteException {
        final RemoteTranslationService remoteService = ensureRemoteServiceLocked();
        final RemoteTranslationService remoteService = ensureRemoteServiceLocked();
        if (remoteService != null) {
        if (remoteService != null) {
            remoteService.onSessionCreated(translationContext, sessionId, resultReceiver);
            remoteService.onSessionCreated(translationContext, sessionId, resultReceiver);
        } else {
            Slog.v(TAG, "onSessionCreatedLocked(): no remote service.");
            resultReceiver.send(STATUS_SYNC_CALL_FAIL, null);
        }
        }
    }
    }