Merge "Use killUid instead of killApplication to kill app" into rvc-dev am: 7f5a592d65

Change-Id: I58ae6e8a9621d7b0f3519c8d51cab9574525259b
This commit is contained in:
TreeHugger Robot
2020-05-29 16:21:27 +00:00
committed by Automerger Merge Worker
3 changed files with 18 additions and 23 deletions

View File

@@ -61,6 +61,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.internal.util.FunctionalUtils.ThrowingRunnable; import com.android.internal.util.FunctionalUtils.ThrowingRunnable;
import com.android.internal.util.FunctionalUtils.ThrowingSupplier; import com.android.internal.util.FunctionalUtils.ThrowingSupplier;
import com.android.server.LocalServices; import com.android.server.LocalServices;
import com.android.server.pm.permission.PermissionManagerService;
import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal;
import java.util.ArrayList; import java.util.ArrayList;
@@ -479,9 +480,11 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
mInjector.getAppOpsManager() mInjector.getAppOpsManager()
.setMode(OP_INTERACT_ACROSS_PROFILES, uid, packageName, newMode); .setMode(OP_INTERACT_ACROSS_PROFILES, uid, packageName, newMode);
} }
// Kill the UID before sending the broadcast to ensure that apps can be informed when
// their app-op has been revoked.
maybeKillUid(packageName, uid, hadPermission);
sendCanInteractAcrossProfilesChangedBroadcast(packageName, uid, UserHandle.of(userId)); sendCanInteractAcrossProfilesChangedBroadcast(packageName, uid, UserHandle.of(userId));
maybeLogSetInteractAcrossProfilesAppOp(packageName, newMode, userId, logMetrics, uid); maybeLogSetInteractAcrossProfilesAppOp(packageName, newMode, userId, logMetrics, uid);
maybeKillUid(packageName, uid, hadPermission);
} }
/** /**
@@ -496,7 +499,7 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
if (hasInteractAcrossProfilesPermission(packageName, uid, PermissionChecker.PID_UNKNOWN)) { if (hasInteractAcrossProfilesPermission(packageName, uid, PermissionChecker.PID_UNKNOWN)) {
return; return;
} }
mInjector.killUid(packageName, uid); mInjector.killUid(uid);
} }
private void maybeLogSetInteractAcrossProfilesAppOp( private void maybeLogSetInteractAcrossProfilesAppOp(
@@ -823,15 +826,11 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
} }
@Override @Override
public void killUid(String packageName, int uid) { public void killUid(int uid) {
try { PermissionManagerService.killUid(
ActivityManager.getService().killApplication(
packageName,
UserHandle.getAppId(uid), UserHandle.getAppId(uid),
UserHandle.getUserId(uid), UserHandle.getUserId(uid),
PermissionManager.KILL_APP_REASON_PERMISSIONS_REVOKED); PermissionManager.KILL_APP_REASON_PERMISSIONS_REVOKED);
} catch (RemoteException ignored) {
}
} }
} }
@@ -873,7 +872,7 @@ public class CrossProfileAppsServiceImpl extends ICrossProfileApps.Stub {
int checkComponentPermission(String permission, int uid, int owningUid, boolean exported); int checkComponentPermission(String permission, int uid, int owningUid, boolean exported);
void killUid(String packageName, int uid); void killUid(int uid);
} }
class LocalService extends CrossProfileAppsInternal { class LocalService extends CrossProfileAppsInternal {

View File

@@ -747,7 +747,7 @@ public class CrossProfileAppsServiceImplRoboTest {
} }
@Override @Override
public void killUid(String packageName, int uid) { public void killUid(int uid) {
mKilledUids.add(uid); mKilledUids.add(uid);
} }
} }

View File

@@ -32,7 +32,6 @@ import android.content.pm.PermissionInfo;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.permission.PermissionManager; import android.permission.PermissionManager;
@@ -42,6 +41,7 @@ import android.util.SparseArray;
import com.android.internal.util.FunctionalUtils.ThrowingRunnable; import com.android.internal.util.FunctionalUtils.ThrowingRunnable;
import com.android.internal.util.FunctionalUtils.ThrowingSupplier; import com.android.internal.util.FunctionalUtils.ThrowingSupplier;
import com.android.server.LocalServices; import com.android.server.LocalServices;
import com.android.server.pm.permission.PermissionManagerService;
import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal;
import org.junit.Before; import org.junit.Before;
@@ -696,15 +696,11 @@ public class CrossProfileAppsServiceImplTest {
} }
@Override @Override
public void killUid(String packageName, int uid) { public void killUid(int uid) {
try { PermissionManagerService.killUid(
ActivityManager.getService().killApplication(
packageName,
UserHandle.getAppId(uid), UserHandle.getAppId(uid),
UserHandle.getUserId(uid), UserHandle.getUserId(uid),
PermissionManager.KILL_APP_REASON_PERMISSIONS_REVOKED); PermissionManager.KILL_APP_REASON_PERMISSIONS_REVOKED);
} catch (RemoteException ignored) {
}
} }
} }
} }