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

Commit 799c6528 authored by Mayank Garg's avatar Mayank Garg Committed by Automerger Merge Worker
Browse files

Merge "Added check for user info is not null" am: 1206d8d7 am: 97efff46...

Merge "Added check for user info is not null" am: 1206d8d7 am: 97efff46 am: 61b94156 am: 98dd375c

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2195236



Change-Id: Ieacbb35e522b35353c96de1f162a8a71388b4b04
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 30a039ae 98dd375c
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -3920,6 +3920,12 @@ public class Intent implements Parcelable, Cloneable {
     * that has been started.  This is sent as a foreground
     * broadcast, since it is part of a visible user interaction; be as quick
     * as possible when handling it.
     *
     * <p>
     * <b>Note:</b> The user's actual state might have changed by the time the broadcast is
     * received. For example, the user could have been removed, started or stopped already,
     * regardless of which broadcast you receive. Because of that, receivers should always check
     * the current state of the user.
     * @hide
     */
    public static final String ACTION_USER_STARTED =
@@ -3937,6 +3943,12 @@ public class Intent implements Parcelable, Cloneable {
     * {@link #ACTION_USER_STOPPING}.  It is <b>not</b> generally safe to use with
     * other user state broadcasts since those are foreground broadcasts so can
     * execute in a different order.
     *
     * <p>
     * <b>Note:</b> The user's actual state might have changed by the time the broadcast is
     * received. For example, the user could have been removed, started or stopped already,
     * regardless of which broadcast you receive. Because of that, receivers should always check
     * the current state of the user.
     * @hide
     */
    public static final String ACTION_USER_STARTING =
@@ -3955,6 +3967,11 @@ public class Intent implements Parcelable, Cloneable {
     * {@link #ACTION_USER_STARTING}.  It is <b>not</b> generally safe to use with
     * other user state broadcasts since those are foreground broadcasts so can
     * execute in a different order.
     * <p>
     * <b>Note:</b> The user's actual state might have changed by the time the broadcast is
     * received. For example, the user could have been removed, started or stopped already,
     * regardless of which broadcast you receive. Because of that, receivers should always check
     * the current state of the user.
     * @hide
     */
    public static final String ACTION_USER_STOPPING =
@@ -3967,6 +3984,12 @@ public class Intent implements Parcelable, Cloneable {
     * specific package.  This is only sent to registered receivers, not manifest
     * receivers.  It is sent to all running users <em>except</em> the one that
     * has just been stopped (which is no longer running).
     *
     * <p>
     * <b>Note:</b> The user's actual state might have changed by the time the broadcast is
     * received. For example, the user could have been removed, started or stopped already,
     * regardless of which broadcast you receive. Because of that, receivers should always check
     * the current state of the user.
     * @hide
     */
    @TestApi
@@ -3999,6 +4022,12 @@ public class Intent implements Parcelable, Cloneable {
     * It is sent to all running users.
     * You must hold
     * {@link android.Manifest.permission#MANAGE_USERS} to receive this broadcast.
     *
     * <p>
     * <b>Note:</b> The user's actual state might have changed by the time the broadcast is
     * received. For example, the user could have been removed, started or stopped already,
     * regardless of which broadcast you receive. Because of that, receivers should always check
     * the current state of the user.
     * @hide
     */
    @SystemApi
@@ -4009,6 +4038,12 @@ public class Intent implements Parcelable, Cloneable {
     * Broadcast Action: Sent when the credential-encrypted private storage has
     * become unlocked for the target user. This is only sent to registered
     * receivers, not manifest receivers.
     *
     * <p>
     * <b>Note:</b> The user's actual state might have changed by the time the broadcast is
     * received. For example, the user could have been removed, started or stopped already,
     * regardless of which broadcast you receive. Because of that, receivers should always check
     * the current state of the user.
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_USER_UNLOCKED = "android.intent.action.USER_UNLOCKED";
+16 −2
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.net.ConnectivityManager;
import android.net.INetd;
import android.net.IVpnManager;
@@ -775,6 +776,12 @@ public class VpnManagerService extends IVpnManager.Stub {
    };

    private void onUserStarted(int userId) {
        UserInfo user = mUserManager.getUserInfo(userId);
        if (user == null) {
            logw("Started user doesn't exist. UserId: " + userId);
            return;
        }

        synchronized (mVpns) {
            Vpn userVpn = mVpns.get(userId);
            if (userVpn != null) {
@@ -783,7 +790,8 @@ public class VpnManagerService extends IVpnManager.Stub {
            }
            userVpn = mDeps.createVpn(mHandler.getLooper(), mContext, mNMS, mNetd, userId);
            mVpns.put(userId, userVpn);
            if (mUserManager.getUserInfo(userId).isPrimary() && isLockdownVpnEnabled()) {

            if (user.isPrimary() && isLockdownVpnEnabled()) {
                updateLockdownVpn();
            }
        }
@@ -898,9 +906,15 @@ public class VpnManagerService extends IVpnManager.Stub {
    }

    private void onUserUnlocked(int userId) {
        UserInfo user = mUserManager.getUserInfo(userId);
        if (user == null) {
            logw("Unlocked user doesn't exist. UserId: " + userId);
            return;
        }

        synchronized (mVpns) {
            // User present may be sent because of an unlock, which might mean an unlocked keystore.
            if (mUserManager.getUserInfo(userId).isPrimary() && isLockdownVpnEnabled()) {
            if (user.isPrimary() && isLockdownVpnEnabled()) {
                updateLockdownVpn();
            } else {
                startAlwaysOnVpn(userId);