Loading core/java/android/companion/virtual/computercontrol/ComputerControlSession.java +21 −5 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.view.Display; import android.view.DisplayInfo; import android.view.Surface; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.ElementType; Loading Loading @@ -97,9 +98,11 @@ public final class ComputerControlSession implements AutoCloseable { @NonNull private final IComputerControlSession mSession; // TODO(b/439774796): Make this non-nullable. private final Object mLock = new Object(); @GuardedBy("mLock") @Nullable private final ImageReader mImageReader; private ImageReader mImageReader; /** @hide */ public ComputerControlSession(int displayId, @NonNull IVirtualDisplayCallback displayToken, Loading Loading @@ -157,8 +160,10 @@ public final class ComputerControlSession implements AutoCloseable { */ @Nullable public Image getScreenshot() { synchronized (mLock) { return mImageReader == null ? null : mImageReader.acquireLatestImage(); } } /** * Sends a tap event to the computer control session at the given location. Loading Loading @@ -261,6 +266,15 @@ public final class ComputerControlSession implements AutoCloseable { } } private void closeImageReader() { synchronized (mLock) { if (mImageReader != null) { mImageReader.close(); mImageReader = null; } } } /** Callback for computer control session events. */ public interface Callback { Loading Loading @@ -299,6 +313,7 @@ public final class ComputerControlSession implements AutoCloseable { private final Callback mCallback; private final Executor mExecutor; private ComputerControlSession mSession; public CallbackProxy(@NonNull Executor executor, @NonNull Callback callback) { mExecutor = executor; Loading @@ -315,9 +330,9 @@ public final class ComputerControlSession implements AutoCloseable { @Override public void onSessionCreated(int displayId, IVirtualDisplayCallback displayToken, IComputerControlSession session) { mSession = new ComputerControlSession(displayId, displayToken, session); Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mCallback.onSessionCreated( new ComputerControlSession(displayId, displayToken, session)))); mExecutor.execute(() -> mCallback.onSessionCreated(mSession))); } @Override Loading @@ -328,6 +343,7 @@ public final class ComputerControlSession implements AutoCloseable { @Override public void onSessionClosed() { mSession.closeImageReader(); Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mCallback.onSessionClosed())); } Loading Loading
core/java/android/companion/virtual/computercontrol/ComputerControlSession.java +21 −5 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.view.Display; import android.view.DisplayInfo; import android.view.Surface; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.ElementType; Loading Loading @@ -97,9 +98,11 @@ public final class ComputerControlSession implements AutoCloseable { @NonNull private final IComputerControlSession mSession; // TODO(b/439774796): Make this non-nullable. private final Object mLock = new Object(); @GuardedBy("mLock") @Nullable private final ImageReader mImageReader; private ImageReader mImageReader; /** @hide */ public ComputerControlSession(int displayId, @NonNull IVirtualDisplayCallback displayToken, Loading Loading @@ -157,8 +160,10 @@ public final class ComputerControlSession implements AutoCloseable { */ @Nullable public Image getScreenshot() { synchronized (mLock) { return mImageReader == null ? null : mImageReader.acquireLatestImage(); } } /** * Sends a tap event to the computer control session at the given location. Loading Loading @@ -261,6 +266,15 @@ public final class ComputerControlSession implements AutoCloseable { } } private void closeImageReader() { synchronized (mLock) { if (mImageReader != null) { mImageReader.close(); mImageReader = null; } } } /** Callback for computer control session events. */ public interface Callback { Loading Loading @@ -299,6 +313,7 @@ public final class ComputerControlSession implements AutoCloseable { private final Callback mCallback; private final Executor mExecutor; private ComputerControlSession mSession; public CallbackProxy(@NonNull Executor executor, @NonNull Callback callback) { mExecutor = executor; Loading @@ -315,9 +330,9 @@ public final class ComputerControlSession implements AutoCloseable { @Override public void onSessionCreated(int displayId, IVirtualDisplayCallback displayToken, IComputerControlSession session) { mSession = new ComputerControlSession(displayId, displayToken, session); Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mCallback.onSessionCreated( new ComputerControlSession(displayId, displayToken, session)))); mExecutor.execute(() -> mCallback.onSessionCreated(mSession))); } @Override Loading @@ -328,6 +343,7 @@ public final class ComputerControlSession implements AutoCloseable { @Override public void onSessionClosed() { mSession.closeImageReader(); Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mCallback.onSessionClosed())); } Loading