diff --git a/src/com/android/settings/emergency/EmergencyGesturePreferenceController.java b/src/com/android/settings/emergency/EmergencyGesturePreferenceController.java
index a966ab3..b6135ab 100644
--- a/src/com/android/settings/emergency/EmergencyGesturePreferenceController.java
+++ b/src/com/android/settings/emergency/EmergencyGesturePreferenceController.java
@@ -17,7 +17,6 @@
 package com.android.settings.emergency;
 
 import android.content.Context;
-import android.provider.Settings;
 import android.widget.Switch;
 
 import androidx.annotation.VisibleForTesting;
@@ -26,6 +25,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.emergencynumber.EmergencyNumberUtils;
 import com.android.settingslib.widget.MainSwitchPreference;
 import com.android.settingslib.widget.OnMainSwitchChangeListener;
 
@@ -36,16 +36,13 @@
         OnMainSwitchChangeListener {
 
     @VisibleForTesting
-    static final int ON = 1;
-    @VisibleForTesting
-    static final int OFF = 0;
-
-    private static final String SECURE_KEY = Settings.Secure.EMERGENCY_GESTURE_ENABLED;
+    EmergencyNumberUtils mEmergencyNumberUtils;
 
     private MainSwitchPreference mSwitchBar;
 
     public EmergencyGesturePreferenceController(Context context, String key) {
         super(context, key);
+        mEmergencyNumberUtils = new EmergencyNumberUtils(context);
     }
 
     @Override
@@ -71,11 +68,11 @@
 
     @VisibleForTesting
     public boolean isChecked() {
-        return Settings.Secure.getInt(mContext.getContentResolver(), SECURE_KEY, ON) == ON;
+        return mEmergencyNumberUtils.getEmergencyGestureEnabled();
     }
 
     @Override
     public void onSwitchChanged(Switch switchView, boolean isChecked) {
-        Settings.Secure.putInt(mContext.getContentResolver(), SECURE_KEY, isChecked ? ON : OFF);
+        mEmergencyNumberUtils.setEmergencyGestureEnabled(isChecked);
     }
 }
diff --git a/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java b/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java
index d5896d8..f9fb647 100644
--- a/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java
+++ b/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java
@@ -17,12 +17,12 @@
 package com.android.settings.emergency;
 
 import android.content.Context;
-import android.provider.Settings;
 
 import androidx.annotation.VisibleForTesting;
 
 import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
