Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5385b517 authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Update user support for package manager

* Allow user 'all' for "list packages"
* Support user 'current' for "clear"
* Support user 'current' for "set-user-restriction"

Bug: 137410612
Test: manual
Change-Id: Icddaf772c37d595ced8e1d91cfed5c8a105e1f66
parent c3c52177
Loading
Loading
Loading
Loading
+31 −24
Original line number Diff line number Diff line
@@ -728,8 +728,11 @@ class PackageManagerShellCommand extends ShellCommand {

        final String filter = getNextArg();

        if (userId == UserHandle.USER_ALL) {
            getFlags |= PackageManager.MATCH_KNOWN_PACKAGES;
        }
        final int translatedUserId =
                translateUserId(userId, UserHandle.USER_NULL, "runListPackages");
                translateUserId(userId, UserHandle.USER_SYSTEM, "runListPackages");
        @SuppressWarnings("unchecked")
        final ParceledListSlice<PackageInfo> slice =
                mInterface.getInstalledPackages(getFlags, translatedUserId);
@@ -896,10 +899,9 @@ class PackageManagerShellCommand extends ShellCommand {
    }

    private int runListStagedSessions() {
        final IndentingPrintWriter pw = new IndentingPrintWriter(
                getOutPrintWriter(), /* singleIndent */ "  ", /* wrapLength */ 120);

        SessionDump sessionDump = new SessionDump();
        try (IndentingPrintWriter pw = new IndentingPrintWriter(
                getOutPrintWriter(), /* singleIndent */ "  ", /* wrapLength */ 120)) {
            final SessionDump sessionDump = new SessionDump();
            String opt;
            while ((opt = getNextOption()) != null) {
                if (!setSessionFlag(opt, sessionDump)) {
@@ -909,7 +911,7 @@ class PackageManagerShellCommand extends ShellCommand {
            }

            try {
            List<SessionInfo> stagedSessions =
                final List<SessionInfo> stagedSessions =
                        mInterface.getPackageInstaller().getStagedSessions().getList();
                printSessionList(pw, stagedSessions, sessionDump);
            } catch (RemoteException e) {
@@ -920,6 +922,7 @@ class PackageManagerShellCommand extends ShellCommand {
            }
            return 1;
        }
    }

    private void printSessionList(IndentingPrintWriter pw, List<SessionInfo> stagedSessions,
            SessionDump sessionDump) {
@@ -1943,8 +1946,10 @@ class PackageManagerShellCommand extends ShellCommand {
            return 1;
        }

        ClearDataObserver obs = new ClearDataObserver();
        ActivityManager.getService().clearApplicationUserData(pkg, false, obs, userId);
        final int translatedUserId =
                translateUserId(userId, UserHandle.USER_NULL, "runClear");
        final ClearDataObserver obs = new ClearDataObserver();
        ActivityManager.getService().clearApplicationUserData(pkg, false, obs, translatedUserId);
        synchronized (obs) {
            while (!obs.finished) {
                try {
@@ -2551,9 +2556,11 @@ class PackageManagerShellCommand extends ShellCommand {
            getErrPrintWriter().println("Error: valid value not specified");
            return 1;
        }
        IUserManager um = IUserManager.Stub.asInterface(
        final int translatedUserId =
                translateUserId(userId, UserHandle.USER_NULL, "runSetUserRestriction");
        final IUserManager um = IUserManager.Stub.asInterface(
                ServiceManager.getService(Context.USER_SERVICE));
        um.setUserRestriction(restriction, value, userId);
        um.setUserRestriction(restriction, value, translatedUserId);
        return 0;
    }