diff --git a/java/com/android/dialer/precall/impl/PermissionCheckAction.java b/java/com/android/dialer/precall/impl/PermissionCheckAction.java
new file mode 100644
index 0000000..b57b37a
--- /dev/null
+++ b/java/com/android/dialer/precall/impl/PermissionCheckAction.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.dialer.precall.impl;
+
+import android.content.Context;
+import android.widget.Toast;
+import com.android.dialer.callintent.CallIntentBuilder;
+import com.android.dialer.precall.PreCallAction;
+import com.android.dialer.precall.PreCallCoordinator;
+import com.android.dialer.util.PermissionsUtil;
+
+/** Aborts call and show a toast if phone permissions are missing. */
+public class PermissionCheckAction implements PreCallAction {
+
+  @Override
+  public boolean requiresUi(Context context, CallIntentBuilder builder) {
+    return !PermissionsUtil.hasPhonePermissions(context);
+  }
+
+  @Override
+  public void runWithoutUi(Context context, CallIntentBuilder builder) {}
+
+  @Override
+  public void runWithUi(PreCallCoordinator coordinator) {
+    if (!requiresUi(coordinator.getActivity(), coordinator.getBuilder())) {
+      return;
+    }
+    Toast.makeText(
+            coordinator.getActivity(),
+            coordinator
+                .getActivity()
+                .getString(R.string.pre_call_permission_check_no_phone_permission),
+            Toast.LENGTH_LONG)
+        .show();
+    coordinator.abortCall();
+  }
+
+  @Override
+  public void onDiscard() {}
+}
diff --git a/java/com/android/dialer/precall/impl/PreCallImpl.java b/java/com/android/dialer/precall/impl/PreCallImpl.java
index b9c9d88..f75c8d9 100644
--- a/java/com/android/dialer/precall/impl/PreCallImpl.java
+++ b/java/com/android/dialer/precall/impl/PreCallImpl.java
@@ -38,7 +38,8 @@
 
   @Override
   public ImmutableList<PreCallAction> getActions() {
-    return ImmutableList.of(new CallingAccountSelector(), new AssistedDialAction());
+    return ImmutableList.of(
+        new PermissionCheckAction(), new CallingAccountSelector(), new AssistedDialAction());
   }
 
   @NonNull
diff --git a/java/com/android/dialer/precall/impl/res/values/strings.xml b/java/com/android/dialer/precall/impl/res/values/strings.xml
index 2560e49..0b59607 100644
--- a/java/com/android/dialer/precall/impl/res/values/strings.xml
+++ b/java/com/android/dialer/precall/impl/res/values/strings.xml
@@ -15,6 +15,9 @@
   ~ limitations under the License
   -->
 <resources>
+  <!-- Toast when the user tried to place a call but has revoked phone permission [CHAR_LIMIT=none]  -->
+  <string name="pre_call_permission_check_no_phone_permission">Cannot make call without phone permission</string>
+
   <!-- Title of the dialog to select which SIM to call with before making a call, if the device has
   multiple SIMs [CHAR LIMIT=40]-->
   <string name="pre_call_select_phone_account">Choose SIM for this call</string>
diff --git a/java/com/android/dialer/telecom/TelecomUtil.java b/java/com/android/dialer/telecom/TelecomUtil.java
index 6f424de..22f3727 100644
--- a/java/com/android/dialer/telecom/TelecomUtil.java
+++ b/java/com/android/dialer/telecom/TelecomUtil.java
@@ -157,6 +157,9 @@
     if (TextUtils.isEmpty(phoneAccountHandle.getId())) {
       return Optional.absent();
     }
+    if (!hasPermission(context, permission.READ_PHONE_STATE)) {
+      return Optional.absent();
+    }
     SubscriptionManager subscriptionManager = context.getSystemService(SubscriptionManager.class);
     List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList();
     if (subscriptionInfos == null) {
