aboutsummaryrefslogtreecommitdiff
path: root/car-lib
diff options
context:
space:
mode:
authorAsaf Rosenfeld <asafro@google.com>2017-03-21 22:55:48 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2017-03-21 22:55:48 +0000
commit0cad3236e5f46abeb211cca11b5ba3f68f679d6a (patch)
treedbc333d32353ed022855703baba5a13f2ce950ea /car-lib
parent802521cdc337d2c02d0622f210ff09512e93a7a3 (diff)
parent2ca6f8cd2347a6649308a566bbba4f4deb37f2ff (diff)
downloadCar-0cad3236e5f46abeb211cca11b5ba3f68f679d6a.tar.gz
Merge "Adding availability support to VMS subscribers"
Diffstat (limited to 'car-lib')
-rw-r--r--car-lib/src/android/car/vms/IVmsSubscriberClient.aidl (renamed from car-lib/src/android/car/vms/IOnVmsMessageReceivedListener.aidl)6
-rw-r--r--car-lib/src/android/car/vms/IVmsSubscriberService.aidl23
-rw-r--r--car-lib/src/android/car/vms/VmsSubscriberManager.java66
3 files changed, 69 insertions, 26 deletions
diff --git a/car-lib/src/android/car/vms/IOnVmsMessageReceivedListener.aidl b/car-lib/src/android/car/vms/IVmsSubscriberClient.aidl
index f94493d566..8a0f546e82 100644
--- a/car-lib/src/android/car/vms/IOnVmsMessageReceivedListener.aidl
+++ b/car-lib/src/android/car/vms/IVmsSubscriberClient.aidl
@@ -16,12 +16,16 @@
package android.car.vms;
+import android.car.vms.VmsLayer;
+
/**
* @hide
*/
-oneway interface IOnVmsMessageReceivedListener {
+oneway interface IVmsSubscriberClient {
/**
* A VmsService uses this callback to pass messages to subscribers.
*/
void onVmsMessageReceived(in int layerId, in int layerVersion, in byte[] payload) = 0;
+
+ void onLayersAvailabilityChange(in List<VmsLayer> availableLayers) = 1;
}
diff --git a/car-lib/src/android/car/vms/IVmsSubscriberService.aidl b/car-lib/src/android/car/vms/IVmsSubscriberService.aidl
index b6c31946cf..40ee67fc25 100644
--- a/car-lib/src/android/car/vms/IVmsSubscriberService.aidl
+++ b/car-lib/src/android/car/vms/IVmsSubscriberService.aidl
@@ -16,7 +16,8 @@
package android.car.vms;
-import android.car.vms.IOnVmsMessageReceivedListener;
+import android.car.vms.IVmsSubscriberClient;
+import android.car.vms.VmsLayer;
/**
* @hide
@@ -25,8 +26,8 @@ interface IVmsSubscriberService {
/**
* Subscribes the listener to receive messages from layer/version.
*/
- void addOnVmsMessageReceivedListener(
- in IOnVmsMessageReceivedListener listener,
+ void addVmsSubscriberClientListener(
+ in IVmsSubscriberClient listener,
int layer,
int version) = 0;
@@ -35,13 +36,13 @@ interface IVmsSubscriberService {
* service will not send any subscription notifications to publishers (i.e. this is a passive
* subscriber).
*/
- void addOnVmsMessageReceivedPassiveListener(in IOnVmsMessageReceivedListener listener) = 1;
+ void addVmsSubscriberClientPassiveListener(in IVmsSubscriberClient listener) = 1;
/**
   * Tells the VmsSubscriberService a client unsubscribes to layer messages.
   */
- void removeOnVmsMessageReceivedListener(
- in IOnVmsMessageReceivedListener listener,
+ void removeVmsSubscriberClientListener(
+ in IVmsSubscriberClient listener,
int layer,
int version) = 2;
@@ -49,6 +50,12 @@ interface IVmsSubscriberService {
   * Tells the VmsSubscriberService a passive client unsubscribes. This will not unsubscribe
* the listener from any specific layer it has subscribed to.
   */
- void removeOnVmsMessageReceivedPassiveListener(
- in IOnVmsMessageReceivedListener listener) = 3;
+ void removeVmsSubscriberClientPassiveListener(
+ in IVmsSubscriberClient listener) = 3;
+
+ /**
+ * Tells the VmsSubscriberService a client requests the list of available layers.
+ * The service should call the client's onLayersAvailabilityChange in response.
+ */
+ List<VmsLayer> getAvailableLayers() = 4;
}
diff --git a/car-lib/src/android/car/vms/VmsSubscriberManager.java b/car-lib/src/android/car/vms/VmsSubscriberManager.java
index 26d63e8ab3..0bdab95c51 100644
--- a/car-lib/src/android/car/vms/VmsSubscriberManager.java
+++ b/car-lib/src/android/car/vms/VmsSubscriberManager.java
@@ -16,7 +16,6 @@
package android.car.vms;
-import android.annotation.SystemApi;
import android.car.Car;
import android.car.CarManagerBase;
import android.car.CarNotConnectedException;
@@ -27,10 +26,9 @@ import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.util.Log;
-
import com.android.internal.annotations.GuardedBy;
-
import java.lang.ref.WeakReference;
+import java.util.List;
/**
* API for interfacing with the VmsSubscriberService. It supports a single listener that can
@@ -47,15 +45,18 @@ public final class VmsSubscriberManager implements CarManagerBase {
private final Handler mHandler;
private final IVmsSubscriberService mVmsSubscriberService;
- private final IOnVmsMessageReceivedListener mIListener;
+ private final IVmsSubscriberClient mIListener;
private final Object mListenerLock = new Object();
@GuardedBy("mListenerLock")
- private OnVmsMessageReceivedListener mListener;
+ private VmsSubscriberClientListener mListener;
- /** Interface exposed to VMS subscribers: it is a wrapper of IOnVmsMessageReceivedListener. */
- public interface OnVmsMessageReceivedListener {
+ /** Interface exposed to VMS subscribers: it is a wrapper of IVmsSubscriberClient. */
+ public interface VmsSubscriberClientListener {
/** Called when the property is updated */
void onVmsMessageReceived(int layerId, int layerVersion, byte[] payload);
+
+ /** Called when layers availability change */
+ void onLayersAvailabilityChange(List<VmsLayer> availableLayers);
}
/**
@@ -64,6 +65,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
private final static class VmsEventHandler extends Handler {
/** Constants handled in the handler */
private static final int ON_RECEIVE_MESSAGE_EVENT = 0;
+ private static final int ON_AVAILABILITY_CHANGE_EVENT = 1;
private final WeakReference<VmsSubscriberManager> mMgr;
@@ -74,9 +76,9 @@ public final class VmsSubscriberManager implements CarManagerBase {
@Override
public void handleMessage(Message msg) {
+ VmsSubscriberManager mgr = mMgr.get();
switch (msg.what) {
case ON_RECEIVE_MESSAGE_EVENT:
- VmsSubscriberManager mgr = mMgr.get();
if (mgr != null) {
// Parse the message
VmsDataMessage vmsDataMessage = (VmsDataMessage) msg.obj;
@@ -87,6 +89,16 @@ public final class VmsSubscriberManager implements CarManagerBase {
vmsDataMessage.getPayload());
}
break;
+ case ON_AVAILABILITY_CHANGE_EVENT:
+ if (mgr != null) {
+ // Parse the message
+ List<VmsLayer> vmsAvailabilityChangeMessage = (List<VmsLayer>) msg.obj;
+
+ // Dispatch the parsed message
+ mgr.dispatchOnAvailabilityChangeMessage(vmsAvailabilityChangeMessage);
+ }
+ break;
+
default:
Log.e(VmsSubscriberManager.TAG, "Event type not handled: " + msg.what);
break;
@@ -97,7 +109,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
public VmsSubscriberManager(IBinder service, Handler handler) {
mVmsSubscriberService = IVmsSubscriberService.Stub.asInterface(service);
mHandler = new VmsEventHandler(this, handler.getLooper());
- mIListener = new IOnVmsMessageReceivedListener.Stub() {
+ mIListener = new IVmsSubscriberClient.Stub() {
@Override
public void onVmsMessageReceived(int layerId, int layerVersion, byte[] payload)
throws RemoteException {
@@ -108,6 +120,14 @@ public final class VmsSubscriberManager implements CarManagerBase {
VmsEventHandler.ON_RECEIVE_MESSAGE_EVENT,
vmsDataMessage));
}
+
+ @Override
+ public void onLayersAvailabilityChange(List<VmsLayer> availableLayers) {
+ mHandler.sendMessage(
+ mHandler.obtainMessage(
+ VmsEventHandler.ON_AVAILABILITY_CHANGE_EVENT,
+ availableLayers));
+ }
};
}
@@ -120,7 +140,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
* @param listener subscriber listener that will handle onVmsMessageReceived events.
* @throws IllegalStateException if the listener was already set.
*/
- public void setListener(OnVmsMessageReceivedListener listener) {
+ public void setListener(VmsSubscriberClientListener listener) {
if (DBG) {
Log.d(TAG, "Setting listener.");
}
@@ -154,7 +174,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
if (DBG) {
Log.d(TAG, "Subscribing to layer: " + layer + ", version: " + version);
}
- OnVmsMessageReceivedListener listener;
+ VmsSubscriberClientListener listener;
synchronized (mListenerLock) {
listener = mListener;
}
@@ -164,7 +184,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
throw new IllegalStateException("Listener was not set.");
}
try {
- mVmsSubscriberService.addOnVmsMessageReceivedListener(mIListener, layer, version);
+ mVmsSubscriberService.addVmsSubscriberClientListener(mIListener, layer, version);
} catch (RemoteException e) {
Log.e(TAG, "Could not connect: ", e);
throw new CarNotConnectedException(e);
@@ -178,7 +198,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
if (DBG) {
Log.d(TAG, "Subscribing passively to all data messages");
}
- OnVmsMessageReceivedListener listener;
+ VmsSubscriberClientListener listener;
synchronized (mListenerLock) {
listener = mListener;
}
@@ -188,7 +208,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
throw new IllegalStateException("Listener was not set.");
}
try {
- mVmsSubscriberService.addOnVmsMessageReceivedPassiveListener(mIListener);
+ mVmsSubscriberService.addVmsSubscriberClientPassiveListener(mIListener);
} catch (RemoteException e) {
Log.e(TAG, "Could not connect: ", e);
throw new CarNotConnectedException(e);
@@ -208,7 +228,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
if (DBG) {
Log.d(TAG, "Unsubscribing from layer: " + layer + ", version: " + version);
}
- OnVmsMessageReceivedListener listener;
+ VmsSubscriberClientListener listener;
synchronized (mListenerLock) {
listener = mListener;
}
@@ -218,7 +238,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
throw new IllegalStateException("Listener was not set.");
}
try {
- mVmsSubscriberService.removeOnVmsMessageReceivedListener(mIListener, layer, version);
+ mVmsSubscriberService.removeVmsSubscriberClientListener(mIListener, layer, version);
} catch (RemoteException e) {
Log.e(TAG, "Failed to unregister subscriber", e);
// ignore
@@ -228,7 +248,7 @@ public final class VmsSubscriberManager implements CarManagerBase {
}
private void dispatchOnReceiveMessage(int layerId, int layerVersion, byte[] payload) {
- OnVmsMessageReceivedListener listener;
+ VmsSubscriberClientListener listener;
synchronized (mListenerLock) {
listener = mListener;
}
@@ -239,6 +259,18 @@ public final class VmsSubscriberManager implements CarManagerBase {
listener.onVmsMessageReceived(layerId, layerVersion, payload);
}
+ private void dispatchOnAvailabilityChangeMessage(List<VmsLayer> availableLayers) {
+ VmsSubscriberClientListener listener;
+ synchronized (mListenerLock) {
+ listener = mListener;
+ }
+ if (listener == null) {
+ Log.e(TAG, "Listener died, not dispatching event.");
+ return;
+ }
+ listener.onLayersAvailabilityChange(availableLayers);
+ }
+
/** @hide */
@Override
public void onCarDisconnected() {