Merge "Remove LOCATION_HARDWARE from ContextHubManager/Client APIs"

This commit is contained in:
TreeHugger Robot
2021-07-20 01:30:51 +00:00
committed by Android (Google) Code Review
5 changed files with 42 additions and 131 deletions

View File

@@ -3684,7 +3684,7 @@ package android.hardware.location {
public class ContextHubClient implements java.io.Closeable {
method public void close();
method @NonNull public android.hardware.location.ContextHubInfo getAttachedHub();
method @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int sendMessageToNanoApp(@NonNull android.hardware.location.NanoAppMessage);
method @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public int sendMessageToNanoApp(@NonNull android.hardware.location.NanoAppMessage);
}
public class ContextHubClientCallback {
@@ -3735,26 +3735,26 @@ package android.hardware.location {
}
public final class ContextHubManager {
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.location.ContextHubClientCallback);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback, @NonNull java.util.concurrent.Executor);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> disableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> enableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
method @Deprecated @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int[] findNanoAppOnHub(int, @NonNull android.hardware.location.NanoAppFilter);
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int[] getContextHubHandles();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubInfo getContextHubInfo(int);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public java.util.List<android.hardware.location.ContextHubInfo> getContextHubs();
method @Deprecated @Nullable @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.NanoAppInstanceInfo getNanoAppInstanceInfo(int);
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int loadNanoApp(int, @NonNull android.hardware.location.NanoApp);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> loadNanoApp(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.NanoAppBinary);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.util.List<android.hardware.location.NanoAppState>> queryNanoApps(@NonNull android.hardware.location.ContextHubInfo);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.location.ContextHubClientCallback);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback, @NonNull java.util.concurrent.Executor);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubTransaction<java.lang.Void> disableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubTransaction<java.lang.Void> enableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public int[] findNanoAppOnHub(int, @NonNull android.hardware.location.NanoAppFilter);
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public int[] getContextHubHandles();
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubInfo getContextHubInfo(int);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public java.util.List<android.hardware.location.ContextHubInfo> getContextHubs();
method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.NanoAppInstanceInfo getNanoAppInstanceInfo(int);
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public int loadNanoApp(int, @NonNull android.hardware.location.NanoApp);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubTransaction<java.lang.Void> loadNanoApp(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.NanoAppBinary);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubTransaction<java.util.List<android.hardware.location.NanoAppState>> queryNanoApps(@NonNull android.hardware.location.ContextHubInfo);
method @Deprecated public int registerCallback(@NonNull android.hardware.location.ContextHubManager.Callback);
method @Deprecated public int registerCallback(android.hardware.location.ContextHubManager.Callback, android.os.Handler);
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int sendMessage(int, int, @NonNull android.hardware.location.ContextHubMessage);
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int unloadNanoApp(int);
method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> unloadNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public int sendMessage(int, int, @NonNull android.hardware.location.ContextHubMessage);
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public int unloadNanoApp(int);
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB) public android.hardware.location.ContextHubTransaction<java.lang.Void> unloadNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
method @Deprecated public int unregisterCallback(@NonNull android.hardware.location.ContextHubManager.Callback);
field public static final int AUTHORIZATION_DENIED = 0; // 0x0
field public static final int AUTHORIZATION_DENIED_GRACE_PERIOD = 1; // 0x1

View File

