summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Amy Zhang <amyjojo@google.com> 2020-01-22 06:19:40 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-01-22 06:19:40 +0000
commite68e6deb3e7e59994b0306064dd49c93af81d542 (patch)
tree700c49b63631eacc197b45da12ffc76362c4e6f9
parent47ca469930ab2c8ac2c7b87cb98951995df676c8 (diff)
parented55b9cf304211984d00a7e9de486449f2e85e3d (diff)
Merge "add new acquireTvInputHardware API to allow the clients to pass their priority hints in"
-rwxr-xr-xapi/system-current.txt3
-rw-r--r--media/java/android/media/tv/ITvInputManager.aidl2
-rw-r--r--media/java/android/media/tv/TvInputManager.java57
-rwxr-xr-xservices/core/java/com/android/server/tv/TvInputHardwareManager.java6
-rwxr-xr-xservices/core/java/com/android/server/tv/TvInputManagerService.java8
5 files changed, 65 insertions, 11 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index 5fa71373a31f..aa35a0cd7e3a 100755
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4599,7 +4599,8 @@ package android.media.tv {
}
public final class TvInputManager {
- method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, android.media.tv.TvInputInfo, android.media.tv.TvInputManager.HardwareCallback);
+ 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 @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/ITvInputManager.aidl b/media/java/android/media/tv/ITvInputManager.aidl
index b5e9d1b2939f..c199c6f8b761 100644
--- a/media/java/android/media/tv/ITvInputManager.aidl
+++ b/media/java/android/media/tv/ITvInputManager.aidl
@@ -95,7 +95,7 @@ interface ITvInputManager {
// For TV input hardware binding
List<TvInputHardwareInfo> getHardwareList();
ITvInputHardware acquireTvInputHardware(int deviceId, in ITvInputHardwareCallback callback,
- in TvInputInfo info, int userId);
+ in TvInputInfo info, int userId, String tvInputSessionId, int priorityHint);
void releaseTvInputHardware(int deviceId, in ITvInputHardware hardware, int userId);
// For TV input capturing
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index fc5d67d50ee5..9cdfa2aa0807 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -1735,8 +1735,14 @@ public final class TvInputManager {
/**
* Acquires {@link Hardware} object for the given device ID.
*
- * <p>A subsequent call to this method on the same {@code deviceId} will release the currently
- * acquired Hardware.
+ * <p>A subsequent call to this method on the same {@code deviceId} could release the currently
+ * acquired Hardware if TunerResourceManager(TRM) detects higher priority from the current
+ * request.
+ *
+ * <p>If the client would like to provide information for the TRM to compare, use
+ * {@link #acquireTvInputHardware(int, TvInputInfo, HardwareCallback, String, int)} instead.
+ *
+ * <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.
@@ -1747,8 +1753,49 @@ public final class TvInputManager {
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE)
- public Hardware acquireTvInputHardware(int deviceId, TvInputInfo info,
- final HardwareCallback callback) {
+ public Hardware acquireTvInputHardware(int deviceId, @NonNull TvInputInfo info,
+ @NonNull final HardwareCallback callback) {
+ Preconditions.checkNotNull(info);
+ Preconditions.checkNotNull(callback);
+ return acquireTvInputHardwareInternal(deviceId, info, callback, null,
+ TvInputService.PRIORITY_HINT_USE_CASE_TYPE_LIVE);
+ }
+
+ /**
+ * Acquires {@link Hardware} object for the given device ID.
+ *
+ * <p>A subsequent call to this method on the same {@code deviceId} could release the currently
+ * acquired Hardware if TunerResourceManager(TRM) detects higher priority from the current
+ * 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}
+ * @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".
+ *
+ * @hide
+ */
+ @SystemApi
+ @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) {
+ Preconditions.checkNotNull(info);
+ Preconditions.checkNotNull(callback);
+ return acquireTvInputHardwareInternal(deviceId, info, callback,
+ tvInputSessionId, priorityHint);
+ }
+
+ private Hardware acquireTvInputHardwareInternal(int deviceId, TvInputInfo info,
+ final HardwareCallback callback, String tvInputSessionId, int priorityHint) {
try {
return new Hardware(
mService.acquireTvInputHardware(deviceId, new ITvInputHardwareCallback.Stub() {
@@ -1761,7 +1808,7 @@ public final class TvInputManager {
public void onStreamConfigChanged(TvStreamConfig[] configs) {
callback.onStreamConfigChanged(configs);
}
- }, info, mUserId));
+ }, info, mUserId, tvInputSessionId, priorityHint));
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
index 6ea274d8a814..8f71943129fa 100755
--- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java
+++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
@@ -44,6 +44,7 @@ import android.media.tv.ITvInputHardware;
import android.media.tv.ITvInputHardwareCallback;
import android.media.tv.TvInputHardwareInfo;
import android.media.tv.TvInputInfo;
+import android.media.tv.TvInputService.PriorityHintUseCaseType;
import android.media.tv.TvStreamConfig;
import android.os.Handler;
import android.os.IBinder;
@@ -363,7 +364,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
* release is notified via ITvInputHardwareCallback.onReleased().
*/
public ITvInputHardware acquireHardware(int deviceId, ITvInputHardwareCallback callback,
- TvInputInfo info, int callingUid, int resolvedUserId) {
+ TvInputInfo info, int callingUid, int resolvedUserId,
+ String tvInputSessionId, @PriorityHintUseCaseType int priorityHint) {
if (callback == null) {
throw new NullPointerException();
}
@@ -373,6 +375,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
Slog.e(TAG, "Invalid deviceId : " + deviceId);
return null;
}
+ // TODO: check with TRM to compare the client's priority with the current holder's
+ // priority. If lower, do nothing.
if (checkUidChangedLocked(connection, callingUid, resolvedUserId)) {
TvInputHardwareImpl hardware =
new TvInputHardwareImpl(connection.getHardwareInfoLocked());
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index eb7c5caa62aa..e8704ab789f2 100755
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -1736,8 +1736,9 @@ public final class TvInputManagerService extends SystemService {
@Override
public ITvInputHardware acquireTvInputHardware(int deviceId,
- ITvInputHardwareCallback callback, TvInputInfo info, int userId)
- throws RemoteException {
+ ITvInputHardwareCallback callback, TvInputInfo info, int userId,
+ String tvInputSessionId,
+ @TvInputService.PriorityHintUseCaseType int priorityHint) throws RemoteException {
if (mContext.checkCallingPermission(android.Manifest.permission.TV_INPUT_HARDWARE)
!= PackageManager.PERMISSION_GRANTED) {
return null;
@@ -1749,7 +1750,8 @@ public final class TvInputManagerService extends SystemService {
userId, "acquireTvInputHardware");
try {
return mTvInputHardwareManager.acquireHardware(
- deviceId, callback, info, callingUid, resolvedUserId);
+ deviceId, callback, info, callingUid, resolvedUserId,
+ tvInputSessionId, priorityHint);
} finally {
Binder.restoreCallingIdentity(identity);
}