diff options
| author | 2021-12-29 07:14:34 +0000 | |
|---|---|---|
| committer | 2021-12-29 07:14:34 +0000 | |
| commit | ca48c3874f6f9ad80a42005fd8d087cdc57c711b (patch) | |
| tree | 552bf6c802df0120f611aeb69992614f4fa4da45 | |
| parent | d29ddfd18b19f03dd33e59248496c06a0f3c5f69 (diff) | |
| parent | 8c6af16be0ee309b31fa80b54d33ff96f3d3c1d0 (diff) | |
Merge "Implement OnAssociationsChangedListener"
| -rw-r--r-- | services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java | 23 |
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) { |