Add support to check form-factor before running test

Skip running the test if it's non-phone or cuttlefish

Bug: b/288114726
Test: atest ADPFHintSessionHostJUnit4Test
Change-Id: I632d50727a53a5772a748c2689c2d5f118bb334d
diff --git a/hostsidetests/adpf/app/hintsession/Android.bp b/hostsidetests/adpf/app/hintsession/Android.bp
index 53e10da..9ec45ca 100644
--- a/hostsidetests/adpf/app/hintsession/Android.bp
+++ b/hostsidetests/adpf/app/hintsession/Android.bp
@@ -52,6 +52,7 @@
         "androidx.test.rules",
         "collector-device-lib",
         "com.google.android.material_material",
+        "compatibility-device-util-axt",
     ],
     sdk_version: "current",
     jni_libs: ["libadpfhintsession_test_helper_jni"],
diff --git a/hostsidetests/adpf/app/hintsession/src/android/adpf/hintsession/app/ADPFHintSessionDeviceTest.java b/hostsidetests/adpf/app/hintsession/src/android/adpf/hintsession/app/ADPFHintSessionDeviceTest.java
index 51f5ac1..2f4759f 100644
--- a/hostsidetests/adpf/app/hintsession/src/android/adpf/hintsession/app/ADPFHintSessionDeviceTest.java
+++ b/hostsidetests/adpf/app/hintsession/src/android/adpf/hintsession/app/ADPFHintSessionDeviceTest.java
@@ -19,29 +19,55 @@
 import static android.adpf.common.ADPFHintSessionConstants.TEST_NAME_KEY;
 
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
 
 import android.app.Instrumentation;
 import android.content.Context;
 import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.device.collectors.util.SendToInstrumentation;
 import android.os.Bundle;
 
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.compatibility.common.util.MediaUtils;
+
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.IOException;
 import java.util.Map;
 
 @RunWith(AndroidJUnit4.class)
 public class ADPFHintSessionDeviceTest {
     private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        mContext = mInstrumentation.getContext();
+    }
+
+    protected void assumeMobileDeviceFormFactor() throws IOException {
+        final PackageManager pm = mContext.getPackageManager();
+        assumeFalse("Skipping test for auto",
+                pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE));
+        assumeFalse("Skipping test for TV",
+                pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK)); // TVs
+        assumeFalse("Skipping test for watch",
+                pm.hasSystemFeature(PackageManager.FEATURE_WATCH));
+        assumeFalse("Skipping test for embedded",
+                pm.hasSystemFeature(PackageManager.FEATURE_EMBEDDED));
+        assumeFalse("Skipping test for Cuttlefish",
+                MediaUtils.onCuttlefish());
+    }
 
     @Test
-    public void testAdpfHintSession() {
-        final Context context = mInstrumentation.getContext();
-        final Intent intent = new Intent(context, ADPFHintSessionDeviceActivity.class);
+    public void testAdpfHintSession() throws IOException {
+        assumeMobileDeviceFormFactor();
+        final Intent intent = new Intent(mContext, ADPFHintSessionDeviceActivity.class);
         // TODO: pass config to app
         intent.putExtra(TEST_NAME_KEY, "testAdpfHintSession");
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);