@@ -152,10 +152,7 @@ public class ContextHubClient implements Closeable {
* @see NanoAppMessage
* @see ContextHubTransaction.Result
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@ContextHubTransaction.Result
public int sendMessageToNanoApp(@NonNull NanoAppMessage message) {
Objects.requireNonNull(message, "NanoAppMessage cannot be null");

View File

@@ -47,9 +47,7 @@ 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 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.
* applications are expected to have the ACCESS_CONTEXT_HUB permission to use this class.
*
* @hide
*/
@@ -253,10 +251,7 @@ public final class ContextHubManager {
* new APIs.
*/
@Deprecated
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
public int[] getContextHubHandles() {
try {
return mService.getContextHubHandles();
@@ -277,10 +272,7 @@ public final class ContextHubManager {
* new APIs.
*/
@Deprecated
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
public ContextHubInfo getContextHubInfo(int hubHandle) {
try {
return mService.getContextHubInfo(hubHandle);
@@ -311,10 +303,7 @@ public final class ContextHubManager {
* @deprecated Use {@link #loadNanoApp(ContextHubInfo, NanoAppBinary)} instead.
*/
@Deprecated
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
public int loadNanoApp(int hubHandle, @NonNull NanoApp app) {
try {
return mService.loadNanoApp(hubHandle, app);
@@ -341,10 +330,7 @@ public final class ContextHubManager {
* @deprecated Use {@link #unloadNanoApp(ContextHubInfo, long)} instead.
*/
@Deprecated
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
public int unloadNanoApp(int nanoAppHandle) {
try {
return mService.unloadNanoApp(nanoAppHandle);
@@ -384,10 +370,7 @@ public final class ContextHubManager {
* for loaded nanoapps.
*/
@Deprecated
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@Nullable public NanoAppInstanceInfo getNanoAppInstanceInfo(int nanoAppHandle) {
try {
return mService.getNanoAppInstanceInfo(nanoAppHandle);
@@ -410,10 +393,7 @@ public final class ContextHubManager {
* for loaded nanoapps.
*/
@Deprecated
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public int[] findNanoAppOnHub(int hubHandle, @NonNull NanoAppFilter filter) {
try {
return mService.findNanoAppOnHub(hubHandle, filter);
@@ -448,10 +428,7 @@ public final class ContextHubManager {
* or {@link #createClient(ContextHubInfo, ContextHubClientCallback)}.
*/
@Deprecated
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
public int sendMessage(int hubHandle, int nanoAppHandle, @NonNull ContextHubMessage message) {
try {
return mService.sendMessage(hubHandle, nanoAppHandle, message);
@@ -467,10 +444,7 @@ public final class ContextHubManager {
*
* @see ContextHubInfo
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public List<ContextHubInfo> getContextHubs() {
try {
return mService.getContextHubs();
@@ -547,10 +521,7 @@ public final class ContextHubManager {
*
* @see NanoAppBinary
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubTransaction<Void> loadNanoApp(
@NonNull ContextHubInfo hubInfo, @NonNull NanoAppBinary appBinary) {
Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null");
@@ -579,10 +550,7 @@ public final class ContextHubManager {
*
* @throws NullPointerException if hubInfo is null
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubTransaction<Void> unloadNanoApp(
@NonNull ContextHubInfo hubInfo, long nanoAppId) {
Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null");
@@ -610,10 +578,7 @@ public final class ContextHubManager {
*
* @throws NullPointerException if hubInfo is null
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubTransaction<Void> enableNanoApp(
@NonNull ContextHubInfo hubInfo, long nanoAppId) {
Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null");
@@ -641,10 +606,7 @@ public final class ContextHubManager {
*
* @throws NullPointerException if hubInfo is null
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubTransaction<Void> disableNanoApp(
@NonNull ContextHubInfo hubInfo, long nanoAppId) {
Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null");
@@ -671,10 +633,7 @@ public final class ContextHubManager {
*
* @throws NullPointerException if hubInfo is null
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubTransaction<List<NanoAppState>> queryNanoApps(
@NonNull ContextHubInfo hubInfo) {
Objects.requireNonNull(hubInfo, "ContextHubInfo cannot be null");
@@ -829,10 +788,7 @@ public final class ContextHubManager {
*
* @see ContextHubClientCallback
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubClient createClient(
@Nullable Context context, @NonNull ContextHubInfo hubInfo,
@NonNull @CallbackExecutor Executor executor,
@@ -876,10 +832,7 @@ public final class ContextHubManager {
* {@link #createClient(ContextHubInfo, Executor, String, ContextHubClientCallback)}
* with the {@link Context} being set to null.
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubClient createClient(
@NonNull ContextHubInfo hubInfo, @NonNull ContextHubClientCallback callback,
@NonNull @CallbackExecutor Executor executor) {
@@ -890,10 +843,7 @@ public final class ContextHubManager {
* Equivalent to {@link #createClient(ContextHubInfo, ContextHubClientCallback, Executor)}
* with the executor using the main thread's Looper.
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubClient createClient(
@NonNull ContextHubInfo hubInfo, @NonNull ContextHubClientCallback callback) {
return createClient(null /* context */, hubInfo, new HandlerExecutor(Handler.getMain()),
@@ -946,10 +896,7 @@ 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(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubClient createClient(
@Nullable Context context, @NonNull ContextHubInfo hubInfo,
@NonNull PendingIntent pendingIntent, long nanoAppId) {
@@ -982,10 +929,7 @@ public final class ContextHubManager {
* Equivalent to {@link #createClient(ContextHubInfo, PendingIntent, long, String)}
* with {@link Context} being set to null.
*/
@RequiresPermission(anyOf = {
android.Manifest.permission.LOCATION_HARDWARE,
android.Manifest.permission.ACCESS_CONTEXT_HUB
})
@RequiresPermission(android.Manifest.permission.ACCESS_CONTEXT_HUB)
@NonNull public ContextHubClient createClient(
@NonNull ContextHubInfo hubInfo, @NonNull PendingIntent pendingIntent, long nanoAppId) {
return createClient(null /* context */, hubInfo, pendingIntent, nanoAppId);

View File

@@ -209,11 +209,6 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
*/
private AtomicBoolean mIsPendingIntentCancelled = new AtomicBoolean(false);
/*
* True if the application creating the client has the ACCESS_CONTEXT_HUB permission.
*/
private final boolean mHasAccessContextHubPermission;
/*
* Map containing all nanoapps this client has a messaging channel with and whether it is
* allowed to communicate over that channel. A channel is defined to have been opened if the
@@ -327,8 +322,6 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
mPid = Binder.getCallingPid();
mUid = Binder.getCallingUid();
mHasAccessContextHubPermission = context.checkCallingPermission(
Manifest.permission.ACCESS_CONTEXT_HUB) == PERMISSION_GRANTED;
mAppOpsManager = context.getSystemService(AppOpsManager.class);
startMonitoringOpChanges();
@@ -827,9 +820,7 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
*/
private void doSendPendingIntent(PendingIntent pendingIntent, Intent intent) {
try {
String requiredPermission = mHasAccessContextHubPermission
? Manifest.permission.ACCESS_CONTEXT_HUB
: Manifest.permission.LOCATION_HARDWARE;
String requiredPermission = Manifest.permission.ACCESS_CONTEXT_HUB;
pendingIntent.send(
mContext, 0 /* code */, intent, null /* onFinished */, null /* Handler */,
requiredPermission, null /* options */);

View File

@@ -30,28 +30,20 @@ import android.hardware.location.ContextHubTransaction;
import android.hardware.location.NanoAppBinary;
import android.hardware.location.NanoAppMessage;
import android.hardware.location.NanoAppState;
import android.os.Binder;
import android.os.Build;
import android.util.Log;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* A class encapsulating helper functions used by the ContextHubService class
*/
/* package */ class ContextHubServiceUtil {
private static final String TAG = "ContextHubServiceUtil";
private static final String HARDWARE_PERMISSION = Manifest.permission.LOCATION_HARDWARE;
private static final String CONTEXT_HUB_PERMISSION = Manifest.permission.ACCESS_CONTEXT_HUB;
// A set of packages that have already been warned regarding the ACCESS_CONTEXT_HUB permission.
private static final Set<String> PERMISSION_WARNED_PACKAGES = new HashSet<String>();
/**
* Creates a ConcurrentHashMap of the Context Hub ID to the ContextHubInfo object given an
* ArrayList of HIDL ContextHub objects.
@@ -209,25 +201,12 @@ import java.util.Set;
*/
/* package */
static void checkPermissions(Context context) {
boolean hasLocationHardwarePermission = (context.checkCallingPermission(HARDWARE_PERMISSION)
== PERMISSION_GRANTED);
boolean hasAccessContextHubPermission = (context.checkCallingPermission(
CONTEXT_HUB_PERMISSION) == PERMISSION_GRANTED);
if (!hasLocationHardwarePermission && !hasAccessContextHubPermission) {
if (!hasAccessContextHubPermission) {
throw new SecurityException(
"LOCATION_HARDWARE or ACCESS_CONTEXT_HUB permission required to use Context "
+ "Hub");
}
if (!hasAccessContextHubPermission && !Build.IS_USER) {
String pkgName = context.getPackageManager().getNameForUid(Binder.getCallingUid());
if (!PERMISSION_WARNED_PACKAGES.contains(pkgName)) {
Log.w(TAG, pkgName
+ ": please use the ACCESS_CONTEXT_HUB permission rather than "
+ "LOCATION_HARDWARE (will be removed for Context Hub APIs in T)");
PERMISSION_WARNED_PACKAGES.add(pkgName);
}
"ACCESS_CONTEXT_HUB permission required to use Context Hub");
}
}