Merge "Enforce run on handler thread for SatelliteAccessController" into main
This commit is contained in:
commit
be4ecf0ac4
2 changed files with 82 additions and 60 deletions
|
|
@ -39,6 +39,7 @@ import com.android.internal.annotations.VisibleForTesting;
|
|||
import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.net.module.util.CollectionUtils;
|
||||
import com.android.net.module.util.DeviceConfigUtils;
|
||||
import com.android.net.module.util.HandlerUtils;
|
||||
import com.android.net.module.util.SharedLog;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -52,10 +53,14 @@ import javax.annotation.CheckReturnValue;
|
|||
* Tracks the uid of all the default messaging application which are role_sms role and
|
||||
* satellite_communication permission complaint and requests ConnectivityService to create multi
|
||||
* layer request with satellite internet access support for the default message application.
|
||||
*
|
||||
* Note that this class is not thread safe and should only be accessed on the handler
|
||||
* thread, except {@link #start()}.
|
||||
*/
|
||||
public class SatelliteAccessController {
|
||||
private static final String TAG = SatelliteAccessController.class.getSimpleName();
|
||||
// Shamelessly copied from telephony/satellite/SatelliteManager.java.
|
||||
// TODO: Import from SatelliteManager when it is available.
|
||||
@VisibleForTesting
|
||||
public static final String PROPERTY_SATELLITE_DATA_OPTIMIZED =
|
||||
"android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED";
|
||||
|
|
@ -93,6 +98,7 @@ public class SatelliteAccessController {
|
|||
implements OnRoleHoldersChangedListener {
|
||||
@Override
|
||||
public void onRoleHoldersChanged(String role, UserHandle userHandle) {
|
||||
HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler);
|
||||
if (RoleManager.ROLE_SMS.equals(role) && updateSatelliteRoleSmsUids(userHandle)) {
|
||||
mLog.i("ROLE_SMS Change detected ");
|
||||
reportSatelliteNetworkFallbackUids();
|
||||
|
|
@ -267,6 +273,7 @@ public class SatelliteAccessController {
|
|||
*/
|
||||
public void onUserAddedWithInstalledPackageList(@NonNull UserHandle userHandle,
|
||||
@NonNull List<PackageInfo> apps) {
|
||||
HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler);
|
||||
// Obtain uids with role sms and satellite communication permission for the added user.
|
||||
final boolean roleSmsUidsChanged = updateSatelliteRoleSmsUids(userHandle);
|
||||
|
||||
|
|
@ -297,6 +304,7 @@ public class SatelliteAccessController {
|
|||
* @param userHandle The integer userHandle of the removed user. See {@link #EXTRA_USER_HANDLE}.
|
||||
*/
|
||||
public void onUserRemoved(@NonNull UserHandle userHandle) {
|
||||
HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler);
|
||||
final boolean smsRoleUidsChanged =
|
||||
updateSatelliteRoleSmsUidListOnUserRemoval(userHandle.getIdentifier());
|
||||
final boolean satelliteOptInUidsChanged;
|
||||
|
|
@ -319,6 +327,7 @@ public class SatelliteAccessController {
|
|||
* @param uid The uid of the new package.
|
||||
*/
|
||||
public void onPackageAdded(@NonNull final String packageName, final int uid) {
|
||||
HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler);
|
||||
if (!mSupportConstrainedDataSatelliteOptIn) return;
|
||||
if (addSatelliteDataOptInUid(packageName, uid)) {
|
||||
reportSatelliteNetworkFallbackUids();
|
||||
|
|
@ -340,6 +349,7 @@ public class SatelliteAccessController {
|
|||
* @param pkgList An array of package names that have become available.
|
||||
*/
|
||||
public void onExternalApplicationsAvailable(String[] pkgList) {
|
||||
HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler);
|
||||
if (!mSupportConstrainedDataSatelliteOptIn) return;
|
||||
if (CollectionUtils.isEmpty(pkgList)) {
|
||||
mLog.e("No available external application.");
|
||||
|
|
@ -367,6 +377,7 @@ public class SatelliteAccessController {
|
|||
* @param uid containing the integer uid previously assigned to the package.
|
||||
*/
|
||||
public void onPackageRemoved(@NonNull final String packageName, final int uid) {
|
||||
HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler);
|
||||
if (!mSupportConstrainedDataSatelliteOptIn) return;
|
||||
|
||||
// Scan for all apps sharing the same uid.
|
||||
|
|
@ -414,6 +425,7 @@ public class SatelliteAccessController {
|
|||
|
||||
/** Dump info to dumpsys */
|
||||
public void dump(@NonNull IndentingPrintWriter pw) {
|
||||
HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler);
|
||||
pw.println("SatelliteAccessController:");
|
||||
pw.increaseIndent();
|
||||
pw.println("SupportConstrainedDataSatelliteOptIn: "
|
||||
|
|
|
|||
|
|
@ -159,13 +159,13 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback, never()).accept(any(), any())
|
||||
|
||||
// check DEFAULT_MESSAGING_APP1 is available as satellite network fallback uid
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet())
|
||||
|
||||
// check SMS_APP2 is available as satellite network Fallback uid
|
||||
|
|
@ -173,7 +173,7 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID2.toUid(PRIMARY_USER)), emptySet())
|
||||
|
||||
// check no uid is available as satellite network fallback uid
|
||||
|
|
@ -181,7 +181,7 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(emptySet(), emptySet())
|
||||
}
|
||||
|
||||
|
|
@ -192,7 +192,7 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback, never()).accept(any(), any())
|
||||
|
||||
// Check DEFAULT_MESSAGING_APP1 is not available as satellite network fallback uid
|
||||
|
|
@ -202,7 +202,7 @@ class SatelliteAccessControllerTest {
|
|||
.checkPermission(Manifest.permission.SATELLITE_COMMUNICATION, SMS_APP1)
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback, never()).accept(any(), any())
|
||||
}
|
||||
|
||||
|
|
@ -211,10 +211,7 @@ class SatelliteAccessControllerTest {
|
|||
startSatelliteAccessController()
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(
|
||||
RoleManager.ROLE_BROWSER,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_BROWSER, PRIMARY_USER_HANDLE)
|
||||
verify(callback, never()).accept(any(), any())
|
||||
}
|
||||
|
||||
|
|
@ -225,13 +222,13 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback, never()).accept(any(), any())
|
||||
|
||||
// check SMS_APP1 is available as satellite network fallback uid at primary user
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet())
|
||||
|
||||
// check SMS_APP2 is available as satellite network fallback uid at primary user
|
||||
|
|
@ -239,7 +236,7 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID2.toUid(PRIMARY_USER)), emptySet())
|
||||
|
||||
// check SMS_APP1 is available as satellite network fallback uid at secondary user
|
||||
|
|
@ -247,7 +244,7 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
SECONDARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
verify(callback).accept(
|
||||
setOf(SMS_APP_ID2.toUid(PRIMARY_USER), SMS_APP_ID1.toUid(SECONDARY_USER)),
|
||||
emptySet()
|
||||
|
|
@ -258,16 +255,13 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(
|
||||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID1.toUid(SECONDARY_USER)), emptySet())
|
||||
|
||||
// check SMS_APP2 is available as satellite network fallback uid at secondary user
|
||||
doReturn(listOf(SMS_APP2))
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID2.toUid(SECONDARY_USER)), emptySet())
|
||||
|
||||
// check no uid is available as satellite network fallback uid at secondary user
|
||||
|
|
@ -275,7 +269,7 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
SECONDARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
verify(callback).accept(emptySet(), emptySet())
|
||||
}
|
||||
|
||||
|
|
@ -287,7 +281,7 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
PRIMARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID2.toUid(PRIMARY_USER)), emptySet())
|
||||
|
||||
// check SMS_APP1 is available as satellite network fallback uid at secondary user
|
||||
|
|
@ -295,14 +289,12 @@ class SatelliteAccessControllerTest {
|
|||
RoleManager.ROLE_SMS,
|
||||
SECONDARY_USER_HANDLE
|
||||
)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE)
|
||||
verify(callback).accept(
|
||||
setOf(SMS_APP_ID2.toUid(PRIMARY_USER), SMS_APP_ID1.toUid(SECONDARY_USER)),
|
||||
emptySet()
|
||||
)
|
||||
processOnHandlerThread {
|
||||
satelliteAccessController.onUserRemoved(SECONDARY_USER_HANDLE)
|
||||
}
|
||||
onUserRemoved(SECONDARY_USER_HANDLE)
|
||||
verify(callback, times(2)).accept(
|
||||
setOf(SMS_APP_ID2.toUid(PRIMARY_USER)),
|
||||
emptySet()
|
||||
|
|
@ -315,6 +307,33 @@ class SatelliteAccessControllerTest {
|
|||
return future.get()
|
||||
}
|
||||
|
||||
private fun onRoleHoldersChanged(roleName: String, userHandle: UserHandle) =
|
||||
processOnHandlerThread {
|
||||
roleHolderChangedListener.onRoleHoldersChanged(roleName, userHandle)
|
||||
}
|
||||
|
||||
private fun onUserAddedWithInstalledPackageList(
|
||||
userHandle: UserHandle,
|
||||
apps: List<PackageInfo>
|
||||
) = processOnHandlerThread {
|
||||
satelliteAccessController.onUserAddedWithInstalledPackageList(userHandle, apps)
|
||||
}
|
||||
|
||||
private fun onUserRemoved(userHandle: UserHandle) = processOnHandlerThread {
|
||||
satelliteAccessController.onUserRemoved(userHandle)
|
||||
}
|
||||
|
||||
private fun onPackageAdded(packageName: String, uid: Int) =
|
||||
processOnHandlerThread { satelliteAccessController.onPackageAdded(packageName, uid) }
|
||||
|
||||
private fun onPackageRemoved(packageName: String, uid: Int) =
|
||||
processOnHandlerThread { satelliteAccessController.onPackageRemoved(packageName, uid) }
|
||||
|
||||
private fun onExternalApplicationsAvailable(pkgList: Array<String>) =
|
||||
processOnHandlerThread {
|
||||
satelliteAccessController.onExternalApplicationsAvailable(pkgList)
|
||||
}
|
||||
|
||||
private fun startSatelliteAccessController() {
|
||||
satelliteAccessController.start()
|
||||
// Get registered listener using captor
|
||||
|
|
@ -352,7 +371,7 @@ class SatelliteAccessControllerTest {
|
|||
@Test
|
||||
fun testSatelliteOptInUids_onPackageAdded() {
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true)
|
||||
satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
verify(callback).accept(emptySet(), setOf(TEST_UID1))
|
||||
}
|
||||
|
||||
|
|
@ -360,7 +379,7 @@ class SatelliteAccessControllerTest {
|
|||
@Test
|
||||
fun testSatelliteOptInUids_onPackageAdded_ignoresIfNotSatelliteOptimized() {
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, false)
|
||||
satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
verify(callback, never()).accept(any(), any())
|
||||
}
|
||||
|
||||
|
|
@ -370,9 +389,9 @@ class SatelliteAccessControllerTest {
|
|||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true)
|
||||
mockGetPackagesForUid(TEST_UID1, arrayOf(TEST_PACKAGE1))
|
||||
|
||||
satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
verify(callback).accept(emptySet(), setOf(TEST_UID1))
|
||||
satelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
verify(callback).accept(emptySet(), emptySet())
|
||||
}
|
||||
|
||||
|
|
@ -385,14 +404,14 @@ class SatelliteAccessControllerTest {
|
|||
|
||||
// Verify uid is not removed if there is still another package shares the same uid.
|
||||
val inOrder = inOrder(callback)
|
||||
satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1))
|
||||
satelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
inOrder.verifyNoMoreInteractions()
|
||||
|
||||
// Verify uid is removed if there is no other package with shared uid.
|
||||
mockGetPackagesForUid(TEST_UID1, null)
|
||||
satelliteAccessController.onPackageRemoved(TEST_PACKAGE2, TEST_UID1)
|
||||
onPackageRemoved(TEST_PACKAGE2, TEST_UID1)
|
||||
inOrder.verify(callback).accept(emptySet(), emptySet())
|
||||
}
|
||||
|
||||
|
|
@ -405,18 +424,16 @@ class SatelliteAccessControllerTest {
|
|||
val packageInfo2 = makePackageInfo(TEST_PACKAGE2, TEST_UID2)
|
||||
|
||||
val inOrder = inOrder(callback)
|
||||
satelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
satelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(SECONDARY_USER_HANDLE, listOf(packageInfo2))
|
||||
onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
onUserAddedWithInstalledPackageList(SECONDARY_USER_HANDLE, listOf(packageInfo2))
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1))
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1, TEST_UID2))
|
||||
|
||||
satelliteAccessController.onUserRemoved(SECONDARY_USER_HANDLE)
|
||||
onUserRemoved(SECONDARY_USER_HANDLE)
|
||||
// Verify that the app associated with the non-removed user is not removed.
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1))
|
||||
|
||||
satelliteAccessController.onUserRemoved(PRIMARY_USER_HANDLE)
|
||||
onUserRemoved(PRIMARY_USER_HANDLE)
|
||||
// Verify everything is removed.
|
||||
inOrder.verify(callback).accept(emptySet(), emptySet())
|
||||
inOrder.verifyNoMoreInteractions()
|
||||
|
|
@ -429,12 +446,11 @@ class SatelliteAccessControllerTest {
|
|||
val packageInfo1 = makePackageInfo(TEST_PACKAGE1, TEST_UID1)
|
||||
|
||||
// Verify nothing changes and nothing crashes.
|
||||
satelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
satelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
satelliteAccessController.onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2))
|
||||
satelliteAccessController.onUserRemoved(PRIMARY_USER_HANDLE)
|
||||
onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2))
|
||||
onUserRemoved(PRIMARY_USER_HANDLE)
|
||||
verify(callback, never()).accept(any(), any())
|
||||
}
|
||||
|
||||
|
|
@ -445,12 +461,12 @@ class SatelliteAccessControllerTest {
|
|||
// Set SMS_APP1 under primary user as a role-sms Uid.
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(callback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet())
|
||||
|
||||
// Mock another opt-in uid, verify they both reported via the callback.
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true)
|
||||
satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
verify(callback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), setOf(TEST_UID1))
|
||||
}
|
||||
|
||||
|
|
@ -463,8 +479,7 @@ class SatelliteAccessControllerTest {
|
|||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
|
||||
val inOrder = inOrder(callback)
|
||||
satelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
// Verify the callback only fired once after both lists are ready.
|
||||
inOrder.verify(callback, never())
|
||||
.accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet())
|
||||
|
|
@ -483,23 +498,23 @@ class SatelliteAccessControllerTest {
|
|||
// However, one opt-in uid is a messaging app and will surprise us later.
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true)
|
||||
mockIsSatelliteDataOptimizedApp(SMS_APP1, true)
|
||||
satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1))
|
||||
satelliteAccessController.onPackageAdded(SMS_APP1, smsUid)
|
||||
onPackageAdded(SMS_APP1, smsUid)
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1, smsUid))
|
||||
|
||||
// Set SMS_APP1 as a role-sms Uid.
|
||||
// Verify the role-sms Uid is excluded from the opt-in Uid list.
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
inOrder.verify(callback).accept(setOf(smsUid), setOf(TEST_UID1))
|
||||
|
||||
// Unset SMS_APP1 as the role-sms Uid.
|
||||
// Verify the role-sms Uid is included to the opt-in Uid list again.
|
||||
doReturn(emptyList<String>())
|
||||
.`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1, smsUid))
|
||||
}
|
||||
|
||||
|
|
@ -511,14 +526,9 @@ class SatelliteAccessControllerTest {
|
|||
mockIsSatelliteDataOptimizedApp(SMS_APP2, true)
|
||||
|
||||
val inOrder = inOrder(callback)
|
||||
satelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, emptyList<PackageInfo>())
|
||||
satelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(
|
||||
SECONDARY_USER_HANDLE,
|
||||
emptyList<PackageInfo>()
|
||||
)
|
||||
satelliteAccessController.onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2))
|
||||
onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, emptyList<PackageInfo>())
|
||||
onUserAddedWithInstalledPackageList(SECONDARY_USER_HANDLE, emptyList<PackageInfo>())
|
||||
onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2))
|
||||
inOrder.verify(callback).accept(emptySet(), setOf(
|
||||
SMS_APP_ID1.toUid(PRIMARY_USER),
|
||||
SMS_APP_ID1.toUid(SECONDARY_USER),
|
||||
|
|
|
|||
Loading…
Reference in a new issue