summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2023-10-17 10:08:58 -0700
committerXin Li <delphij@google.com>2023-10-17 10:08:58 -0700
commit3776b811440268b28b531e4fd4d05acf547310f3 (patch)
treec82e4130d65f14b0c80ee71f9f3b7f6de24c1141
parent3991431451f9c1bf18f2479af206ea76ade58730 (diff)
parentb7c3e34481e65a0650a01064cc4b059cfe4c6978 (diff)
downloadBlockedNumberProvider-tmp_amf_315507370.tar.gz
Merge 10952656tmp_amf_315507370
Merged-In: I420776f026f2cb7bb5b1440846c281d9decabb6c Change-Id: I64279462740e7c0e6e2df99164bbaeb5bae85ea4
-rw-r--r--src/com/android/providers/blockednumber/BlockedNumberProvider.java7
-rw-r--r--tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java24
2 files changed, 30 insertions, 1 deletions
diff --git a/src/com/android/providers/blockednumber/BlockedNumberProvider.java b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
index 830847c..2e84d66 100644
--- a/src/com/android/providers/blockednumber/BlockedNumberProvider.java
+++ b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
@@ -40,6 +40,7 @@ import android.os.CancellationSignal;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.BlockedNumberContract;
import android.provider.BlockedNumberContract.SystemContract;
import android.telecom.TelecomManager;
@@ -453,7 +454,11 @@ public class BlockedNumberProvider extends ContentProvider {
}
private boolean canCurrentUserBlockUsers() {
- return getContext().getUserId() == UserHandle.USER_SYSTEM;
+ int currentUserId = getContext().getUserId();
+ UserManager userManager = getContext().getSystemService(UserManager.class);
+ // Allow USER_SYSTEM and managed profile to block users
+ return (currentUserId == UserHandle.USER_SYSTEM ||
+ (userManager != null && userManager.isManagedProfile(currentUserId)));
}
private void notifyEmergencyContact() {
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
index 3a88a85..6df43dc 100644
--- a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
@@ -22,6 +22,7 @@ import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@@ -41,6 +42,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.SystemProperties;
+import android.os.UserManager;
import android.provider.BlockedNumberContract;
import android.provider.BlockedNumberContract.BlockedNumbers;
import android.provider.BlockedNumberContract.SystemContract;
@@ -64,6 +66,7 @@ import java.util.concurrent.TimeUnit;
public class BlockedNumberProviderTest extends AndroidTestCase {
private MyMockContext mMockContext;
private ContentResolver mResolver;
+ private UserManager mMockUserManager;
@Override
protected void setUp() throws Exception {
@@ -73,7 +76,9 @@ public class BlockedNumberProviderTest extends AndroidTestCase {
mMockContext = spy(new MyMockContext(getContext()));
mMockContext.initializeContext();
mResolver = mMockContext.getContentResolver();
+ mMockUserManager = mock(UserManager.class);
+ when(mMockContext.getSystemService(UserManager.class)).thenReturn(mMockUserManager);
doReturn(USER_SYSTEM).when(mMockContext).getUserId();
when(mMockContext.mCountryDetector.detectCountry())
.thenReturn(new Country("US", Country.COUNTRY_SOURCE_LOCATION));
@@ -727,6 +732,25 @@ public class BlockedNumberProviderTest extends AndroidTestCase {
}
}
+ public void testCanCurrentUserBlockUsers_systemUser() {
+ doReturn(USER_SYSTEM).when(mMockContext).getUserId();
+ assertTrue(BlockedNumberContract.canCurrentUserBlockNumbers(mMockContext));
+ }
+
+ public void testCanCurrentUserBlockUsers_managedProfile() {
+ int managedProfileUserId = 10;
+ doReturn(managedProfileUserId).when(mMockContext).getUserId();
+ doReturn(true).when(mMockUserManager).isManagedProfile(eq(managedProfileUserId));
+ assertTrue(BlockedNumberContract.canCurrentUserBlockNumbers(mMockContext));
+ }
+
+ public void testCanCurrentUserBlockUsers_secondaryUser() {
+ int secondaryUserId = 11;
+ doReturn(secondaryUserId).when(mMockContext).getUserId();
+ doReturn(false).when(mMockUserManager).isManagedProfile(eq(secondaryUserId));
+ assertFalse(BlockedNumberContract.canCurrentUserBlockNumbers(mMockContext));
+ }
+
private void assertIsBlocked(boolean expected, String phoneNumber) {
assertEquals(expected, BlockedNumberContract.isBlocked(mMockContext, phoneNumber));
}