diff options
| author | Arthur Ishiguro <arthuri@google.com> | 2020-01-15 09:54:23 -0800 |
|---|---|---|
| committer | Arthur Ishiguro <arthuri@google.com> | 2020-01-21 14:39:51 -0800 |
| commit | 40428978557d2c2efd79d14d120df6669f9aefcc (patch) | |
| tree | 6002f8537a36f194a999cb7d7be2a951a2398d6e /core/java | |
| parent | 78bfd35ae1b0266cff5325a751880b9e1f0f72c0 (diff) | |
Adds a new ACCESS_CONTEXT_HUB permission
Since not all Context Hub applications are location-related, the
use of the LOCATION_HARDWARE permission to control access to the Context Hub
System APIs can be misleading. Create a new permission to access it, and
adds the logic to enforce the permission.
Also clarifies usage of PendingIntent ContextHubClient.
Bug: 135951924
Test: Compile and flash
Change-Id: I5f22db7e57ef4a6c3718acb38c4f313d6a04839f
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/hardware/location/ContextHubClient.java | 5 | ||||
| -rw-r--r-- | core/java/android/hardware/location/ContextHubManager.java | 87 |
2 files changed, 74 insertions, 18 deletions
diff --git a/core/java/android/hardware/location/ContextHubClient.java b/core/java/android/hardware/location/ContextHubClient.java index c6a5dd0d048d..43480ab9cc44 100644 --- a/core/java/android/hardware/location/ContextHubClient.java +++ b/core/java/android/hardware/location/ContextHubClient.java @@ -136,7 +136,10 @@ public class ContextHubClient implements Closeable { * @see NanoAppMessage * @see ContextHubTransaction.Result */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @ContextHubTransaction.Result public int sendMessageToNanoApp(@NonNull NanoAppMessage message) { Objects.requireNonNull(message, "NanoAppMessage cannot be null"); diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java index a51d2c929a2c..1001f800df3c 100644 --- a/core/java/android/hardware/location/ContextHubManager.java +++ b/core/java/android/hardware/location/ContextHubManager.java @@ -44,7 +44,9 @@ import java.util.concurrent.Executor; * A class that exposes the Context hubs on a device to applications. * * Please note that this class is not expected to be used by unbundled applications. Also, calling - * applications are expected to have LOCATION_HARDWARE permissions to use this class. + * applications are expected to have LOCATION_HARDWARE or ACCESS_CONTEXT_HUB permissions to use this + * class. Use of LOCATION_HARDWARE to enable access to these APIs is deprecated and may be removed + * in the future - all applications are recommended to move to the ACCESS_CONTEXT_HUB permission. * * @hide */ @@ -196,7 +198,10 @@ public final class ContextHubManager { * new APIs. */ @Deprecated - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) public int[] getContextHubHandles() { try { return mService.getContextHubHandles(); @@ -217,7 +222,10 @@ public final class ContextHubManager { * new APIs. */ @Deprecated - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) public ContextHubInfo getContextHubInfo(int hubHandle) { try { return mService.getContextHubInfo(hubHandle); @@ -248,7 +256,10 @@ public final class ContextHubManager { * @deprecated Use {@link #loadNanoApp(ContextHubInfo, NanoAppBinary)} instead. */ @Deprecated - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) public int loadNanoApp(int hubHandle, @NonNull NanoApp app) { try { return mService.loadNanoApp(hubHandle, app); @@ -275,7 +286,10 @@ public final class ContextHubManager { * @deprecated Use {@link #unloadNanoApp(ContextHubInfo, long)} instead. */ @Deprecated - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) public int unloadNanoApp(int nanoAppHandle) { try { return mService.unloadNanoApp(nanoAppHandle); @@ -315,7 +329,10 @@ public final class ContextHubManager { * for loaded nanoapps. */ @Deprecated - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @Nullable public NanoAppInstanceInfo getNanoAppInstanceInfo(int nanoAppHandle) { try { return mService.getNanoAppInstanceInfo(nanoAppHandle); @@ -338,7 +355,10 @@ public final class ContextHubManager { * for loaded nanoapps. */ @Deprecated - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public int[] findNanoAppOnHub(int hubHandle, @NonNull NanoAppFilter filter) { try { return mService.findNanoAppOnHub(hubHandle, filter); @@ -373,7 +393,10 @@ public final class ContextHubManager { * or {@link #createClient(ContextHubInfo, ContextHubClientCallback)}. */ @Deprecated - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) public int sendMessage(int hubHandle, int nanoAppHandle, @NonNull ContextHubMessage message) { try { return mService.sendMessage(hubHandle, nanoAppHandle, message); @@ -389,7 +412,10 @@ public final class ContextHubManager { * * @see ContextHubInfo */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public List<ContextHubInfo> getContextHubs() { try { return mService.getContextHubs(); @@ -466,7 +492,10 @@ public final class ContextHubManager { * * @see NanoAppBinary */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubTransaction<Void> loadNanoApp( @NonNull ContextHubInfo hubInfo, @NonNull NanoAppBinary appBinary) { Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null"); @@ -495,7 +524,10 @@ public final class ContextHubManager { * * @throws NullPointerException if hubInfo is null */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubTransaction<Void> unloadNanoApp( @NonNull ContextHubInfo hubInfo, long nanoAppId) { Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null"); @@ -523,7 +555,10 @@ public final class ContextHubManager { * * @throws NullPointerException if hubInfo is null */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubTransaction<Void> enableNanoApp( @NonNull ContextHubInfo hubInfo, long nanoAppId) { Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null"); @@ -551,7 +586,10 @@ public final class ContextHubManager { * * @throws NullPointerException if hubInfo is null */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubTransaction<Void> disableNanoApp( @NonNull ContextHubInfo hubInfo, long nanoAppId) { Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null"); @@ -578,7 +616,10 @@ public final class ContextHubManager { * * @throws NullPointerException if hubInfo is null */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubTransaction<List<NanoAppState>> queryNanoApps( @NonNull ContextHubInfo hubInfo) { Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null"); @@ -724,7 +765,10 @@ public final class ContextHubManager { * * @see ContextHubClientCallback */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubClient createClient( @NonNull ContextHubInfo hubInfo, @NonNull ContextHubClientCallback callback, @NonNull @CallbackExecutor Executor executor) { @@ -761,7 +805,10 @@ public final class ContextHubManager { * * @see ContextHubClientCallback */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubClient createClient( @NonNull ContextHubInfo hubInfo, @NonNull ContextHubClientCallback callback) { return createClient(hubInfo, callback, new HandlerExecutor(Handler.getMain())); @@ -780,6 +827,9 @@ public final class ContextHubManager { * If a client is regenerated, the host endpoint identifier attached to messages sent to the * nanoapp remains consistent, even if the original process has exited. * + * To avoid unintentionally spreading data from the Context Hub to external applications, it is + * strongly recommended that the PendingIntent supplied to this API is an explicit intent. + * * If registered successfully, intents will be delivered regarding events or messages from the * specified nanoapp from the attached Context Hub. The intent will have an extra * {@link ContextHubManager.EXTRA_CONTEXT_HUB_INFO} of type {@link ContextHubInfo}, which @@ -804,7 +854,10 @@ public final class ContextHubManager { * @throws IllegalStateException if there were too many registered clients at the service * @throws NullPointerException if pendingIntent or hubInfo is null */ - @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) + @RequiresPermission(anyOf = { + android.Manifest.permission.LOCATION_HARDWARE, + android.Manifest.permission.ACCESS_CONTEXT_HUB + }) @NonNull public ContextHubClient createClient( @NonNull ContextHubInfo hubInfo, @NonNull PendingIntent pendingIntent, long nanoAppId) { Objects.requireNonNull(pendingIntent); |
