Verify that only package supporting DIAL intent can be set as default dialer

Bug: 20303674
Change-Id: Id2e0b95a3731d7675a88ae31778bc4308d9682ac
diff --git a/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java b/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
index 947ebc2..bef2de5 100644
--- a/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
@@ -16,8 +16,10 @@
 
 package android.telecom.cts;
 
+import android.content.ComponentName;
 import android.content.ContentValues;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.provider.VoicemailContract.Voicemails;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
@@ -152,4 +154,29 @@
         // No exception if the calling package is the default dialer.
         mTelecomManager.getAdnUriForPhoneAccount(mPhoneAccountHandle);
     }
+
+    public void testSetDefaultDialerNoDialIntent_notSupported() throws Exception {
+        final PackageManager pm = mContext.getPackageManager();
+        final ComponentName name = new ComponentName(mContext,
+                "android.telecom.cts.MockDialerActivity");
+        try {
+            pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+                    PackageManager.DONT_KILL_APP);
+
+            final String result =
+                    TestUtils.setDefaultDialer(getInstrumentation(), TestUtils.PACKAGE);
+            assertNotSame(result, TestUtils.PACKAGE);
+            assertTrue("Expected failure indicating that this was not an installed dialer app",
+                    result.contains("is not an installed Dialer app"));
+        } finally {
+            pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+                    PackageManager.DONT_KILL_APP);
+        }
+
+        // Now that the activity is present again in the package manager, this should succeed.
+        final String result = TestUtils.setDefaultDialer(getInstrumentation(), TestUtils.PACKAGE);
+        assertTrue("Expected success message indicating that " + TestUtils.PACKAGE + " was set as "
+                + "default dialer.", result.contains("set as default dialer"));
+        assertEquals(TestUtils.PACKAGE, TestUtils.getDefaultDialer(getInstrumentation()));
+    }
 }
diff --git a/tests/tests/telecom/src/android/telecom/cts/TestUtils.java b/tests/tests/telecom/src/android/telecom/cts/TestUtils.java
index 8cca04c..a37f9fd 100644
--- a/tests/tests/telecom/src/android/telecom/cts/TestUtils.java
+++ b/tests/tests/telecom/src/android/telecom/cts/TestUtils.java
@@ -54,9 +54,9 @@
         return pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
     }
 
-    public static void setDefaultDialer(Instrumentation instrumentation, String packageName)
+    public static String setDefaultDialer(Instrumentation instrumentation, String packageName)
             throws Exception {
-        executeShellCommand(instrumentation, COMMAND_SET_DEFAULT_DIALER + packageName);
+        return executeShellCommand(instrumentation, COMMAND_SET_DEFAULT_DIALER + packageName);
     }
 
     public static String getDefaultDialer(Instrumentation instrumentation) throws Exception {