diff options
| author | 2020-01-22 06:19:40 +0000 | |
|---|---|---|
| committer | 2020-01-22 06:19:40 +0000 | |
| commit | e68e6deb3e7e59994b0306064dd49c93af81d542 (patch) | |
| tree | 700c49b63631eacc197b45da12ffc76362c4e6f9 | |
| parent | 47ca469930ab2c8ac2c7b87cb98951995df676c8 (diff) | |
| parent | ed55b9cf304211984d00a7e9de486449f2e85e3d (diff) | |
Merge "add new acquireTvInputHardware API to allow the clients to pass their priority hints in"
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); } |