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

Commit 42b8466b authored by Matthew Sedam's avatar Matthew Sedam Committed by Android (Google) Code Review
Browse files

Merge changes from topic "test-api-preloaded-nanoapps"

* changes:
  Adds a test API to get the list of preloaded nanoapp
  Add queryPreloadedNanoapps Test API to the Context Hub Service
parents 59e6b3c8 afcd38fe
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -205,7 +205,7 @@ java_library {
        "android.hardware.contexthub-V1.0-java",
        "android.hardware.contexthub-V1.1-java",
        "android.hardware.contexthub-V1.2-java",
        "android.hardware.contexthub-V1-java",
        "android.hardware.contexthub-V2-java",
        "android.hardware.gnss-V1.0-java",
        "android.hardware.gnss-V2.1-java",
        "android.hardware.health-V1.0-java-constants",
+8 −0
Original line number Diff line number Diff line
@@ -1316,6 +1316,14 @@ package android.hardware.lights {

}

package android.hardware.location {

  public final class ContextHubManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public long[] getPreloadedNanoAppIds(@NonNull android.hardware.location.ContextHubInfo);
  }

}

package android.hardware.soundtrigger {

  public class KeyphraseEnrollmentInfo {
+29 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.app.ActivityThread;
import android.app.PendingIntent;
import android.content.Context;
@@ -965,6 +966,34 @@ public final class ContextHubManager {
        return createClient(null /* context */, hubInfo, pendingIntent, nanoAppId);
    }

    /**
     * Queries for the list of preloaded nanoapp IDs on the system.
     *
     * @param hubInfo The Context Hub to query a list of nanoapp IDs from.
     *
     * @return The list of 64-bit IDs of the preloaded nanoapps.
     *
     * @throws NullPointerException if hubInfo is null
     * @hide
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
    @NonNull public long[] getPreloadedNanoAppIds(@NonNull ContextHubInfo hubInfo) {
        Objects.requireNonNull(hubInfo, "hubInfo cannot be null");

        long[] nanoappIds = null;
        try {
            nanoappIds = mService.getPreloadedNanoAppIds(hubInfo);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }

        if (nanoappIds == null) {
            nanoappIds = new long[0];
        }
        return nanoappIds;
    }

    /**
     * Unregister a callback for receive messages from the context hub.
     *
+4 −0
Original line number Diff line number Diff line
@@ -109,4 +109,8 @@ interface IContextHubService {
    // Queries for a list of nanoapps
    @EnforcePermission("ACCESS_CONTEXT_HUB")
    void queryNanoApps(int contextHubId, in IContextHubTransactionCallback transactionCallback);

    // Queries for a list of preloaded nanoapps
    @EnforcePermission("ACCESS_CONTEXT_HUB")
    long[] getPreloadedNanoAppIds(in ContextHubInfo hubInfo);
}
+44 −3
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -147,7 +148,6 @@ public class ContextHubService extends IContextHubService.Stub {
    private final ScheduledThreadPoolExecutor mDailyMetricTimer =
            new ScheduledThreadPoolExecutor(1);


    // The period of the recurring time
    private static final int PERIOD_METRIC_QUERY_DAYS = 1;

@@ -363,11 +363,13 @@ public class ContextHubService extends IContextHubService.Stub {
     */
    private void initDefaultClientMap() {
        HashMap<Integer, IContextHubClient> defaultClientMap = new HashMap<>();
        for (int contextHubId : mContextHubIdToInfoMap.keySet()) {
        for (Map.Entry<Integer, ContextHubInfo> entry: mContextHubIdToInfoMap.entrySet()) {
            int contextHubId = entry.getKey();
            ContextHubInfo contextHubInfo = entry.getValue();

            mLastRestartTimestampMap.put(contextHubId,
                    new AtomicLong(SystemClock.elapsedRealtimeNanos()));

            ContextHubInfo contextHubInfo = mContextHubIdToInfoMap.get(contextHubId);
            IContextHubClient client = mClientManager.registerClient(
                    contextHubInfo, createDefaultClientCallback(contextHubId),
                    /* attributionTag= */ null, mTransactionManager, mContext.getPackageName());
@@ -1133,6 +1135,26 @@ public class ContextHubService extends IContextHubService.Stub {
        mTransactionManager.addTransaction(transaction);
    }

    @android.annotation.EnforcePermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
    /**
     * Queries for a list of preloaded nanoapp IDs from the specified Context Hub.
     *
     * @param hubInfo The Context Hub to query a list of nanoapps from.
     * @return The list of 64-bit IDs of the preloaded nanoapps.
     * @throws NullPointerException if hubInfo is null
     */
    @Override
    public long[] getPreloadedNanoAppIds(ContextHubInfo hubInfo) throws RemoteException {
        super.getPreloadedNanoAppIds_enforcePermission();
        Objects.requireNonNull(hubInfo, "hubInfo cannot be null");

        long[] nanoappIds = mContextHubWrapper.getPreloadedNanoappIds();
        if (nanoappIds == null) {
            return new long[0];
        }
        return nanoappIds;
    }

    @Override
    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
@@ -1159,6 +1181,10 @@ public class ContextHubService extends IContextHubService.Stub {
        // Dump nanoAppHash
        mNanoAppStateManager.foreachNanoAppInstanceInfo((info) -> pw.println(info));

        pw.println("");
        pw.println("=================== PRELOADED NANOAPPS ====================");
        dumpPreloadedNanoapps(pw);

        pw.println("");
        pw.println("=================== CLIENTS ====================");
        pw.println(mClientManager);
@@ -1201,6 +1227,21 @@ public class ContextHubService extends IContextHubService.Stub {
        proto.flush();
    }

    /**
     * Dumps preloaded nanoapps to the console
     */
    private void dumpPreloadedNanoapps(PrintWriter pw) {
        if (mContextHubWrapper == null) {
            return;
        }

        long[] preloadedNanoappIds = mContextHubWrapper.getPreloadedNanoappIds();
        for (long preloadedNanoappId: preloadedNanoappIds) {
            pw.print("ID: 0x");
            pw.println(Long.toHexString(preloadedNanoappId));
        }
    }

    private void checkPermissions() {
        ContextHubServiceUtil.checkPermissions(mContext);
    }
Loading