diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6ac1ac9..7cc6155 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2902,6 +2902,12 @@
             android:grantUriPermissions="true"
             android:exported="false"/>
 
+        <provider
+            android:name=".emergency.EmergencyActionContentProvider"
+            android:authorities="com.android.settings.emergency"
+            android:permission="android.permission.CALL_PRIVILEGED"
+            android:exported="true"/>
+
         <activity
             android:name=".wifi.RequestToggleWiFiActivity"
             android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert"
diff --git a/src/com/android/settings/emergency/EmergencyActionContentProvider.java b/src/com/android/settings/emergency/EmergencyActionContentProvider.java
new file mode 100644
index 0000000..03f0faf
--- /dev/null
+++ b/src/com/android/settings/emergency/EmergencyActionContentProvider.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2021 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.settings.emergency;
+
+import static android.telecom.TelecomManager.EXTRA_CALL_SOURCE;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Bundle;
+import android.telecom.PhoneAccount;
+import android.telecom.TelecomManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settingslib.emergencynumber.EmergencyNumberUtils;
+
+/**
+ * ContentProvider to delegate emergency action work
+ */
+public class EmergencyActionContentProvider extends ContentProvider {
+    private static final String TAG = "EmergencyActionContentP";
+
+    private static final String ACTION_START_EMERGENCY_CALL =
+            "com.android.settings.emergency.MAKE_EMERGENCY_CALL";
+
+    @Override
+    public Bundle call(String authority, String method, String arg, Bundle extras) {
+        int uid = Binder.getCallingUid();
+        Log.d(TAG, "calling pid/uid" + Binder.getCallingPid() + "/" + uid);
+        if (!isEmergencyInfo(getContext())) {
+            throw new SecurityException("Uid is not allowed: " + uid);
+        }
+        if (!TextUtils.equals(method, ACTION_START_EMERGENCY_CALL)) {
+            throw new IllegalArgumentException("Unsupported operation");
+        }
+        placeEmergencyCall(getContext());
+        return new Bundle();
+    }
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        return null;
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        return 0;
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        return 0;
+    }
+
+    private static boolean isEmergencyInfo(Context context) {
+        final int callingUid = Binder.getCallingUid();
+        final String callingPackage = context.getPackageManager().getPackagesForUid(callingUid)[0];
+        return TextUtils.equals(callingPackage,
+                context.getString(R.string.config_aosp_emergency_package_name));
+    }
+
+    private static void placeEmergencyCall(Context context) {
+        if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+            Log.i(TAG, "Telephony is not supported, skipping.");
+            return;
+        }
+        Bundle extras = new Bundle();
+        extras.putBoolean(TelecomManager.EXTRA_IS_USER_INTENT_EMERGENCY_CALL, true);
+        extras.putInt(EXTRA_CALL_SOURCE, TelecomManager.CALL_SOURCE_EMERGENCY_SHORTCUT);
+        TelecomManager telecomManager = context.getSystemService(TelecomManager.class);
+        EmergencyNumberUtils emergencyNumberUtils = new EmergencyNumberUtils(context);
+        telecomManager.placeCall(
+                Uri.fromParts(PhoneAccount.SCHEME_TEL, emergencyNumberUtils.getPoliceNumber(),
+                        /* fragment= */ null), extras);
+    }
+}
diff --git a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
index 43ff215..ab2c473 100644
--- a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
+++ b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
@@ -49,11 +49,11 @@
         final String emergencyGestureSettingsPackageName = context.getResources().getString(
                 R.string.emergency_gesture_settings_package);
         if (!TextUtils.isEmpty(emergencyGestureSettingsPackageName)) {
-            mUseCustomIntent = true;
-            // Use custom intent if it's configured and system can resolve it.
             final Intent intent = new Intent(ACTION_EMERGENCY_GESTURE_SETTINGS)
                     .setPackage(emergencyGestureSettingsPackageName);
             if (canResolveIntent(intent)) {
+                // Use custom intent if it's configured and system can resolve it.
+                mUseCustomIntent = true;
                 mIntent = intent;
             }
         }
diff --git a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java
index 65fa187..8d38509 100644
--- a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java
@@ -105,7 +105,7 @@
     }
 
     @Test
-    public void getAvailabilityStatus_noSuitableIntent_shouldReturnUnsupported() {
+    public void getAvailabilityStatus_noSuitableIntent_shouldReturnAvailable() {
         SettingsShadowResources.overrideResource(
                 R.bool.config_show_emergency_gesture_settings,
                 Boolean.TRUE);
@@ -117,7 +117,8 @@
         EmergencyGestureEntrypointPreferenceController controller =
                 new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY);
 
-        assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+        assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+        assertThat(controller.mIntent).isNull();
     }
 
     private void prepareCustomIntent() {
