Add support for TvInputManager.acquireTvInputHardware CTS
1. Add a test api in TvInputManager to add hardware device for testing
2. Add Shell permission for TV_INPUT_HARDWARE
3. Add TUNER_RESOURCE_ACCESS permission for TvInput Framework.
Test: atest android.media.tv.cts
Bug: 155114656
Change-Id: I227f13cbf14532d8732729412ae9c2518755ef02
diff --git a/api/test-current.txt b/api/test-current.txt
index 46049bd..fb656b4 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -1728,6 +1728,15 @@
}
+package android.media.tv {
+
+ public final class TvInputManager {
+ method public void addHardwareDevice(int);
+ method public void removeHardwareDevice(int);
+ }
+
+}
+
package android.metrics {
public class LogMaker {
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index bdb6bcc..8d73f8a 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -409,6 +409,8 @@
<permission name="android.permission.ACCESS_TV_DESCRAMBLER" />
<permission name="android.permission.ACCESS_TV_TUNER" />
<permission name="android.permission.TUNER_RESOURCE_ACCESS" />
+ <!-- Permissions required for CTS test - TVInputManagerTest -->
+ <permission name="android.permission.TV_INPUT_HARDWARE" />
</privapp-permissions>
<privapp-permissions package="com.android.statementservice">
diff --git a/media/java/android/media/tv/ITvInputManager.aidl b/media/java/android/media/tv/ITvInputManager.aidl
index 508a46f4..1fbb672 100644
--- a/media/java/android/media/tv/ITvInputManager.aidl
+++ b/media/java/android/media/tv/ITvInputManager.aidl
@@ -111,4 +111,8 @@
// For preview channels and programs
void sendTvInputNotifyIntent(in Intent intent, int userId);
void requestChannelBrowsable(in Uri channelUri, int userId);
+
+ // For CTS purpose only. Add/remove a TvInputHardware device
+ void addHardwareDevice(in int deviceId);
+ void removeHardwareDevice(in int deviceId);
}
diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java
index e701055..98a01a4 100644
--- a/media/java/android/media/tv/TvInputManager.java
+++ b/media/java/android/media/tv/TvInputManager.java
@@ -23,6 +23,7 @@
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
+import android.annotation.TestApi;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
@@ -1801,6 +1802,40 @@
executor, callback);
}
+ /**
+ * API to add a hardware device in the TvInputHardwareManager for CTS testing
+ * purpose.
+ *
+ * @param deviceId Id of the adding hardware device.
+ *
+ * @hide
+ */
+ @TestApi
+ public void addHardwareDevice(int deviceId) {
+ try {
+ mService.addHardwareDevice(deviceId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * API to remove a hardware device in the TvInputHardwareManager for CTS testing
+ * purpose.
+ *
+ * @param deviceId Id of the removing hardware device.
+ *
+ * @hide
+ */
+ @TestApi
+ public void removeHardwareDevice(int deviceId) {
+ try {
+ mService.removeHardwareDevice(deviceId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
private Hardware acquireTvInputHardwareInternal(int deviceId, TvInputInfo info,
String tvInputSessionId, int priorityHint,
Executor executor, final HardwareCallback callback) {
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 83d7218..4a4a835 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -300,6 +300,9 @@
<!-- Permissions needed to test shared libraries -->
<uses-permission android:name="android.permission.ACCESS_SHARED_LIBRARIES" />
+ <!-- Permissions required for CTS test - TVInputManagerTest -->
+ <uses-permission android:name="android.permission.TV_INPUT_HARDWARE" />
+
<application android:label="@string/app_label"
android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:defaultToDeviceProtectedStorage="true"
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index e3b1152c..323ac7b 100755
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -16,6 +16,7 @@
package com.android.server.tv;
+import static android.media.AudioManager.DEVICE_NONE;
import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED;
import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED_STANDBY;
@@ -2047,6 +2048,36 @@
return clientPid;
}
+ /**
+ * Add a hardware device in the TvInputHardwareManager for CTS testing
+ * purpose.
+ *
+ * @param device id of the adding hardware device.
+ */
+ @Override
+ public void addHardwareDevice(int deviceId) {
+ TvInputHardwareInfo info = new TvInputHardwareInfo.Builder()
+ .deviceId(deviceId)
+ .type(TvInputHardwareInfo.TV_INPUT_TYPE_HDMI)
+ .audioType(DEVICE_NONE)
+ .audioAddress("0")
+ .hdmiPortId(0)
+ .build();
+ mTvInputHardwareManager.onDeviceAvailable(info, null);
+ return;
+ }
+
+ /**
+ * Remove a hardware device in the TvInputHardwareManager for CTS testing
+ * purpose.
+ *
+ * @param device id of the removing hardware device.
+ */
+ @Override
+ public void removeHardwareDevice(int deviceId) {
+ mTvInputHardwareManager.onDeviceUnavailable(deviceId);
+ }
+
private int getClientPidLocked(String sessionId)
throws IllegalStateException {
if (mSessionIdToSessionStateMap.get(sessionId) == null) {