android.os.UserHandle#USER_SYSTEM源码实例Demo

下面列出了android.os.UserHandle#USER_SYSTEM 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

public int runSetUserRestriction() throws RemoteException {
    int userId = UserHandle.USER_SYSTEM;
    String opt = getNextOption();
    if (opt != null && "--user".equals(opt)) {
        userId = UserHandle.parseUserArg(getNextArgRequired());
    }

    String restriction = getNextArg();
    String arg = getNextArg();
    boolean value;
    if ("1".equals(arg)) {
        value = true;
    } else if ("0".equals(arg)) {
        value = false;
    } else {
        getErrPrintWriter().println("Error: valid value not specified");
        return 1;
    }
    IUserManager um = IUserManager.Stub.asInterface(
            ServiceManager.getService(Context.USER_SERVICE));
    um.setUserRestriction(restriction, value, userId);
    return 0;
}
 
private int runEnableDisable(final boolean enable) throws RemoteException {
    final PrintWriter err = getErrPrintWriter();

    int userId = UserHandle.USER_SYSTEM;
    String opt;
    while ((opt = getNextOption()) != null) {
        switch (opt) {
            case "--user":
                userId = UserHandle.parseUserArg(getNextArgRequired());
                break;
            default:
                err.println("Error: Unknown option: " + opt);
                return 1;
        }
    }

    final String packageName = getNextArgRequired();
    return mInterface.setEnabled(packageName, enable, userId) ? 0 : 1;
}
 
源代码3 项目: android_9.0.0_r45   文件: TrustManagerService.java
/**
 * Temporarily suppress strong auth requirements for {@param userId} until strong auth
 * changes again. Must only be called when we know about a successful unlock already
 * before the underlying StrongAuthTracker.
 *
 * Note that this only changes whether trust agents can be started, not the actual trusted
 * value.
 */
void allowTrustFromUnlock(int userId) {
    if (userId < UserHandle.USER_SYSTEM) {
        throw new IllegalArgumentException("userId must be a valid user: " + userId);
    }
    boolean previous = canAgentsRunForUser(userId);
    mStartFromSuccessfulUnlock.put(userId, true);

    if (DEBUG) {
        Log.i(TAG, "allowTrustFromUnlock(" + userId + ") ->"
                + " trustAllowed=" + isTrustAllowedForUser(userId)
                + " agentsCanRun=" + canAgentsRunForUser(userId));
    }

    if (canAgentsRunForUser(userId) != previous) {
        refreshAgentList(userId);
    }
}
 
源代码4 项目: android_9.0.0_r45   文件: DiskStatsFileLogger.java
/**
 * A given package may exist for multiple users with distinct sizes. This function filters
 * the packages that do not belong to user 0 out to ensure that we get good stats for a subset.
 * @return A mapping of package name to merged package stats.
 */
private ArrayMap<String, PackageStats> filterOnlyPrimaryUser() {
    ArrayMap<String, PackageStats> packageMap = new ArrayMap<>();
    for (PackageStats stat : mPackageStats) {
        if (stat.userHandle != UserHandle.USER_SYSTEM) {
            continue;
        }

        PackageStats existingStats = packageMap.get(stat.packageName);
        if (existingStats != null) {
            existingStats.cacheSize += stat.cacheSize;
            existingStats.codeSize += stat.codeSize;
            existingStats.dataSize += stat.dataSize;
            existingStats.externalCacheSize += stat.externalCacheSize;
            existingStats.externalCodeSize += stat.externalCodeSize;
            existingStats.externalDataSize += stat.externalDataSize;
        } else {
            packageMap.put(stat.packageName, new PackageStats(stat));
        }
    }
    return packageMap;
}
 
源代码5 项目: android_9.0.0_r45   文件: ZenModeHelper.java
public void writeXml(XmlSerializer out, boolean forBackup, Integer version) throws IOException {
    final int N = mConfigs.size();
    for (int i = 0; i < N; i++) {
        //TODO: http://b/22388012
        if (forBackup && mConfigs.keyAt(i) != UserHandle.USER_SYSTEM) {
            continue;
        }
        mConfigs.valueAt(i).writeXml(out, version);
    }
}
 
