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

Commit 5bec2199 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Phase-2 API takes a hostname"

parents 61e5f712 194e4eeb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4556,7 +4556,7 @@ package android.app {
    method public final void attachBaseContext(android.content.Context);
    method public final android.os.IBinder onBind(android.content.Intent);
    method public abstract deprecated java.util.List<android.content.pm.EphemeralResolveInfo> onEphemeralResolveInfoList(int[], int);
    method public java.util.List<android.content.pm.EphemeralResolveInfo> onGetEphemeralIntentFilter(int[]);
    method public android.content.pm.EphemeralResolveInfo onGetEphemeralIntentFilter(java.lang.String);
    method public java.util.List<android.content.pm.EphemeralResolveInfo> onGetEphemeralResolveInfo(int[]);
    field public static final java.lang.String EXTRA_RESOLVE_INFO = "android.app.extra.RESOLVE_INFO";
    field public static final java.lang.String EXTRA_SEQUENCE = "android.app.extra.SEQUENCE";
+7 −8
Original line number Diff line number Diff line
@@ -68,9 +68,9 @@ public abstract class EphemeralResolverService extends Service {
    /**
     * Called to retrieve intent filters for ephemeral applications.
     *
     * @param digestPrefix The hash prefix of the ephemeral's domain.
     * @param hostName The name of the host to get intent filters for.
     */
    public List<EphemeralResolveInfo> onGetEphemeralIntentFilter(int digestPrefix[]) {
    public EphemeralResolveInfo onGetEphemeralIntentFilter(String hostName) {
        throw new IllegalStateException("Must define");
    }

@@ -96,11 +96,11 @@ public abstract class EphemeralResolverService extends Service {

            @Override
            public void getEphemeralIntentFilterList(
                    IRemoteCallback callback, int digestPrefix[], int sequence) {
                    IRemoteCallback callback, String hostName, int sequence) {
                final Message msg = mHandler.obtainMessage(
                        ServiceHandler.MSG_GET_EPHEMERAL_INTENT_FILTER, sequence, 0, callback);
                final Bundle data = new Bundle();
                data.putIntArray(EXTRA_PREFIX, digestPrefix);
                data.putString(EXTRA_HOSTNAME, hostName);
                msg.setData(data);
                msg.sendToTarget();
            }
@@ -136,12 +136,11 @@ public abstract class EphemeralResolverService extends Service {

                case MSG_GET_EPHEMERAL_INTENT_FILTER: {
                    final IRemoteCallback callback = (IRemoteCallback) message.obj;
                    final int[] digestPrefix = message.getData().getIntArray(EXTRA_PREFIX);
                    final List<EphemeralResolveInfo> resolveInfo =
                            onGetEphemeralIntentFilter(digestPrefix);
                    final String hostName = message.getData().getString(EXTRA_HOSTNAME);
                    final EphemeralResolveInfo resolveInfo = onGetEphemeralIntentFilter(hostName);
                    final Bundle data = new Bundle();
                    data.putInt(EXTRA_SEQUENCE, message.arg1);
                    data.putParcelableList(EXTRA_RESOLVE_INFO, resolveInfo);
                    data.putParcelable(EXTRA_RESOLVE_INFO, resolveInfo);
                    try {
                        callback.sendResult(data);
                    } catch (RemoteException e) {
+1 −1
Original line number Diff line number Diff line
@@ -23,6 +23,6 @@ oneway interface IEphemeralResolver {
    void getEphemeralResolveInfoList(IRemoteCallback callback, in int[] digestPrefix,
            int sequence);

    void getEphemeralIntentFilterList(IRemoteCallback callback, in int[] digestPrefix,
    void getEphemeralIntentFilterList(IRemoteCallback callback, String hostName,
            int sequence);
}
+9 −8
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.util.Slog;

import com.android.server.pm.EphemeralResolverConnection.PhaseTwoCallback;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@@ -72,19 +73,19 @@ public abstract class EphemeralResolver {
            EphemeralResolverConnection connection, EphemeralRequest requestObj,
            ActivityInfo ephemeralInstaller, Handler callbackHandler) {
        final Intent intent = requestObj.origIntent;
        final EphemeralDigest digest =
                new EphemeralDigest(intent.getData().getHost(), 5 /*maxDigests*/);
        final int[] shaPrefix = digest.getDigestPrefix();
        final byte[][] digestBytes = digest.getDigestBytes();
        final String hostName = intent.getData().getHost();
        final EphemeralDigest digest = new EphemeralDigest(hostName, 5 /*maxDigests*/);

        final PhaseTwoCallback callback = new PhaseTwoCallback() {
            @Override
            void onPhaseTwoResolved(List<EphemeralResolveInfo> ephemeralResolveInfoList,
            void onPhaseTwoResolved(EphemeralResolveInfo ephemeralResolveInfo,
                    int sequence) {
                final String packageName;
                final String splitName;
                if (ephemeralResolveInfoList != null
                        && ephemeralResolveInfoList.size() > 0) {
                if (ephemeralResolveInfo != null) {
                    final ArrayList<EphemeralResolveInfo> ephemeralResolveInfoList =
                            new ArrayList<EphemeralResolveInfo>(1);
                    ephemeralResolveInfoList.add(ephemeralResolveInfo);
                    final EphemeralResponse ephemeralIntentInfo =
                            EphemeralResolver.filterEphemeralIntent(
                                    ephemeralResolveInfoList, intent, null /*resolvedType*/,
@@ -118,7 +119,7 @@ public abstract class EphemeralResolver {
            }
        };
        connection.getEphemeralIntentFilterList(
                shaPrefix, callback, callbackHandler, 0 /*sequence*/);
                hostName, callback, callbackHandler, 0 /*sequence*/);
    }

    /**
+6 −7
Original line number Diff line number Diff line
@@ -84,24 +84,24 @@ final class EphemeralResolverConnection {
        return null;
    }

    public final void getEphemeralIntentFilterList(int digestPrefix[], PhaseTwoCallback callback,
    public final void getEphemeralIntentFilterList(String hostName, PhaseTwoCallback callback,
            Handler callbackHandler, final int sequence) {
        final IRemoteCallback remoteCallback = new IRemoteCallback.Stub() {
            @Override
            public void sendResult(Bundle data) throws RemoteException {
                final ArrayList<EphemeralResolveInfo> ephemeralResolveInfoList =
                        data.getParcelableArrayList(EphemeralResolverService.EXTRA_RESOLVE_INFO);
                final EphemeralResolveInfo ephemeralResolveInfo =
                        data.getParcelable(EphemeralResolverService.EXTRA_RESOLVE_INFO);
                callbackHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        callback.onPhaseTwoResolved(ephemeralResolveInfoList, sequence);
                        callback.onPhaseTwoResolved(ephemeralResolveInfo, sequence);
                    }
                });
            }
        };
        try {
            getRemoteInstanceLazy()
                    .getEphemeralIntentFilterList(remoteCallback, digestPrefix, sequence);
                    .getEphemeralIntentFilterList(remoteCallback, hostName, sequence);
        } catch (RemoteException re) {
        } catch (TimeoutException te) {
        }
@@ -173,8 +173,7 @@ final class EphemeralResolverConnection {
     * Asynchronous callback when results come back from ephemeral resolution phase two.
     */
    public abstract static class PhaseTwoCallback {
        abstract void onPhaseTwoResolved(List<EphemeralResolveInfo> ephemeralResolveInfoList,
                int sequence);
        abstract void onPhaseTwoResolved(EphemeralResolveInfo ephemeralResolveInfo, int sequence);
    }

    private final class MyServiceConnection implements ServiceConnection {