Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78eef5a3 authored by Joe Antonetti's avatar Joe Antonetti
Browse files

[Handoff][5/N] Notify Listeners of Initial Task State on First Registration

This change updates listener logic to automatically send the list of `RemoteTask`s to new listeners upon registration. As a result of this, the unneeded `getRemoteTasks` method has now been removed

Flag: android.companion.enable_task_continuity
Bug: 400970610
Test: Updated Unit Tests
Change-Id: I73d51aa168fe3217ecdf64b0ba6462005cf9bcd6
parent dfdfce57
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3490,7 +3490,6 @@ package android.companion.datatransfer.continuity {
  }
  @FlaggedApi("android.companion.enable_task_continuity") public class TaskContinuityManager {
    method @NonNull public java.util.List<android.companion.datatransfer.continuity.RemoteTask> getRemoteTasks();
    method public void registerRemoteTaskListener(@NonNull java.util.concurrent.Executor, @NonNull android.companion.datatransfer.continuity.TaskContinuityManager.RemoteTaskListener);
    method public void requestHandoff(int, int, @NonNull java.util.concurrent.Executor, @NonNull android.companion.datatransfer.continuity.TaskContinuityManager.HandoffRequestCallback);
    method public void unregisterRemoteTaskListener(@NonNull android.companion.datatransfer.continuity.TaskContinuityManager.RemoteTaskListener);
+1 −2
Original line number Diff line number Diff line
@@ -24,9 +24,8 @@ import android.companion.datatransfer.continuity.RemoteTask;
 * Interface for communication with the task continuity service.
 * {@hide}
 */
interface ITaskContinuityManager {
oneway interface ITaskContinuityManager {

    List<RemoteTask> getRemoteTasks();
    void registerRemoteTaskListener(IRemoteTaskListener listener);
    void unregisterRemoteTaskListener(IRemoteTaskListener listener);
    void requestHandoff(
+10 −14
Original line number Diff line number Diff line
@@ -149,20 +149,6 @@ public class TaskContinuityManager {
            @HandoffRequestResultCode int resultCode);
    }

    /**
     * Returns a list of tasks currently running on the remote devices owned by the user.
     */
    @NonNull
    public List<RemoteTask> getRemoteTasks() {
        // TODO: joeantonetti - Optimize this call by caching the most recent state pushed to
        // mListenerHolder.
        try {
            return mService.getRemoteTasks();
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Registers a listener to be notified when the list of remote tasks changes.
     *
@@ -264,6 +250,9 @@ public class TaskContinuityManager {
        @GuardedBy("mListeners")
        private boolean mRegistered = false;

        @GuardedBy("mListeners")
        private final List<RemoteTask> mLastReceivedRemoteTasks = new ArrayList<>();

        public RemoteTaskListenerHolder(ITaskContinuityManager service) {}

        /**
@@ -283,6 +272,10 @@ public class TaskContinuityManager {
                if (!mRegistered) {
                    mService.registerRemoteTaskListener(this);
                    mRegistered = true;
                } else {
                    executor.execute(() ->
                        listener.onRemoteTasksChanged(mLastReceivedRemoteTasks)
                    );
                }

                mListeners.put(listener, executor);
@@ -311,6 +304,9 @@ public class TaskContinuityManager {
        @Override
        public void onRemoteTasksChanged(List<RemoteTask> remoteTasks) throws RemoteException {
            synchronized(mListeners) {
                mLastReceivedRemoteTasks.clear();
                mLastReceivedRemoteTasks.addAll(remoteTasks);

                for (Map.Entry<RemoteTaskListener, Executor> entry : mListeners.entrySet()) {
                    RemoteTaskListener listener = entry.getKey();
                    Executor executor = entry.getValue();
+0 −5
Original line number Diff line number Diff line
@@ -85,11 +85,6 @@ public final class TaskContinuityManagerService
    }

    private final class TaskContinuityManagerServiceImpl extends ITaskContinuityManager.Stub {
        @Override
        public List<RemoteTask> getRemoteTasks() {
            return mRemoteTaskStore.getMostRecentTasks();
        }

        @Override
        public void registerRemoteTaskListener(@NonNull IRemoteTaskListener listener) {
            mRemoteTaskStore.addListener(listener);
+7 −0
Original line number Diff line number Diff line
@@ -127,6 +127,13 @@ public class RemoteTaskStore {

        synchronized (mRemoteTaskListeners) {
            mRemoteTaskListeners.register(listener);
            List<RemoteTask> remoteTasks = getMostRecentTasks();
            try {
                listener.onRemoteTasksChanged(remoteTasks);
            } catch (RemoteException e) {
                Slog.e(TAG, "Failed to notify new listener of initial task state: "
                    + e.getMessage());
            }
        }
    }

Loading