源代码6 项目: android_9.0.0_r45   文件: ZenModeHelper.java
private void loadConfigForUser(int user, String reason) {
    if (mUser == user || user < UserHandle.USER_SYSTEM) return;
    mUser = user;
    if (DEBUG) Log.d(TAG, reason + " u=" + user);
    ZenModeConfig config = mConfigs.get(user);
    if (config == null) {
        if (DEBUG) Log.d(TAG, reason + " generating default config for user " + user);
        config = mDefaultConfig.copy();
        config.user = user;
    }
    synchronized (mConfig) {
        setConfigLocked(config, null, reason);
    }
    cleanUpZenRules();
}
 
源代码7 项目: Study_Android_Demo   文件: SettingsProviderTest.java
@Test
public void testSetAndGetSystemViaFrontEndApiForNonSystemUser() throws Exception {
    final int secondaryUserId = getSecondaryUserId();
    if (secondaryUserId == UserHandle.USER_SYSTEM) {
        Log.w(LOG_TAG, "No secondary user. Skipping "
                + "testSetAndGetSystemViaFrontEndApiForNonSystemUser");
        return;
    }
    performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SYSTEM, secondaryUserId);
}
 
源代码8 项目: android_9.0.0_r45   文件: UserRestrictionsUtils.java
/**
 * @return true if a restriction is settable by profile owner.  Note it takes a user ID because
 * some restrictions can be changed by PO only when it's running on the system user.
 */
public static boolean canProfileOwnerChange(String restriction, int userId) {
    return !IMMUTABLE_BY_OWNERS.contains(restriction)
            && !DEVICE_OWNER_ONLY_RESTRICTIONS.contains(restriction)
            && !(userId != UserHandle.USER_SYSTEM
                && PRIMARY_USER_ONLY_RESTRICTIONS.contains(restriction));
}
 
源代码9 项目: Study_Android_Demo   文件: SettingsProviderTest.java
@Test
public void testSetAndGetSecureViaFrontEndApiForNonSystemUser() throws Exception {
    final int secondaryUserId = getSecondaryUserId();
    if (secondaryUserId == UserHandle.USER_SYSTEM) {
        Log.w(LOG_TAG, "No secondary user. Skipping "
                + "testSetAndGetSecureViaFrontEndApiForNonSystemUser");
        return;
    }
    performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_SECURE, secondaryUserId);
}
 
源代码10 项目: android_9.0.0_r45   文件: UserSwitchingDialog.java
void inflateContent() {
    // Set up the dialog contents
    setCancelable(false);
    Resources res = getContext().getResources();
    // Custom view due to alignment and font size requirements
    View view = LayoutInflater.from(getContext()).inflate(R.layout.user_switching_dialog,
        null);

    String viewMessage = null;
    if (UserManager.isSplitSystemUser() && mNewUser.id == UserHandle.USER_SYSTEM) {
        viewMessage = res.getString(R.string.user_logging_out_message, mOldUser.name);
    } else if (UserManager.isDeviceInDemoMode(mContext)) {
        if (mOldUser.isDemo()) {
            viewMessage = res.getString(R.string.demo_restarting_message);
        } else {
            viewMessage = res.getString(R.string.demo_starting_message);
        }
    } else {
        if (mOldUser.id == UserHandle.USER_SYSTEM) {
            viewMessage = mSwitchingFromSystemUserMessage;
        } else if (mNewUser.id == UserHandle.USER_SYSTEM) {
            viewMessage = mSwitchingToSystemUserMessage;
        }

        // If switchingFromSystemUserMessage or switchingToSystemUserMessage is null, fallback
        // to system message.
        if (viewMessage == null) {
            viewMessage = res.getString(R.string.user_switching_message, mNewUser.name);
        }
    }
    ((TextView) view.findViewById(R.id.message)).setText(viewMessage);
    setView(view);
}
 
源代码11 项目: android_9.0.0_r45   文件: MediaUpdateService.java
private void registerBroadcastReceiver() {
    BroadcastReceiver updateReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_SYSTEM)
                        != UserHandle.USER_SYSTEM) {
                    // Ignore broadcast for non system users. We don't want to update system
                    // service multiple times.
                    return;
                }
                switch (intent.getAction()) {
                    case Intent.ACTION_PACKAGE_REMOVED:
                        if (intent.getExtras().getBoolean(Intent.EXTRA_REPLACING)) {
                            // The existing package is updated. Will be handled with the
                            // following ACTION_PACKAGE_ADDED case.
                            return;
                        }
                        packageStateChanged();
                        break;
                    case Intent.ACTION_PACKAGE_CHANGED:
                        packageStateChanged();
                        break;
                    case Intent.ACTION_PACKAGE_ADDED:
                        packageStateChanged();
                        break;
                }
            }
    };
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_PACKAGE_ADDED);
    filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
    filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
    filter.addDataScheme("package");
    filter.addDataSchemeSpecificPart(MEDIA_UPDATE_PACKAGE_NAME, PatternMatcher.PATTERN_LITERAL);

    getContext().registerReceiverAsUser(updateReceiver, UserHandle.ALL, filter,
            null /* broadcast permission */, null /* handler */);
}
 
