Update blocked number provider to return reason for blocking.
Updating blocked number provider to return a reason for blocking the call
in addition to a boolean indicating the call was blocked or not.
Test: Manual, updated unit tests
Bug: 74524006
Change-Id: I9694f8a3dc02befcf5184591f845b9fd24fa6b82
diff --git a/src/com/android/providers/blockednumber/BlockedNumberProvider.java b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
index 44a5f84..69291ff 100644
--- a/src/com/android/providers/blockednumber/BlockedNumberProvider.java
+++ b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
@@ -308,8 +308,11 @@
switch (method) {
case BlockedNumberContract.METHOD_IS_BLOCKED:
enforceReadPermissionAndPrimaryUser();
-
- res.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED, isBlocked(arg));
+ boolean isBlocked = isBlocked(arg);
+ res.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED, isBlocked);
+ res.putInt(BlockedNumberContract.RES_BLOCK_STATUS,
+ isBlocked ? BlockedNumberContract.STATUS_BLOCKED_IN_LIST
+ : BlockedNumberContract.STATUS_NOT_BLOCKED);
break;
case BlockedNumberContract.METHOD_CAN_CURRENT_USER_BLOCK_NUMBERS:
// No permission checks: any app should be able to access this API.
@@ -341,8 +344,10 @@
break;
case SystemContract.METHOD_SHOULD_SYSTEM_BLOCK_NUMBER:
enforceSystemReadPermissionAndPrimaryUser();
+ int blockReason = shouldSystemBlockNumber(arg, extras);
res.putBoolean(BlockedNumberContract.RES_NUMBER_IS_BLOCKED,
- shouldSystemBlockNumber(arg, extras));
+ blockReason != BlockedNumberContract.STATUS_NOT_BLOCKED);
+ res.putInt(BlockedNumberContract.RES_BLOCK_STATUS, blockReason);
break;
case SystemContract.METHOD_SHOULD_SHOW_EMERGENCY_CALL_NOTIFICATION:
enforceSystemReadPermissionAndPrimaryUser();
@@ -474,42 +479,54 @@
blockSuppressionExpiryTimeMillis);
}
- private boolean shouldSystemBlockNumber(String phoneNumber, Bundle extras) {
+ private int shouldSystemBlockNumber(String phoneNumber, Bundle extras) {
if (getBlockSuppressionStatus().isSuppressed) {
- return false;
+ return BlockedNumberContract.STATUS_NOT_BLOCKED;
}
if (isEmergencyNumber(phoneNumber)) {
- return false;
+ return BlockedNumberContract.STATUS_NOT_BLOCKED;
}
boolean isBlocked = false;
+ int blockReason = BlockedNumberContract.STATUS_NOT_BLOCKED;
if (extras != null && !extras.isEmpty()) {
// check enhanced blocking setting
boolean contactExist = extras.getBoolean(BlockedNumberContract.EXTRA_CONTACT_EXIST);
int presentation = extras.getInt(BlockedNumberContract.EXTRA_CALL_PRESENTATION);
switch (presentation) {
case TelecomManager.PRESENTATION_ALLOWED:
- isBlocked = getEnhancedBlockSetting(
+ if (getEnhancedBlockSetting(
SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNREGISTERED)
- && !contactExist;
+ && !contactExist) {
+ blockReason = BlockedNumberContract.STATUS_BLOCKED_NOT_IN_CONTACTS;
+ }
break;
case TelecomManager.PRESENTATION_RESTRICTED:
- isBlocked = getEnhancedBlockSetting(
- SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE);
+ if (getEnhancedBlockSetting(
+ SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE)) {
+ blockReason = BlockedNumberContract.STATUS_BLOCKED_RESTRICTED;
+ }
break;
case TelecomManager.PRESENTATION_PAYPHONE:
- isBlocked = getEnhancedBlockSetting(
- SystemContract.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE);
+ if (getEnhancedBlockSetting(
+ SystemContract.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE)) {
+ blockReason = BlockedNumberContract.STATUS_BLOCKED_PAYPHONE;
+ }
break;
case TelecomManager.PRESENTATION_UNKNOWN:
- isBlocked = getEnhancedBlockSetting(
- SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNKNOWN);
+ if (getEnhancedBlockSetting(
+ SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNKNOWN)) {
+ blockReason = BlockedNumberContract.STATUS_BLOCKED_UNKNOWN_NUMBER;
+ }
break;
default:
break;
}
}
- return isBlocked || isBlocked(phoneNumber);
+ if (blockReason == BlockedNumberContract.STATUS_NOT_BLOCKED && isBlocked(phoneNumber)) {
+ blockReason = BlockedNumberContract.STATUS_BLOCKED_IN_LIST;
+ }
+ return blockReason;
}
private boolean shouldShowEmergencyCallNotification() {
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
index 89cca78..93e9cee 100644
--- a/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberContractTest.java
@@ -16,6 +16,7 @@
package com.android.providers.blockednumber;
+import static android.provider.BlockedNumberContract.STATUS_NOT_BLOCKED;
import static android.provider.BlockedNumberContract.SystemContract
.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE;
@@ -97,8 +98,9 @@
@SmallTest
@Test
public void testShouldSystemBlockNumberException() {
- assertFalse(BlockedNumberContract.SystemContract.shouldSystemBlockNumber(mMockContext,
- TEST_NUMBER, null));
+ assertEquals(STATUS_NOT_BLOCKED,
+ BlockedNumberContract.SystemContract.shouldSystemBlockNumber(mMockContext,
+ TEST_NUMBER, null));
}
/**
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
index 91d2430..828028f 100644
--- a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
@@ -611,19 +611,24 @@
insert(cv(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, emergencyNumber));
assertIsBlocked(true, emergencyNumber);
- assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber, null));
+ assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+ SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber, null));
setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNREGISTERED, true);
- assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+ assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+ SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_ALLOWED, false)));
setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_PRIVATE, true);
- assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+ assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+ SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_RESTRICTED, false)));
setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_PAYPHONE, true);
- assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+ assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+ SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_PAYPHONE, false)));
setEnhancedBlockSetting(SystemContract.ENHANCED_SETTING_KEY_BLOCK_UNKNOWN, true);
- assertFalse(SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
+ assertEquals(BlockedNumberContract.STATUS_NOT_BLOCKED,
+ SystemContract.shouldSystemBlockNumber(mMockContext, emergencyNumber,
createBundleForEnhancedBlocking(TelecomManager.PRESENTATION_UNKNOWN, false)));
}
@@ -707,8 +712,9 @@
}
private void assertShouldSystemBlock(boolean expected, String phoneNumber, Bundle extras) {
- assertEquals(expected, SystemContract.shouldSystemBlockNumber(mMockContext, phoneNumber,
- extras));
+ assertEquals(expected,
+ SystemContract.shouldSystemBlockNumber(mMockContext, phoneNumber, extras)
+ != BlockedNumberContract.STATUS_NOT_BLOCKED);
}
private void setEnhancedBlockSetting(String key, boolean value) {