summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2023-12-08 13:14:28 -0800
committerXin Li <delphij@google.com>2023-12-08 13:14:28 -0800
commiteed1acc3ba713ce697ab428862f2fdfbb27e20b9 (patch)
treec82e4130d65f14b0c80ee71f9f3b7f6de24c1141
parentfa50daa5856f68518801dd2b7c4aec34b46d2777 (diff)
parent3776b811440268b28b531e4fd4d05acf547310f3 (diff)
downloadBlockedNumberProvider-eed1acc3ba713ce697ab428862f2fdfbb27e20b9.tar.gz
Merge Android 14 QPR1
Merged-In: I64279462740e7c0e6e2df99164bbaeb5bae85ea4 Bug: 315507370 Change-Id: I1ef8b92501c6b0e624401b5340524edf9463a38c
-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));
}