源代码12 项目: android_9.0.0_r45   文件: LockSettingsStrongAuth.java
public void requireStrongAuth(int strongAuthReason, int userId) {
    if (userId == UserHandle.USER_ALL || userId >= UserHandle.USER_SYSTEM) {
        mHandler.obtainMessage(MSG_REQUIRE_STRONG_AUTH, strongAuthReason,
                userId).sendToTarget();
    } else {
        throw new IllegalArgumentException(
                "userId must be an explicit user id or USER_ALL");
    }
}
 
源代码13 项目: Study_Android_Demo   文件: SettingsProviderTest.java
@Test
public void testSetAndGetGlobalViaFrontEndApiForNonSystemUser() throws Exception {
    final int secondaryUserId = getSecondaryUserId();
    if (secondaryUserId == UserHandle.USER_SYSTEM) {
        Log.w(LOG_TAG, "No secondary user. Skipping "
                + "testSetAndGetGlobalViaFrontEndApiForNonSystemUser");
        return;
    }
    performSetAndGetSettingTestViaFrontEndApi(SETTING_TYPE_GLOBAL, secondaryUserId);
}
 
private int runGetAppLink() throws RemoteException {
    int userId = UserHandle.USER_SYSTEM;

    String opt;
    while ((opt = getNextOption()) != null) {
        if (opt.equals("--user")) {
            userId = UserHandle.parseUserArg(getNextArgRequired());
        } else {
            getErrPrintWriter().println("Error: unknown option: " + opt);
            return 1;
        }
    }

    // Package name to act on; required
    final String pkg = getNextArg();
    if (pkg == null) {
        getErrPrintWriter().println("Error: no package specified.");
        return 1;
    }

    final PackageInfo info = mInterface.getPackageInfo(pkg, 0, userId);
    if (info == null) {
        getErrPrintWriter().println("Error: package " + pkg + " not found.");
        return 1;
    }

    if ((info.applicationInfo.privateFlags
            & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) == 0) {
        getErrPrintWriter().println("Error: package " + pkg + " does not handle web links.");
        return 1;
    }

    getOutPrintWriter().println(linkStateToString(
            mInterface.getIntentVerificationStatus(pkg, userId)));

    return 0;
}
 
源代码15 项目: android_9.0.0_r45   文件: UserManagerService.java
/**
 * Returns a UserInfo object with the name filled in, for Owner, or the original
 * if the name is already set.
 */
private UserInfo userWithName(UserInfo orig) {
    if (orig != null && orig.name == null && orig.id == UserHandle.USER_SYSTEM) {
        UserInfo withName = new UserInfo(orig);
        withName.name = getOwnerName();
        return withName;
    } else {
        return orig;
    }
}
 
源代码16 项目: android_9.0.0_r45   文件: ServiceWatcher.java
/**
 * Searches and binds to the best package, or do nothing if the best package
 * is already bound, unless force rebinding is requested.
 *
 * @param justCheckThisPackage Only consider this package, or consider all
 *            packages if it is {@code null}.
 * @param forceRebind Force a rebinding to the best package if it's already
 *            bound.
 * @returns {@code true} if a valid package was found to bind to.
 */
