summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Daniel Estrada Alva <destradaa@google.com> 2016-03-16 21:49:10 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-03-16 21:49:12 +0000
commit5e19f91585ca82ae58e854491dd67ee2e9f66eba (patch)
treebf2f7709d4de584adb1578d49827a1f83cef826c
parent400349907ec5bb09887e5ba9f9cd1fa1f3d06716 (diff)
parent8bad3fec0f54959958352c0bef90b813cd0d823a (diff)
Merge "Update ContextHubManager's System APIs." into nyc-dev
-rw-r--r--api/system-current.txt7
-rw-r--r--core/java/android/hardware/location/ContextHubManager.java126
-rw-r--r--core/java/android/hardware/location/ContextHubService.java33
3 files changed, 73 insertions, 93 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 8765ca943961..b2828d4d2df1 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -15284,7 +15284,7 @@ package android.hardware.location {
}
public final class ContextHubManager {
- method public java.lang.Integer[] findNanoAppOnHub(int, android.hardware.location.NanoAppFilter);
+ method public int[] findNanoAppOnHub(int, android.hardware.location.NanoAppFilter);
method public int[] getContextHubHandles();
method public android.hardware.location.ContextHubInfo getContextHubInfo(int);
method public android.hardware.location.NanoAppInstanceInfo getNanoAppInstanceInfo(int);
@@ -15300,8 +15300,9 @@ package android.hardware.location {
field public static final int MSG_UNLOAD_NANO_APP = 2; // 0x2
}
- public abstract class ContextHubManager.ContextHubCallback {
- ctor public ContextHubManager.ContextHubCallback();
+ public static abstract class ContextHubManager.ContextHubCallback {
+ ctor protected ContextHubManager.ContextHubCallback();
+ method public abstract void onMessageReceipt(int, int, android.hardware.location.ContextHubMessage);
}
public class ContextHubMessage {
diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java
index 38a760a065dd..8deded259194 100644
--- a/core/java/android/hardware/location/ContextHubManager.java
+++ b/core/java/android/hardware/location/ContextHubManager.java
@@ -15,13 +15,8 @@
*/
package android.hardware.location;
-import android.Manifest;
import android.annotation.SystemApi;
-import android.content.ComponentName;
import android.content.Context;
-import android.content.ServiceConnection;
-import android.hardware.location.ContextHubService;
-import android.hardware.location.NanoAppInstanceInfo;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
@@ -29,19 +24,11 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
/**
- * A class that exposes the Context hubs on a device to
- * applicaions.
+ * A class that exposes the Context hubs on a device to applications.
*
- * Please not that this class is not expected to be used by
- * unbundled applications. Also, calling applications are
- * expected to have LOCTION_HARDWARE premissions to use this
- * class.
+ * 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.
*
* @hide
*/
@@ -49,21 +36,14 @@ import java.util.concurrent.TimeUnit;
public final class ContextHubManager {
private static final String TAG = "ContextHubManager";
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- private static final String HARDWARE_PERMISSION = Manifest.permission.LOCATION_HARDWARE;
- private static final String ENFORCE_HW_PERMISSION_MESSAGE = "Permission '"
- + HARDWARE_PERMISSION + "' not granted to access ContextHub Hardware";
- private final Context mContext;
private final Looper mMainLooper;
private IContextHubService mContextHubService;
- private boolean mContextHubConnected;
private ContextHubCallback mCallback;
private Handler mCallbackHandler;
/**
- * A special context hub identifer meaning any possible hub on
- * the system.
+ * A special context hub identifier meaning any possible hub on the system.
*/
public static final int ANY_HUB = -1;
/**
@@ -80,19 +60,24 @@ public final class ContextHubManager {
public static final int MSG_DATA_SEND = 3;
/**
- * an interface to receive asynchronous communication from the context hub
+ * An interface to receive asynchronous communication from the context hub.
*/
- public abstract class ContextHubCallback {
+ public abstract static class ContextHubCallback {
+ protected ContextHubCallback() {}
+
/**
- * callback function called on message receipt from context hub
+ * Callback function called on message receipt from context hub.
*
- * @param hubId id of the hub of the message
- * @param nanoAppId identifier for the app that sent the message
- * @param msg the context hub message
+ * @param hubHandle Handle (system-wide unique identifier) of the hub of the message.
+ * @param nanoAppHandle Handle (unique identifier) for the app that sent the message.
+ * @param message The context hub message.
*
* @see ContextHubMessage
*/
- abstract void onMessageReceipt(int hubId, int nanoAppId, ContextHubMessage msg);
+ public abstract void onMessageReceipt(
+ int hubHandle,
+ int nanoAppHandle,
+ ContextHubMessage message);
}
/**
@@ -104,7 +89,7 @@ public final class ContextHubManager {
try {
retVal = getBinder().getContextHubHandles();
} catch (RemoteException e) {
- Log.e(TAG, "Could not fetch context hub handles :" + e.toString());
+ Log.e(TAG, "Could not fetch context hub handles : " + e);
}
return retVal;
}
@@ -112,25 +97,24 @@ public final class ContextHubManager {
/**
* Get more information about a specific hub.
*
- * @param contexthubHandle Handle of context hub
- *
- * @return ContextHubInfo returned information about the hub
+ * @param hubHandle Handle (system-wide unique identifier) of a context hub.
+ * @return ContextHubInfo Information about the requested context hub.
*
* @see ContextHubInfo
*/
- public ContextHubInfo getContextHubInfo(int contexthubHandle) {
+ public ContextHubInfo getContextHubInfo(int hubHandle) {
ContextHubInfo retVal = null;
try {
- retVal = getBinder().getContextHubInfo(contexthubHandle);
+ retVal = getBinder().getContextHubInfo(hubHandle);
} catch (RemoteException e) {
- Log.e(TAG, "Could not fetch context hub info :" + e.toString());
+ Log.e(TAG, "Could not fetch context hub info :" + e);
}
return retVal;
}
/**
- * Load a nanoapp on a specified context hub
+ * Load a nano app on a specified context hub.
*
* @param hubHandle handle of context hub to load the app on.
* @param app the nanoApp to load on the hub
@@ -149,7 +133,7 @@ public final class ContextHubManager {
try {
retVal = getBinder().loadNanoApp(hubHandle, app);
} catch (RemoteException e) {
- Log.e(TAG, "Could not fetch load nanoApp :" + e.toString());
+ Log.e(TAG, "Could not fetch load nanoApp :" + e);
}
return retVal;
@@ -158,17 +142,17 @@ public final class ContextHubManager {
/**
* Unload a specified nanoApp
*
- * @param nanoAppInstanceHandle handle of the nanoApp to load
+ * @param nanoAppHandle handle of the nanoApp to load
*
- * @return int 0 on success, -1 otherewise
+ * @return int 0 on success, -1 otherwise
*/
- public int unloadNanoApp(int nanoAppInstanceHandle) {
+ public int unloadNanoApp(int nanoAppHandle) {
int retVal = -1;
try {
- retVal = getBinder().unloadNanoApp(nanoAppInstanceHandle);
+ retVal = getBinder().unloadNanoApp(nanoAppHandle);
} catch (RemoteException e) {
- Log.e(TAG, "Could not fetch unload nanoApp :" + e.toString());
+ Log.e(TAG, "Could not fetch unload nanoApp :" + e);
}
return retVal;
@@ -177,20 +161,18 @@ public final class ContextHubManager {
/**
* get information about the nano app instance
*
- * @param nanoAppInstanceHandle handle of the nanoAppInstance
- *
- * @return NanoAppInstanceInfo Inforamtion about the nano app
- * instance.
+ * @param nanoAppHandle handle of the nanoAppInstance
+ * @return NanoAppInstanceInfo Information about the nano app instance.
*
* @see NanoAppInstanceInfo
*/
- public NanoAppInstanceInfo getNanoAppInstanceInfo(int nanoAppInstanceHandle) {
+ public NanoAppInstanceInfo getNanoAppInstanceInfo(int nanoAppHandle) {
NanoAppInstanceInfo retVal = null;
try {
- retVal = getBinder().getNanoAppInstanceInfo(nanoAppInstanceHandle);
+ retVal = getBinder().getNanoAppInstanceInfo(nanoAppHandle);
} catch (RemoteException e) {
- Log.e(TAG, "Could not fetch nanoApp info :" + e.toString());
+ Log.e(TAG, "Could not fetch nanoApp info :" + e);
}
return retVal;
@@ -204,33 +186,24 @@ public final class ContextHubManager {
*
* @see NanoAppFilter
*
- * @return Integer[] Array of handles to any found nano apps
+ * @return int[] Array of handles to any found nano apps
*/
- public Integer[] findNanoAppOnHub(int hubHandle, NanoAppFilter filter) {
- int[] temp;
- Integer[] retVal = null;
-
+ public int[] findNanoAppOnHub(int hubHandle, NanoAppFilter filter) {
+ int[] retVal = null;
try {
- temp = getBinder().findNanoAppOnHub(hubHandle, filter);
- retVal = new Integer[temp.length];
- for (int i = 0; i < temp.length; i++) {
- retVal[i] = temp[i];
- }
+ retVal = getBinder().findNanoAppOnHub(hubHandle, filter);
} catch (RemoteException e) {
- Log.e(TAG, "Could not query nanoApp instance :" + e.toString());
+ Log.e(TAG, "Could not query nanoApp instance :" + e);
}
-
return retVal;
}
/**
- * Send a message to a spcific nano app instance on a context
- * hub
- *
+ * Send a message to a specific nano app instance on a context hub.
*
* @param hubHandle handle of the hub to send the message to
* @param nanoAppHandle handle of the nano app to send to
- * @param msg Message to be sent
+ * @param message Message to be sent
*
* @see ContextHubMessage
*
@@ -251,7 +224,6 @@ public final class ContextHubManager {
/**
* Set a callback to receive messages from the context hub
*
- *
* @param callback Callback object
*
* @see ContextHubCallback
@@ -265,9 +237,8 @@ public final class ContextHubManager {
/**
* Set a callback to receive messages from the context hub
*
- *
* @param callback Callback object
- * @param hander Hander object
+ * @param handler Handler object
*
* @see ContextHubCallback
*
@@ -286,8 +257,7 @@ public final class ContextHubManager {
}
/**
- * Unregister a callback for receive messages from the context
- * hub
+ * Unregister a callback for receive messages from the context hub.
*
* @see ContextHubCallback
*
@@ -308,14 +278,10 @@ public final class ContextHubManager {
return 0;
}
- private void checkPermissions() {
- mContext.enforceCallingPermission(HARDWARE_PERMISSION, ENFORCE_HW_PERMISSION_MESSAGE);
- }
-
private IContextHubCallback.Stub mClientCallback = new IContextHubCallback.Stub() {
@Override
public void onMessageReceipt(final int hubId, final int nanoAppId,
- final ContextHubMessage message) throws RemoteException {
+ final ContextHubMessage message) {
if (mCallback != null) {
synchronized(this) {
final ContextHubCallback callback = mCallback;
@@ -336,8 +302,6 @@ public final class ContextHubManager {
/** @hide */
public ContextHubManager(Context context, Looper mainLooper) {
- checkPermissions();
- mContext = context;
mMainLooper = mainLooper;
IBinder b = ServiceManager.getService(ContextHubService.CONTEXTHUB_SERVICE);
@@ -347,7 +311,7 @@ public final class ContextHubManager {
try {
getBinder().registerCallback(mClientCallback);
} catch (RemoteException e) {
- Log.e(TAG, "Could not register callback:" + e.toString());
+ Log.e(TAG, "Could not register callback:" + e);
}
} else {
diff --git a/core/java/android/hardware/location/ContextHubService.java b/core/java/android/hardware/location/ContextHubService.java
index 658d90bae21e..274babe6a930 100644
--- a/core/java/android/hardware/location/ContextHubService.java
+++ b/core/java/android/hardware/location/ContextHubService.java
@@ -16,10 +16,8 @@
package android.hardware.location;
-import android.app.Service;
+import android.Manifest;
import android.content.Context;
-import android.content.Intent;
-import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
@@ -32,6 +30,9 @@ import java.util.HashMap;
public class ContextHubService extends IContextHubService.Stub {
private static final String TAG = "ContextHubService";
+ private static final String HARDWARE_PERMISSION = Manifest.permission.LOCATION_HARDWARE;
+ private static final String ENFORCE_HW_PERMISSION_MESSAGE = "Permission '"
+ + HARDWARE_PERMISSION + "' not granted to access ContextHub Hardware";
public static final String CONTEXTHUB_SERVICE = "contexthub_service";
@@ -56,6 +57,7 @@ public class ContextHubService extends IContextHubService.Stub {
@Override
public int registerCallback(IContextHubCallback callback) throws RemoteException{
+ checkPermissions();
mCallback = callback;
return 0;
}
@@ -83,6 +85,7 @@ public class ContextHubService extends IContextHubService.Stub {
@Override
public int[] getContextHubHandles() throws RemoteException {
+ checkPermissions();
int [] returnArray = new int[mContextHubInfo.length];
for (int i = 0; i < returnArray.length; ++i) {
@@ -96,6 +99,7 @@ public class ContextHubService extends IContextHubService.Stub {
@Override
public ContextHubInfo getContextHubInfo(int contextHubHandle) throws RemoteException {
+ checkPermissions();
contextHubHandle -= 1;
if (!(contextHubHandle >= 0 && contextHubHandle < mContextHubInfo.length)) {
return null; // null means fail
@@ -106,6 +110,7 @@ public class ContextHubService extends IContextHubService.Stub {
@Override
public int loadNanoApp(int contextHubHandle, NanoApp app) throws RemoteException {
+ checkPermissions();
contextHubHandle -= 1;
if (!(contextHubHandle >= 0 && contextHubHandle < mContextHubInfo.length)) {
@@ -123,11 +128,12 @@ public class ContextHubService extends IContextHubService.Stub {
return nativeSendMessage(msgHeader, app.getAppBinary());
}
- @Override
- public int unloadNanoApp(int nanoAppInstanceHandle) throws RemoteException {
+ @Override
+ public int unloadNanoApp(int nanoAppInstanceHandle) throws RemoteException {
+ checkPermissions();
NanoAppInstanceInfo info = mNanoAppHash.get(nanoAppInstanceHandle);
if (info == null) {
- return -1; //means failed
+ return -1; //means failed
}
// Call Native interface here
@@ -137,10 +143,12 @@ public class ContextHubService extends IContextHubService.Stub {
msgHeader[2] = info.getHandle();
return nativeSendMessage(msgHeader, null);
- }
+ }
@Override
- public NanoAppInstanceInfo getNanoAppInstanceInfo(int nanoAppInstanceHandle) throws RemoteException {
+ public NanoAppInstanceInfo getNanoAppInstanceInfo(int nanoAppInstanceHandle)
+ throws RemoteException {
+ checkPermissions();
// This assumes that all the nanoAppInfo is current. This is reasonable
// for the use cases for tightly controlled nanoApps.
if (mNanoAppHash.containsKey(nanoAppInstanceHandle)) {
@@ -152,6 +160,7 @@ public class ContextHubService extends IContextHubService.Stub {
@Override
public int[] findNanoAppOnHub(int hubHandle, NanoAppFilter filter) throws RemoteException {
+ checkPermissions();
ArrayList<Integer> foundInstances = new ArrayList<Integer>();
for(Integer nanoAppInstance : mNanoAppHash.keySet()) {
@@ -171,7 +180,9 @@ public class ContextHubService extends IContextHubService.Stub {
}
@Override
- public int sendMessage(int hubHandle, int nanoAppHandle, ContextHubMessage msg) throws RemoteException {
+ public int sendMessage(int hubHandle, int nanoAppHandle, ContextHubMessage msg)
+ throws RemoteException {
+ checkPermissions();
int[] msgHeader = new int[8];
msgHeader[0] = ContextHubManager.MSG_DATA_SEND;
msgHeader[1] = hubHandle;
@@ -181,5 +192,9 @@ public class ContextHubService extends IContextHubService.Stub {
return nativeSendMessage(msgHeader, msg.getData());
}
+
+ private void checkPermissions() {
+ mContext.enforceCallingPermission(HARDWARE_PERMISSION, ENFORCE_HW_PERMISSION_MESSAGE);
+ }
}