+import com.android.settingslib.emergencynumber.EmergencyNumberUtils;
 
 /**
  * Preference controller for emergency sos gesture setting
@@ -30,14 +30,11 @@
 public class EmergencyGestureSoundPreferenceController extends TogglePreferenceController {
 
     @VisibleForTesting
-    static final int ON = 1;
-    @VisibleForTesting
-    static final int OFF = 0;
-
-    private static final String SECURE_KEY = Settings.Secure.EMERGENCY_GESTURE_SOUND_ENABLED;
+    EmergencyNumberUtils mEmergencyNumberUtils;
 
     public EmergencyGestureSoundPreferenceController(Context context, String key) {
         super(context, key);
+        mEmergencyNumberUtils = new EmergencyNumberUtils(context);
     }
 
     private static boolean isGestureAvailable(Context context) {
@@ -57,12 +54,12 @@
 
     @Override
     public boolean isChecked() {
-        return Settings.Secure.getInt(mContext.getContentResolver(), SECURE_KEY, ON) == ON;
+        return mEmergencyNumberUtils.getEmergencyGestureSoundEnabled();
     }
 
     @Override
     public boolean setChecked(boolean isChecked) {
-        return Settings.Secure.putInt(mContext.getContentResolver(), SECURE_KEY,
-                isChecked ? ON : OFF);
+        mEmergencyNumberUtils.setEmergencySoundEnabled(isChecked);
+        return true;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/emergency/EmergencyGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/emergency/EmergencyGesturePreferenceControllerTest.java
index 542301c..bf30ebb 100644
--- a/tests/robotests/src/com/android/settings/emergency/EmergencyGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/emergency/EmergencyGesturePreferenceControllerTest.java
@@ -18,24 +18,25 @@
 
 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
 import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
-import static com.android.settings.emergency.EmergencyGesturePreferenceController.OFF;
-import static com.android.settings.emergency.EmergencyGesturePreferenceController.ON;
 
 import static com.google.common.truth.Truth.assertThat;
 
-import android.content.ContentResolver;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
-import android.provider.Settings;
 
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.R;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settingslib.emergencynumber.EmergencyNumberUtils;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.Config;
 
@@ -43,16 +44,18 @@
 @Config(shadows = SettingsShadowResources.class)
 public class EmergencyGesturePreferenceControllerTest {
 
+    @Mock
+    private EmergencyNumberUtils mEmergencyNumberUtils;
     private Context mContext;
-    private ContentResolver mContentResolver;
     private EmergencyGesturePreferenceController mController;
     private static final String PREF_KEY = "gesture_emergency_button";
 
     @Before
     public void setUp() {
+        MockitoAnnotations.initMocks(this);
         mContext = ApplicationProvider.getApplicationContext();
-        mContentResolver = mContext.getContentResolver();
         mController = new EmergencyGesturePreferenceController(mContext, PREF_KEY);
+        mController.mEmergencyNumberUtils = mEmergencyNumberUtils;
     }
 
     @After
@@ -81,8 +84,7 @@
     @Test
     public void isChecked_configIsNotSet_shouldReturnTrue() {
         // Set the setting to be enabled.
-        Settings.Secure.putInt(mContentResolver, Settings.Secure.EMERGENCY_GESTURE_ENABLED, ON);
-        mController = new EmergencyGesturePreferenceController(mContext, PREF_KEY);
+        when(mEmergencyNumberUtils.getEmergencyGestureEnabled()).thenReturn(true);
 
         assertThat(mController.isChecked()).isTrue();
     }
@@ -90,8 +92,7 @@
     @Test
     public void isChecked_configIsSet_shouldReturnFalse() {
         // Set the setting to be disabled.
-        Settings.Secure.putInt(mContentResolver, Settings.Secure.EMERGENCY_GESTURE_ENABLED, OFF);
-        mController = new EmergencyGesturePreferenceController(mContext, PREF_KEY);
+        when(mEmergencyNumberUtils.getEmergencyGestureEnabled()).thenReturn(false);
 
         assertThat(mController.isChecked()).isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceControllerTest.java
index 6f3884e..f8f2ed1 100644
--- a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceControllerTest.java
@@ -16,40 +16,42 @@
 
 package com.android.settings.emergency;
 
-import static com.android.settings.emergency.EmergencyGestureSoundPreferenceController.OFF;
-import static com.android.settings.emergency.EmergencyGestureSoundPreferenceController.ON;
 
 import static com.google.common.truth.Truth.assertThat;
 
-import android.content.ContentResolver;
+import static org.mockito.Mockito.when;
+
 import android.content.Context;
-import android.provider.Settings;
 
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.R;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settingslib.emergencynumber.EmergencyNumberUtils;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = SettingsShadowResources.class)
 public class EmergencyGestureSoundPreferenceControllerTest {
-
+    @Mock
+    private EmergencyNumberUtils mEmergencyNumberUtils;
     private Context mContext;
-    private ContentResolver mContentResolver;
     private EmergencyGestureSoundPreferenceController mController;
 
     @Before
     public void setUp() {
+        MockitoAnnotations.initMocks(this);
         mContext = ApplicationProvider.getApplicationContext();
-        mContentResolver = mContext.getContentResolver();
         mController = new EmergencyGestureSoundPreferenceController(mContext, "test_key");
+        mController.mEmergencyNumberUtils = mEmergencyNumberUtils;
     }
 
     @After
@@ -78,8 +80,7 @@
     @Test
     public void isChecked_configIsSet_shouldReturnTrue() {
         // Set the setting to be enabled.
-        Settings.Secure.putInt(mContentResolver, Settings.Secure.EMERGENCY_GESTURE_SOUND_ENABLED,
-                ON);
+        when(mEmergencyNumberUtils.getEmergencyGestureSoundEnabled()).thenReturn(true);
 
         assertThat(mController.isChecked()).isTrue();
     }
@@ -87,8 +88,7 @@
     @Test
     public void isChecked_configIsSetToFalse_shouldReturnFalse() {
         // Set the setting to be disabled.
-        Settings.Secure.putInt(mContentResolver, Settings.Secure.EMERGENCY_GESTURE_SOUND_ENABLED,
-                OFF);
+        when(mEmergencyNumberUtils.getEmergencyGestureSoundEnabled()).thenReturn(false);
 
         assertThat(mController.isChecked()).isFalse();
     }