@GuardedBy("mLock")
private boolean bindBestPackageLocked(String justCheckThisPackage, boolean forceRebind) {
    Intent intent = new Intent(mAction);
    if (justCheckThisPackage != null) {
        intent.setPackage(justCheckThisPackage);
    }
    final List<ResolveInfo> rInfos = mPm.queryIntentServicesAsUser(intent,
            PackageManager.GET_META_DATA | PackageManager.MATCH_DEBUG_TRIAGED_MISSING,
            mCurrentUserId);
    int bestVersion = Integer.MIN_VALUE;
    ComponentName bestComponent = null;
    boolean bestIsMultiuser = false;
    if (rInfos != null) {
        for (ResolveInfo rInfo : rInfos) {
            final ComponentName component = rInfo.serviceInfo.getComponentName();
            final String packageName = component.getPackageName();

            // check signature
            try {
                PackageInfo pInfo;
                pInfo = mPm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES
                        | PackageManager.MATCH_DEBUG_TRIAGED_MISSING);
                if (!isSignatureMatch(pInfo.signatures)) {
                    Log.w(mTag, packageName + " resolves service " + mAction
                            + ", but has wrong signature, ignoring");
                    continue;
                }
            } catch (NameNotFoundException e) {
                Log.wtf(mTag, e);
                continue;
            }

            // check metadata
            int version = Integer.MIN_VALUE;
            boolean isMultiuser = false;
            if (rInfo.serviceInfo.metaData != null) {
                version = rInfo.serviceInfo.metaData.getInt(
                        EXTRA_SERVICE_VERSION, Integer.MIN_VALUE);
                isMultiuser = rInfo.serviceInfo.metaData.getBoolean(EXTRA_SERVICE_IS_MULTIUSER);
            }

            if (version > bestVersion) {
                bestVersion = version;
                bestComponent = component;
                bestIsMultiuser = isMultiuser;
            }
        }

        if (D) {
            Log.d(mTag, String.format("bindBestPackage for %s : %s found %d, %s", mAction,
                    (justCheckThisPackage == null ? ""
                            : "(" + justCheckThisPackage + ") "), rInfos.size(),
                    (bestComponent == null ? "no new best component"
                            : "new best component: " + bestComponent)));
        }
    } else {
        if (D) Log.d(mTag, "Unable to query intent services for action: " + mAction);
    }

    if (bestComponent == null) {
        Slog.w(mTag, "Odd, no component found for service " + mAction);
        unbindLocked();
        return false;
    }

    final int userId = bestIsMultiuser ? UserHandle.USER_SYSTEM : mCurrentUserId;
    final boolean alreadyBound = Objects.equals(bestComponent, mBoundComponent)
            && bestVersion == mBoundVersion && userId == mBoundUserId;
    if (forceRebind || !alreadyBound) {
        unbindLocked();
        bindToPackageLocked(bestComponent, bestVersion, userId);
    }
    return true;
}
 
public int runCreateUser() throws RemoteException {
    String name;
    int userId = -1;
    int flags = 0;
    String opt;
    while ((opt = getNextOption()) != null) {
        if ("--profileOf".equals(opt)) {
            userId = UserHandle.parseUserArg(getNextArgRequired());
        } else if ("--managed".equals(opt)) {
            flags |= UserInfo.FLAG_MANAGED_PROFILE;
        } else if ("--restricted".equals(opt)) {
            flags |= UserInfo.FLAG_RESTRICTED;
        } else if ("--ephemeral".equals(opt)) {
            flags |= UserInfo.FLAG_EPHEMERAL;
        } else if ("--guest".equals(opt)) {
            flags |= UserInfo.FLAG_GUEST;
        } else if ("--demo".equals(opt)) {
            flags |= UserInfo.FLAG_DEMO;
        } else {
            getErrPrintWriter().println("Error: unknown option " + opt);
            return 1;
        }
    }
    String arg = getNextArg();
    if (arg == null) {
        getErrPrintWriter().println("Error: no user name specified.");
        return 1;
    }
    name = arg;
    UserInfo info;
    IUserManager um = IUserManager.Stub.asInterface(
            ServiceManager.getService(Context.USER_SERVICE));
    IAccountManager accm = IAccountManager.Stub.asInterface(
            ServiceManager.getService(Context.ACCOUNT_SERVICE));
    if ((flags & UserInfo.FLAG_RESTRICTED) != 0) {
        // In non-split user mode, userId can only be SYSTEM
        int parentUserId = userId >= 0 ? userId : UserHandle.USER_SYSTEM;
        info = um.createRestrictedProfile(name, parentUserId);
        accm.addSharedAccountsFromParentUser(parentUserId, userId,
                (Process.myUid() == Process.ROOT_UID) ? "root" : "com.android.shell");
    } else if (userId < 0) {
        info = um.createUser(name, flags);
    } else {
        info = um.createProfileForUser(name, flags, userId, null);
    }

    if (info != null) {
        getOutPrintWriter().println("Success: created user id " + info.id);
        return 0;
    } else {
        getErrPrintWriter().println("Error: couldn't create User.");
        return 1;
    }
}
 
