summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2021-12-29 07:14:34 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-12-29 07:14:34 +0000
commitca48c3874f6f9ad80a42005fd8d087cdc57c711b (patch)
tree552bf6c802df0120f611aeb69992614f4fa4da45
parentd29ddfd18b19f03dd33e59248496c06a0f3c5f69 (diff)
parent8c6af16be0ee309b31fa80b54d33ff96f3d3c1d0 (diff)
Merge "Implement OnAssociationsChangedListener"
-rw-r--r--services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java23
1 files changed, 21 insertions, 2 deletions
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 9b370dc1f12e..a06672b29d74 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -90,6 +90,7 @@ import android.os.Environment;
import android.os.Handler;
import android.os.Parcel;
import android.os.PowerWhitelistManager;
+import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
@@ -183,6 +184,8 @@ public class CompanionDeviceManagerService extends SystemService {
mUnbindDeviceListenersRunnable = new UnbindDeviceListenersRunnable();
private ArrayMap<String, TriggerDeviceDisappearedRunnable> mTriggerDeviceDisappearedRunnables =
new ArrayMap<>();
+ private final RemoteCallbackList<IOnAssociationsChangedListener> mListeners =
+ new RemoteCallbackList<>();
final Object mLock = new Object();
final Handler mMainHandler = Handler.getMain();
@@ -441,13 +444,17 @@ public class CompanionDeviceManagerService extends SystemService {
enforceCallerCanManageCompanionDevice(getContext(),
"addOnAssociationsChangedListener");
- //TODO: Implement.
+ mListeners.register(listener, userId);
}
@Override
public void removeOnAssociationsChangedListener(IOnAssociationsChangedListener listener,
int userId) {
- //TODO: Implement.
+ enforceCallerCanInteractWithUserId(getContext(), userId);
+ enforceCallerCanManageCompanionDevice(
+ getContext(), "removeOnAssociationsChangedListener");
+
+ mListeners.unregister(listener);
}
@Override
@@ -941,6 +948,7 @@ public class CompanionDeviceManagerService extends SystemService {
private void updateAssociations(Function<Set<AssociationInfo>, Set<AssociationInfo>> update,
int userId) {
+ final List<AssociationInfo> associationList;
synchronized (mLock) {
if (DEBUG) Slog.d(LOG_TAG, "Updating Associations set...");
@@ -951,6 +959,8 @@ public class CompanionDeviceManagerService extends SystemService {
new ArraySet<>(prevAssociations));
if (DEBUG) Slog.d(LOG_TAG, " > After: " + updatedAssociations);
+ associationList = new ArrayList<>(updatedAssociations);
+
mCachedAssociations.put(userId, unmodifiableSet(updatedAssociations));
BackgroundThread.getHandler().sendMessage(
@@ -962,6 +972,15 @@ public class CompanionDeviceManagerService extends SystemService {
updateAtm(userId, updatedAssociations);
}
+
+ mListeners.broadcast((listener, callbackUserId) -> {
+ if ((int) callbackUserId == userId) {
+ try {
+ listener.onAssociationsChanged(associationList);
+ } catch (RemoteException ignored) {
+ }
+ }
+ });
}
private void updateAtm(int userId, Set<AssociationInfo> associations) {