Loading services/core/java/com/android/server/net/NetworkPolicyManagerService.java +21 −18 Original line number Diff line number Diff line Loading @@ -162,6 +162,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.UserInfo; import android.content.res.Resources; import android.database.ContentObserver; Loading Loading @@ -4539,9 +4540,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } try { // update rules for all installed applications final PackageManager pm = mContext.getPackageManager(); final List<UserInfo> users; final List<ApplicationInfo> apps; Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "list-users"); try { Loading @@ -4549,25 +4548,29 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); } Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "list-uids"); Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "iterate-uids"); try { apps = pm.getInstalledApplications( PackageManager.MATCH_ANY_USER | PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE); } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); } final PackageManagerInternal packageManagerInternal = LocalServices.getService( PackageManagerInternal.class); final int usersSize = users.size(); final int appsSize = apps.size(); for (int i = 0; i < usersSize; i++) { final UserInfo user = users.get(i); for (int j = 0; j < appsSize; j++) { final ApplicationInfo app = apps.get(j); final int uid = UserHandle.getUid(user.id, app.uid); for (int i = 0; i < usersSize; ++i) { final int userId = users.get(i).id; final SparseBooleanArray sharedAppIdsHandled = new SparseBooleanArray(); packageManagerInternal.forEachInstalledPackage(androidPackage -> { final int appId = androidPackage.getUid(); if (androidPackage.getSharedUserId() != null) { if (sharedAppIdsHandled.indexOfKey(appId) < 0) { sharedAppIdsHandled.put(appId, true); } else { return; } } final int uid = UserHandle.getUid(userId, appId); consumer.accept(uid); }, userId); } } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); } } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); Loading services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +26 −7 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.Signature; import android.content.pm.UserInfo; import android.net.ConnectivityManager; Loading Loading @@ -166,6 +167,7 @@ import com.android.internal.util.test.BroadcastInterceptingContext.FutureIntent; import com.android.internal.util.test.FsUtil; import com.android.server.DeviceIdleInternal; import com.android.server.LocalServices; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.usage.AppStandbyInternal; import com.google.common.util.concurrent.AbstractFuture; Loading Loading @@ -216,6 +218,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; import java.util.stream.Collectors; /** Loading Loading @@ -274,6 +277,7 @@ public class NetworkPolicyManagerServiceTest { ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class); private ActivityManagerInternal mActivityManagerInternal; private PackageManagerInternal mPackageManagerInternal; private IUidObserver mUidObserver; private INetworkManagementEventObserver mNetworkObserver; Loading Loading @@ -335,6 +339,7 @@ public class NetworkPolicyManagerServiceTest { when(usageStats.getIdleUidsForUser(anyInt())).thenReturn(new int[]{}); mActivityManagerInternal = addLocalServiceMock(ActivityManagerInternal.class); mPackageManagerInternal = addLocalServiceMock(PackageManagerInternal.class); final PowerSaveState state = new PowerSaveState.Builder() .setBatterySaverEnabled(false).build(); Loading Loading @@ -483,8 +488,15 @@ public class NetworkPolicyManagerServiceTest { .thenReturn(buildApplicationInfo(PKG_NAME_B, UID_B)); when(mPackageManager.getApplicationInfo(eq(PKG_NAME_C), anyInt())) .thenReturn(buildApplicationInfo(PKG_NAME_C, UID_C)); when(mPackageManager.getInstalledApplications(anyInt())).thenReturn( buildInstalledApplicationInfoList()); doAnswer(arg -> { final Consumer<AndroidPackage> consumer = (Consumer<AndroidPackage>) arg.getArguments()[0]; for (AndroidPackage androidPackage : buildInstalledPackageList()) { consumer.accept(androidPackage); } return null; }).when(mPackageManagerInternal).forEachInstalledPackage( any(Consumer.class), anyInt()); when(mUserManager.getUsers()).thenReturn(buildUserInfoList()); when(mNetworkManager.isBandwidthControlEnabled()).thenReturn(true); when(mNetworkManager.setDataSaverModeEnabled(anyBoolean())).thenReturn(true); Loading Loading @@ -536,6 +548,7 @@ public class NetworkPolicyManagerServiceTest { LocalServices.removeServiceForTest(DeviceIdleInternal.class); LocalServices.removeServiceForTest(AppStandbyInternal.class); LocalServices.removeServiceForTest(UsageStatsManagerInternal.class); LocalServices.removeServiceForTest(PackageManagerInternal.class); } @After Loading Loading @@ -2037,14 +2050,20 @@ public class NetworkPolicyManagerServiceTest { return ai; } private List<ApplicationInfo> buildInstalledApplicationInfoList() { final List<ApplicationInfo> installedApps = new ArrayList<>(); installedApps.add(buildApplicationInfo(PKG_NAME_A, UID_A)); installedApps.add(buildApplicationInfo(PKG_NAME_B, UID_B)); installedApps.add(buildApplicationInfo(PKG_NAME_C, UID_C)); private List<AndroidPackage> buildInstalledPackageList() { final List<AndroidPackage> installedApps = new ArrayList<>(); installedApps.add(createPackageMock(UID_A)); installedApps.add(createPackageMock(UID_B)); installedApps.add(createPackageMock(UID_C)); return installedApps; } private AndroidPackage createPackageMock(int uid) { final AndroidPackage androidPackage = mock(AndroidPackage.class); when(androidPackage.getUid()).thenReturn(uid); return androidPackage; } private List<UserInfo> buildUserInfoList() { final List<UserInfo> users = new ArrayList<>(); users.add(new UserInfo(USER_ID, "user1", 0)); Loading Loading
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +21 −18 Original line number Diff line number Diff line Loading @@ -162,6 +162,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.UserInfo; import android.content.res.Resources; import android.database.ContentObserver; Loading Loading @@ -4539,9 +4540,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } try { // update rules for all installed applications final PackageManager pm = mContext.getPackageManager(); final List<UserInfo> users; final List<ApplicationInfo> apps; Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "list-users"); try { Loading @@ -4549,25 +4548,29 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); } Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "list-uids"); Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "iterate-uids"); try { apps = pm.getInstalledApplications( PackageManager.MATCH_ANY_USER | PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_DIRECT_BOOT_AWARE | PackageManager.MATCH_DIRECT_BOOT_UNAWARE); } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); } final PackageManagerInternal packageManagerInternal = LocalServices.getService( PackageManagerInternal.class); final int usersSize = users.size(); final int appsSize = apps.size(); for (int i = 0; i < usersSize; i++) { final UserInfo user = users.get(i); for (int j = 0; j < appsSize; j++) { final ApplicationInfo app = apps.get(j); final int uid = UserHandle.getUid(user.id, app.uid); for (int i = 0; i < usersSize; ++i) { final int userId = users.get(i).id; final SparseBooleanArray sharedAppIdsHandled = new SparseBooleanArray(); packageManagerInternal.forEachInstalledPackage(androidPackage -> { final int appId = androidPackage.getUid(); if (androidPackage.getSharedUserId() != null) { if (sharedAppIdsHandled.indexOfKey(appId) < 0) { sharedAppIdsHandled.put(appId, true); } else { return; } } final int uid = UserHandle.getUid(userId, appId); consumer.accept(uid); }, userId); } } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); } } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); Loading
services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +26 −7 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.content.pm.Signature; import android.content.pm.UserInfo; import android.net.ConnectivityManager; Loading Loading @@ -166,6 +167,7 @@ import com.android.internal.util.test.BroadcastInterceptingContext.FutureIntent; import com.android.internal.util.test.FsUtil; import com.android.server.DeviceIdleInternal; import com.android.server.LocalServices; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.usage.AppStandbyInternal; import com.google.common.util.concurrent.AbstractFuture; Loading Loading @@ -216,6 +218,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; import java.util.stream.Collectors; /** Loading Loading @@ -274,6 +277,7 @@ public class NetworkPolicyManagerServiceTest { ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class); private ActivityManagerInternal mActivityManagerInternal; private PackageManagerInternal mPackageManagerInternal; private IUidObserver mUidObserver; private INetworkManagementEventObserver mNetworkObserver; Loading Loading @@ -335,6 +339,7 @@ public class NetworkPolicyManagerServiceTest { when(usageStats.getIdleUidsForUser(anyInt())).thenReturn(new int[]{}); mActivityManagerInternal = addLocalServiceMock(ActivityManagerInternal.class); mPackageManagerInternal = addLocalServiceMock(PackageManagerInternal.class); final PowerSaveState state = new PowerSaveState.Builder() .setBatterySaverEnabled(false).build(); Loading Loading @@ -483,8 +488,15 @@ public class NetworkPolicyManagerServiceTest { .thenReturn(buildApplicationInfo(PKG_NAME_B, UID_B)); when(mPackageManager.getApplicationInfo(eq(PKG_NAME_C), anyInt())) .thenReturn(buildApplicationInfo(PKG_NAME_C, UID_C)); when(mPackageManager.getInstalledApplications(anyInt())).thenReturn( buildInstalledApplicationInfoList()); doAnswer(arg -> { final Consumer<AndroidPackage> consumer = (Consumer<AndroidPackage>) arg.getArguments()[0]; for (AndroidPackage androidPackage : buildInstalledPackageList()) { consumer.accept(androidPackage); } return null; }).when(mPackageManagerInternal).forEachInstalledPackage( any(Consumer.class), anyInt()); when(mUserManager.getUsers()).thenReturn(buildUserInfoList()); when(mNetworkManager.isBandwidthControlEnabled()).thenReturn(true); when(mNetworkManager.setDataSaverModeEnabled(anyBoolean())).thenReturn(true); Loading Loading @@ -536,6 +548,7 @@ public class NetworkPolicyManagerServiceTest { LocalServices.removeServiceForTest(DeviceIdleInternal.class); LocalServices.removeServiceForTest(AppStandbyInternal.class); LocalServices.removeServiceForTest(UsageStatsManagerInternal.class); LocalServices.removeServiceForTest(PackageManagerInternal.class); } @After Loading Loading @@ -2037,14 +2050,20 @@ public class NetworkPolicyManagerServiceTest { return ai; } private List<ApplicationInfo> buildInstalledApplicationInfoList() { final List<ApplicationInfo> installedApps = new ArrayList<>(); installedApps.add(buildApplicationInfo(PKG_NAME_A, UID_A)); installedApps.add(buildApplicationInfo(PKG_NAME_B, UID_B)); installedApps.add(buildApplicationInfo(PKG_NAME_C, UID_C)); private List<AndroidPackage> buildInstalledPackageList() { final List<AndroidPackage> installedApps = new ArrayList<>(); installedApps.add(createPackageMock(UID_A)); installedApps.add(createPackageMock(UID_B)); installedApps.add(createPackageMock(UID_C)); return installedApps; } private AndroidPackage createPackageMock(int uid) { final AndroidPackage androidPackage = mock(AndroidPackage.class); when(androidPackage.getUid()).thenReturn(uid); return androidPackage; } private List<UserInfo> buildUserInfoList() { final List<UserInfo> users = new ArrayList<>(); users.add(new UserInfo(USER_ID, "user1", 0)); Loading