Loading Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -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", Loading core/api/test-current.txt +8 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading core/java/android/hardware/location/ContextHubManager.java +29 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. * Loading core/java/android/hardware/location/IContextHubService.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -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); } services/core/java/com/android/server/location/contexthub/ContextHubService.java +44 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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 Loading
Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -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", Loading
core/api/test-current.txt +8 −0 Original line number Diff line number Diff line Loading @@ -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 { Loading
core/java/android/hardware/location/ContextHubManager.java +29 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. * Loading
core/java/android/hardware/location/IContextHubService.aidl +4 −0 Original line number Diff line number Diff line Loading @@ -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); }
services/core/java/com/android/server/location/contexthub/ContextHubService.java +44 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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