From 8c6f2a0faab522ea36084077fbf5ff9b6955bbf6 Mon Sep 17 00:00:00 2001 From: Aishwarya Mallampati Date: Wed, 7 Jun 2023 21:06:10 +0000 Subject: 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 --- .../blockednumber/BlockedNumberProvider.java | 7 ++++++- .../blockednumber/BlockedNumberProviderTest.java | 24 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) 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)); } -- cgit v1.2.3