Merge "Add a CTS for TvInputManager.acquireTvInputHardware" into rvc-dev
diff --git a/tests/tests/tv/src/android/media/tv/cts/TvInputManagerTest.java b/tests/tests/tv/src/android/media/tv/cts/TvInputManagerTest.java
index e1c165b..6649ca6 100644
--- a/tests/tests/tv/src/android/media/tv/cts/TvInputManagerTest.java
+++ b/tests/tests/tv/src/android/media/tv/cts/TvInputManagerTest.java
@@ -19,17 +19,25 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.media.AudioManager;
import android.media.tv.TvContentRating;
+import android.media.tv.TvInputHardwareInfo;
import android.media.tv.TvInputInfo;
import android.media.tv.TvInputManager;
+import android.media.tv.TvInputManager.Hardware;
+import android.media.tv.TvInputManager.HardwareCallback;
import android.media.tv.TvInputService;
+import android.media.tv.TvStreamConfig;
import android.os.Handler;
import android.test.ActivityInstrumentationTestCase2;
import com.android.compatibility.common.util.PollingCheck;
+import androidx.test.InstrumentationRegistry;
+
import java.io.IOException;
import java.util.ArrayList;
+import java.util.concurrent.Executor;
import java.util.List;
import org.xmlpull.v1.XmlPullParserException;
@@ -53,6 +61,7 @@
private String mStubId;
private TvInputManager mManager;
private LoggingCallback mCallback = new LoggingCallback();
+ private TvInputInfo mStubTvInputInfo;
private static TvInputInfo getInfoForClassName(List<TvInputInfo> list, String name) {
for (TvInputInfo info : list) {
@@ -75,6 +84,8 @@
mManager = (TvInputManager) getActivity().getSystemService(Context.TV_INPUT_SERVICE);
mStubId = getInfoForClassName(
mManager.getTvInputList(), StubTvInputService2.class.getName()).getId();
+ mStubTvInputInfo = getInfoForClassName(
+ mManager.getTvInputList(), StubTvInputService2.class.getName());
}
public void testGetInputState() throws Exception {
@@ -245,6 +256,56 @@
getInstrumentation().waitForIdleSync();
}
+ public void testAcquireTvInputHardware() {
+ InstrumentationRegistry.getInstrumentation().getUiAutomation()
+ .adoptShellPermissionIdentity("android.permission.TV_INPUT_HARDWARE",
+ "android.permission.TUNER_RESOURCE_ACCESS");
+ if (mManager == null) {
+ return;
+ }
+ // Update hardware device list
+ int deviceId = 0;
+ boolean hardwareDeviceAdded = false;
+ List<TvInputHardwareInfo> hardwareList = mManager.getHardwareList();
+ if (hardwareList == null || hardwareList.isEmpty()) {
+ // Use the test api to add an HDMI hardware device
+ mManager.addHardwareDevice(deviceId);
+ hardwareDeviceAdded = true;
+ } else {
+ deviceId = hardwareList.get(0).getDeviceId();
+ }
+
+ // Acquire Hardware with a record client
+ HardwareCallback callback = new HardwareCallback() {
+ @Override
+ public void onReleased() {}
+
+ @Override
+ public void onStreamConfigChanged(TvStreamConfig[] configs) {}
+ };
+ CallbackExecutor executor = new CallbackExecutor();
+ Hardware hardware = mManager.acquireTvInputHardware(
+ deviceId, mStubTvInputInfo, null /*tvInputSessionId*/,
+ TvInputService.PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK,
+ executor, callback);
+ assertNotNull(hardware);
+
+ // Acquire the same device with a LIVE client
+ Hardware hardwareAcquired = mManager.acquireTvInputHardware(
+ deviceId, mStubTvInputInfo, null /*tvInputSessionId*/,
+ TvInputService.PRIORITY_HINT_USE_CASE_TYPE_LIVE,
+ executor, callback);
+
+ assertNotNull(hardwareAcquired);
+
+ // Clean up
+ if (hardwareDeviceAdded) {
+ mManager.removeHardwareDevice(deviceId);
+ }
+ InstrumentationRegistry.getInstrumentation().getUiAutomation()
+ .dropShellPermissionIdentity();
+ }
+
private static class LoggingCallback extends TvInputManager.TvInputCallback {
private final List<String> mAddedInputs = new ArrayList<>();
private final List<String> mRemovedInputs = new ArrayList<>();
@@ -292,4 +353,11 @@
return null;
}
}
+
+ public class CallbackExecutor implements Executor {
+ @Override
+ public void execute(Runnable r) {
+ r.run();
+ }
+ }
}