diff options
author | Aishwarya Mallampati <amallampati@google.com> | 2023-06-07 21:06:10 +0000 |
---|---|---|
committer | Aishwarya Mallampati <amallampati@google.com> | 2023-06-08 21:12:25 +0000 |
commit | 8c6f2a0faab522ea36084077fbf5ff9b6955bbf6 (patch) | |
tree | c82e4130d65f14b0c80ee71f9f3b7f6de24c1141 | |
parent | a361741bed90624ad72760023b844c7256842921 (diff) | |
download | BlockedNumberProvider-8c6f2a0faab522ea36084077fbf5ff9b6955bbf6.tar.gz |
Allow both USER_SYSTEM and managed profile to block users.
Bug: 285343707
Test: Flashed build on raven-userdebug and performed basic functionality
tests.
Enabled work profile and checked if we are able to block numbers
from work profile phone app.
atest com.android.providers.blockednumber.BlockedNumberProviderTest
Change-Id: I65d83fbd80becf7228548803dcd2b06ec8998f0e
-rw-r--r-- | src/com/android/providers/blockednumber/BlockedNumberProvider.java | 7 | ||||
-rw-r--r-- | tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java | 24 |
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)); } |