Update network rules for only uids that are installed. am: c3580425a7
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2065613 Change-Id: Id48d271c5d9d01bf0c6d33ee5fe5901626a42874 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -162,6 +162,7 @@ import android.content.pm.ApplicationInfo;
|
|||||||
import android.content.pm.IPackageManager;
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
|
import android.content.pm.PackageManagerInternal;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
@@ -4556,9 +4557,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
// update rules for all installed applications
|
// update rules for all installed applications
|
||||||
final PackageManager pm = mContext.getPackageManager();
|
|
||||||
final List<UserInfo> users;
|
final List<UserInfo> users;
|
||||||
final List<ApplicationInfo> apps;
|
|
||||||
|
|
||||||
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "list-users");
|
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "list-users");
|
||||||
try {
|
try {
|
||||||
@@ -4566,26 +4565,30 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
|||||||
} finally {
|
} finally {
|
||||||
Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
|
Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
|
||||||
}
|
}
|
||||||
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "list-uids");
|
Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "iterate-uids");
|
||||||
try {
|
try {
|
||||||
apps = pm.getInstalledApplications(
|
final PackageManagerInternal packageManagerInternal = LocalServices.getService(
|
||||||
PackageManager.MATCH_ANY_USER | PackageManager.MATCH_DISABLED_COMPONENTS
|
PackageManagerInternal.class);
|
||||||
| PackageManager.MATCH_DIRECT_BOOT_AWARE
|
final int usersSize = users.size();
|
||||||
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
|
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 {
|
} finally {
|
||||||
Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
|
Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
consumer.accept(uid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
|
Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ import android.content.pm.ApplicationInfo;
|
|||||||
import android.content.pm.IPackageManager;
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.PackageManagerInternal;
|
||||||
import android.content.pm.Signature;
|
import android.content.pm.Signature;
|
||||||
import android.content.pm.UserInfo;
|
import android.content.pm.UserInfo;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
@@ -166,6 +167,7 @@ import com.android.internal.util.test.BroadcastInterceptingContext.FutureIntent;
|
|||||||
import com.android.internal.util.test.FsUtil;
|
import com.android.internal.util.test.FsUtil;
|
||||||
import com.android.server.DeviceIdleInternal;
|
import com.android.server.DeviceIdleInternal;
|
||||||
import com.android.server.LocalServices;
|
import com.android.server.LocalServices;
|
||||||
|
import com.android.server.pm.parsing.pkg.AndroidPackage;
|
||||||
import com.android.server.usage.AppStandbyInternal;
|
import com.android.server.usage.AppStandbyInternal;
|
||||||
|
|
||||||
import com.google.common.util.concurrent.AbstractFuture;
|
import com.google.common.util.concurrent.AbstractFuture;
|
||||||
@@ -216,6 +218,7 @@ import java.util.concurrent.ExecutionException;
|
|||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -274,6 +277,7 @@ public class NetworkPolicyManagerServiceTest {
|
|||||||
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
|
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
|
||||||
|
|
||||||
private ActivityManagerInternal mActivityManagerInternal;
|
private ActivityManagerInternal mActivityManagerInternal;
|
||||||
|
private PackageManagerInternal mPackageManagerInternal;
|
||||||
|
|
||||||
private IUidObserver mUidObserver;
|
private IUidObserver mUidObserver;
|
||||||
private INetworkManagementEventObserver mNetworkObserver;
|
private INetworkManagementEventObserver mNetworkObserver;
|
||||||
@@ -335,6 +339,7 @@ public class NetworkPolicyManagerServiceTest {
|
|||||||
when(usageStats.getIdleUidsForUser(anyInt())).thenReturn(new int[]{});
|
when(usageStats.getIdleUidsForUser(anyInt())).thenReturn(new int[]{});
|
||||||
|
|
||||||
mActivityManagerInternal = addLocalServiceMock(ActivityManagerInternal.class);
|
mActivityManagerInternal = addLocalServiceMock(ActivityManagerInternal.class);
|
||||||
|
mPackageManagerInternal = addLocalServiceMock(PackageManagerInternal.class);
|
||||||
|
|
||||||
final PowerSaveState state = new PowerSaveState.Builder()
|
final PowerSaveState state = new PowerSaveState.Builder()
|
||||||
.setBatterySaverEnabled(false).build();
|
.setBatterySaverEnabled(false).build();
|
||||||
@@ -483,8 +488,15 @@ public class NetworkPolicyManagerServiceTest {
|
|||||||
.thenReturn(buildApplicationInfo(PKG_NAME_B, UID_B));
|
.thenReturn(buildApplicationInfo(PKG_NAME_B, UID_B));
|
||||||
when(mPackageManager.getApplicationInfo(eq(PKG_NAME_C), anyInt()))
|
when(mPackageManager.getApplicationInfo(eq(PKG_NAME_C), anyInt()))
|
||||||
.thenReturn(buildApplicationInfo(PKG_NAME_C, UID_C));
|
.thenReturn(buildApplicationInfo(PKG_NAME_C, UID_C));
|
||||||
when(mPackageManager.getInstalledApplications(anyInt())).thenReturn(
|
doAnswer(arg -> {
|
||||||
buildInstalledApplicationInfoList());
|
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(mUserManager.getUsers()).thenReturn(buildUserInfoList());
|
||||||
when(mNetworkManager.isBandwidthControlEnabled()).thenReturn(true);
|
when(mNetworkManager.isBandwidthControlEnabled()).thenReturn(true);
|
||||||
when(mNetworkManager.setDataSaverModeEnabled(anyBoolean())).thenReturn(true);
|
when(mNetworkManager.setDataSaverModeEnabled(anyBoolean())).thenReturn(true);
|
||||||
@@ -536,6 +548,7 @@ public class NetworkPolicyManagerServiceTest {
|
|||||||
LocalServices.removeServiceForTest(DeviceIdleInternal.class);
|
LocalServices.removeServiceForTest(DeviceIdleInternal.class);
|
||||||
LocalServices.removeServiceForTest(AppStandbyInternal.class);
|
LocalServices.removeServiceForTest(AppStandbyInternal.class);
|
||||||
LocalServices.removeServiceForTest(UsageStatsManagerInternal.class);
|
LocalServices.removeServiceForTest(UsageStatsManagerInternal.class);
|
||||||
|
LocalServices.removeServiceForTest(PackageManagerInternal.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
@@ -2037,14 +2050,20 @@ public class NetworkPolicyManagerServiceTest {
|
|||||||
return ai;
|
return ai;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ApplicationInfo> buildInstalledApplicationInfoList() {
|
private List<AndroidPackage> buildInstalledPackageList() {
|
||||||
final List<ApplicationInfo> installedApps = new ArrayList<>();
|
final List<AndroidPackage> installedApps = new ArrayList<>();
|
||||||
installedApps.add(buildApplicationInfo(PKG_NAME_A, UID_A));
|
installedApps.add(createPackageMock(UID_A));
|
||||||
installedApps.add(buildApplicationInfo(PKG_NAME_B, UID_B));
|
installedApps.add(createPackageMock(UID_B));
|
||||||
installedApps.add(buildApplicationInfo(PKG_NAME_C, UID_C));
|
installedApps.add(createPackageMock(UID_C));
|
||||||
return installedApps;
|
return installedApps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private AndroidPackage createPackageMock(int uid) {
|
||||||
|
final AndroidPackage androidPackage = mock(AndroidPackage.class);
|
||||||
|
when(androidPackage.getUid()).thenReturn(uid);
|
||||||
|
return androidPackage;
|
||||||
|
}
|
||||||
|
|
||||||
private List<UserInfo> buildUserInfoList() {
|
private List<UserInfo> buildUserInfoList() {
|
||||||
final List<UserInfo> users = new ArrayList<>();
|
final List<UserInfo> users = new ArrayList<>();
|
||||||
users.add(new UserInfo(USER_ID, "user1", 0));
|
users.add(new UserInfo(USER_ID, "user1", 0));
|
||||||
|
|||||||
Reference in New Issue
Block a user