Loading core/java/android/content/Intent.java +35 −0 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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 = Loading @@ -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 = Loading @@ -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 Loading Loading @@ -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 Loading @@ -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"; Loading services/core/java/com/android/server/VpnManagerService.java +16 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -771,6 +772,12 @@ public class VpnManagerService extends IVpnManager.Stub { @VisibleForTesting 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) { Loading @@ -779,7 +786,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(); } } Loading Loading @@ -896,9 +904,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); Loading Loading
core/java/android/content/Intent.java +35 −0 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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 = Loading @@ -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 = Loading @@ -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 Loading Loading @@ -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 Loading @@ -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"; Loading
services/core/java/com/android/server/VpnManagerService.java +16 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -771,6 +772,12 @@ public class VpnManagerService extends IVpnManager.Stub { @VisibleForTesting 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) { Loading @@ -779,7 +786,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(); } } Loading Loading @@ -896,9 +904,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); Loading