summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Amy Zhang <amyjojo@google.com> 2020-03-05 18:48:00 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-03-05 18:48:00 +0000
commit2c2b5a7a0cc1d592869a92ed1aefa08b32985c62 (patch)
treea6001141b867fda479d5373e7ba709644a551836
parentb8138a2835ef7efed4a8f9ac16ce4816d5e46a05 (diff)
parent7da63b82d67c2e5fc3d823dbd734ab671746d5c3 (diff)
Merge "Add an Executor to the new acquireTvInputHardware API" into rvc-dev
-rwxr-xr-xapi/system-current.txt2
-rw-r--r--media/java/android/media/tv/TvInputManager.java42
2 files changed, 32 insertions, 12 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 9f2953cc9a1e..1098e3f863fe 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4730,7 +4730,7 @@ package android.media.tv {
public final class TvInputManager {
method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, @NonNull android.media.tv.TvInputInfo, @NonNull android.media.tv.TvInputManager.HardwareCallback);
- method @Nullable @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, @NonNull android.media.tv.TvInputInfo, @NonNull android.media.tv.TvInputManager.HardwareCallback, @Nullable String, int);
+ method @Nullable @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, @NonNull android.media.tv.TvInputInfo, @Nullable String, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.TvInputManager.HardwareCallback);
method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void addBlockedRating(@NonNull android.media.tv.TvContentRating);
method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public boolean captureFrame(String, android.view.Surface, android.media.tv.TvStreamConfig);
method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public java.util.List<android.media.tv.TvStreamConfig> getAvailableTvStreamConfigList(String);
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index 6bf9e19ae079..f058a02ceb1e 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -16,6 +16,7 @@
package android.media.tv;
+import android.annotation.CallbackExecutor;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -27,6 +28,7 @@ import android.content.Intent;
import android.graphics.Rect;
import android.media.PlaybackParams;
import android.net.Uri;
+import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -56,6 +58,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.Executor;
/**
* Central system API to the overall TV input framework (TIF) architecture, which arbitrates
@@ -1743,8 +1746,8 @@ public final class TvInputManager {
* <p>Otherwise default priority will be applied.
*
* @param deviceId The device ID to acquire Hardware for.
- * @param callback A callback to receive updates on Hardware.
* @param info The TV input which will use the acquired Hardware.
+ * @param callback A callback to receive updates on Hardware.
* @return Hardware on success, {@code null} otherwise.
*
* @hide
@@ -1755,8 +1758,12 @@ public final class TvInputManager {
@NonNull final HardwareCallback callback) {
Preconditions.checkNotNull(info);
Preconditions.checkNotNull(callback);
- return acquireTvInputHardwareInternal(deviceId, info, callback, null,
- TvInputService.PRIORITY_HINT_USE_CASE_TYPE_LIVE);
+ return acquireTvInputHardwareInternal(deviceId, info, null,
+ TvInputService.PRIORITY_HINT_USE_CASE_TYPE_LIVE, new Executor() {
+ public void execute(Runnable r) {
+ r.run();
+ }
+ }, callback);
}
/**
@@ -1767,12 +1774,13 @@ public final class TvInputManager {
* request.
*
* @param deviceId The device ID to acquire Hardware for.
- * @param callback A callback to receive updates on Hardware.
* @param info The TV input which will use the acquired Hardware.
* @param tvInputSessionId a String returned to TIS when the session was created.
* {@see TvInputService#onCreateSession(String, String)}. If null, the client will be
* treated as a background app.
* @param priorityHint The use case of the client. {@see TvInputService#PriorityHintUseCaseType}
+ * @param executor the executor on which the listener would be invoked.
+ * @param callback A callback to receive updates on Hardware.
* @return Hardware on success, {@code null} otherwise. When the TRM decides to not grant
* resource, null is returned and the {@link IllegalStateException} is thrown with
* "No enough resources".
@@ -1783,28 +1791,40 @@ public final class TvInputManager {
@Nullable
@RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE)
public Hardware acquireTvInputHardware(int deviceId, @NonNull TvInputInfo info,
- @NonNull final HardwareCallback callback,
@Nullable String tvInputSessionId,
- @TvInputService.PriorityHintUseCaseType int priorityHint) {
+ @TvInputService.PriorityHintUseCaseType int priorityHint,
+ @NonNull @CallbackExecutor Executor executor,
+ @NonNull final HardwareCallback callback) {
Preconditions.checkNotNull(info);
Preconditions.checkNotNull(callback);
- return acquireTvInputHardwareInternal(deviceId, info, callback,
- tvInputSessionId, priorityHint);
+ return acquireTvInputHardwareInternal(deviceId, info, tvInputSessionId, priorityHint,
+ executor, callback);
}
private Hardware acquireTvInputHardwareInternal(int deviceId, TvInputInfo info,
- final HardwareCallback callback, String tvInputSessionId, int priorityHint) {
+ String tvInputSessionId, int priorityHint,
+ Executor executor, final HardwareCallback callback) {
try {
return new Hardware(
mService.acquireTvInputHardware(deviceId, new ITvInputHardwareCallback.Stub() {
@Override
public void onReleased() {
- callback.onReleased();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onReleased());
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
@Override
public void onStreamConfigChanged(TvStreamConfig[] configs) {
- callback.onStreamConfigChanged(configs);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ executor.execute(() -> callback.onStreamConfigChanged(configs));
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
}, info, mUserId, tvInputSessionId, priorityHint));
} catch (RemoteException e) {