diff --git a/src/com/android/providers/blockednumber/BlockedNumberProvider.java b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
index eb3d992..1458c1c 100644
--- a/src/com/android/providers/blockednumber/BlockedNumberProvider.java
+++ b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
@@ -327,17 +327,17 @@
 
                 res.putInt(BlockedNumberContract.RES_NUM_ROWS_DELETED, unblock(arg));
                 break;
-            case BlockedNumberContract.METHOD_NOTIFY_EMERGENCY_CONTACT:
+            case SystemContract.METHOD_NOTIFY_EMERGENCY_CONTACT:
                 enforceSystemWritePermissionAndPrimaryUser();
 
                 notifyEmergencyContact();
                 break;
-            case BlockedNumberContract.METHOD_END_BLOCK_SUPPRESSION:
+            case SystemContract.METHOD_END_BLOCK_SUPPRESSION:
                 enforceSystemWritePermissionAndPrimaryUser();
 
                 endBlockSuppression();
                 break;
-            case BlockedNumberContract.METHOD_GET_BLOCK_SUPPRESSION_STATUS:
+            case SystemContract.METHOD_GET_BLOCK_SUPPRESSION_STATUS:
                 enforceSystemReadPermissionAndPrimaryUser();
 
                 SystemContract.BlockSuppressionStatus status = getBlockSuppressionStatus();
@@ -345,19 +345,19 @@
                 res.putLong(SystemContract.RES_BLOCKING_SUPPRESSED_UNTIL_TIMESTAMP,
                         status.untilTimestampMillis);
                 break;
-            case BlockedNumberContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER:
+            case SystemContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER:
                 enforceSystemReadPermissionAndPrimaryUser();
                 int blockReason = shouldSystemBlockNumber(arg, extras);
                 res.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED,
                         blockReason != BlockedNumberContract.STATUS_NOT_BLOCKED);
                 res.putInt(BlockedNumberContract.RES_BLOCK_STATUS, blockReason);
                 break;
-            case BlockedNumberContract.METHOD_SHOULD_SHOW_EMERGENCY_CALL_NOTIFICATION:
+            case SystemContract.METHOD_SHOULD_SHOW_EMERGENCY_CALL_NOTIFICATION:
                 enforceSystemReadPermissionAndPrimaryUser();
                 res.putBoolean(BlockedNumberContract.RES_SHOW_EMERGENCY_CALL_NOTIFICATION,
                         shouldShowEmergencyCallNotification());
                 break;
-            case BlockedNumberContract.METHOD_GET_ENHANCED_BLOCK_SETTING:
+            case SystemContract.METHOD_GET_ENHANCED_BLOCK_SETTING:
                 enforceSystemReadPermissionAndPrimaryUser();
                 if (extras != null) {
                     String key = extras.getString(BlockedNumberContract.EXTRA_ENHANCED_SETTING_KEY);
@@ -365,7 +365,7 @@
                     res.putBoolean(BlockedNumberContract.RES_ENHANCED_SETTING_IS_ENABLED, value);
                 }
                 break;
-            case BlockedNumberContract.METHOD_SET_ENHANCED_BLOCK_SETTING:
+            case SystemContract.METHOD_SET_ENHANCED_BLOCK_SETTING:
                 enforceSystemWritePermissionAndPrimaryUser();
                 if (extras != null) {
                     String key = extras.getString(BlockedNumberContract.EXTRA_ENHANCED_SETTING_KEY);