源代码18 项目: android_9.0.0_r45   文件: ZenModeHelper.java
public void onUserRemoved(int user) {
    if (user < UserHandle.USER_SYSTEM) return;
    if (DEBUG) Log.d(TAG, "onUserRemoved u=" + user);
    mConfigs.remove(user);
}
 
源代码19 项目: android_9.0.0_r45   文件: UserController.java
private void finishUserBoot(UserState uss, IIntentReceiver resultTo) {
    final int userId = uss.mHandle.getIdentifier();

    Slog.d(TAG, "Finishing user boot " + userId);
    synchronized (mLock) {
        // Bail if we ended up with a stale user
        if (mStartedUsers.get(userId) != uss) {
            return;
        }
    }

    // We always walk through all the user lifecycle states to send
    // consistent developer events. We step into RUNNING_LOCKED here,
    // but we might immediately step into RUNNING below if the user
    // storage is already unlocked.
    if (uss.setState(STATE_BOOTING, STATE_RUNNING_LOCKED)) {
        mInjector.getUserManagerInternal().setUserState(userId, uss.state);
        // Do not report secondary users, runtime restarts or first boot/upgrade
        if (userId == UserHandle.USER_SYSTEM
                && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {
            int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
            MetricsLogger.histogram(mInjector.getContext(),
                    "framework_locked_boot_completed", uptimeSeconds);
            final int MAX_UPTIME_SECONDS = 120;
            if (uptimeSeconds > MAX_UPTIME_SECONDS) {
                Slog.wtf("SystemServerTiming",
                        "finishUserBoot took too long. uptimeSeconds=" + uptimeSeconds);
            }
        }

        mHandler.sendMessage(mHandler.obtainMessage(REPORT_LOCKED_BOOT_COMPLETE_MSG,
                userId, 0));
        Intent intent = new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED, null);
        intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
        intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT
                | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
        mInjector.broadcastIntent(intent, null, resultTo, 0, null, null,
                new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED},
                AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, userId);
    }

    // We need to delay unlocking managed profiles until the parent user
    // is also unlocked.
    if (mInjector.getUserManager().isManagedProfile(userId)) {
        final UserInfo parent = mInjector.getUserManager().getProfileParent(userId);
        if (parent != null
                && isUserRunning(parent.id, ActivityManager.FLAG_AND_UNLOCKED)) {
            Slog.d(TAG, "User " + userId + " (parent " + parent.id
                    + "): attempting unlock because parent is unlocked");
            maybeUnlockUser(userId);
        } else {
            String parentId = (parent == null) ? "<null>" : String.valueOf(parent.id);
            Slog.d(TAG, "User " + userId + " (parent " + parentId
                    + "): delaying unlock because parent is locked");
        }
    } else {
        maybeUnlockUser(userId);
    }
}
 
private int runSetAppLink() throws RemoteException {
    int userId = UserHandle.USER_SYSTEM;

    String opt;
    while ((opt = getNextOption()) != null) {
        if (opt.equals("--user")) {
            userId = UserHandle.parseUserArg(getNextArgRequired());
        } else {
            getErrPrintWriter().println("Error: unknown option: " + opt);
            return 1;
        }
    }

    // Package name to act on; required
    final String pkg = getNextArg();
    if (pkg == null) {
        getErrPrintWriter().println("Error: no package specified.");
        return 1;
    }

    // State to apply; {always|ask|never|undefined}, required
    final String modeString = getNextArg();
    if (modeString == null) {
        getErrPrintWriter().println("Error: no app link state specified.");
        return 1;
    }

    final int newMode;
    switch (modeString.toLowerCase()) {
        case "undefined":
            newMode = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
            break;

        case "always":
            newMode = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
            break;

        case "ask":
            newMode = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
            break;

        case "always-ask":
            newMode = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
            break;

        case "never":
            newMode = INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
            break;

        default:
            getErrPrintWriter().println("Error: unknown app link state '" + modeString + "'");
            return 1;
    }

    final PackageInfo info = mInterface.getPackageInfo(pkg, 0, userId);
    if (info == null) {
        getErrPrintWriter().println("Error: package " + pkg + " not found.");
        return 1;
    }

    if ((info.applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) == 0) {
        getErrPrintWriter().println("Error: package " + pkg + " does not handle web links.");
        return 1;
    }

    if (!mInterface.updateIntentVerificationStatus(pkg, newMode, userId)) {
        getErrPrintWriter().println("Error: unable to update app link status for " + pkg);
        return 1;
    }

    return 0;
}