Loading core/java/android/net/VpnManager.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -100,6 +100,12 @@ public class VpnManager { /** /** * Action sent in {@link android.content.Intent}s to VpnManager clients when an event occurred. * Action sent in {@link android.content.Intent}s to VpnManager clients when an event occurred. * * * <p>If the provisioning application declares a service handling this intent action, but is not * already running, it will be started. Upon starting, the application is granted a short grace * period to run in the background even while the device is idle to handle any potential * failures. Applications requiring long-running actions triggered by one of these events should * declare a foreground service to prevent being killed once the grace period expires. * * This action will have a category of either {@link #CATEGORY_EVENT_IKE_ERROR}, * This action will have a category of either {@link #CATEGORY_EVENT_IKE_ERROR}, * {@link #CATEGORY_EVENT_NETWORK_ERROR}, or {@link #CATEGORY_EVENT_DEACTIVATED_BY_USER}, * {@link #CATEGORY_EVENT_NETWORK_ERROR}, or {@link #CATEGORY_EVENT_DEACTIVATED_BY_USER}, * that the app can use to filter events it's interested in reacting to. * that the app can use to filter events it's interested in reacting to. Loading services/core/java/com/android/server/connectivity/Vpn.java +12 −0 Original line number Original line Diff line number Diff line Loading @@ -192,6 +192,10 @@ public class Vpn { // the device idle allowlist during service launch and VPN bootstrap. // the device idle allowlist during service launch and VPN bootstrap. private static final long VPN_LAUNCH_IDLE_ALLOWLIST_DURATION_MS = 60 * 1000; private static final long VPN_LAUNCH_IDLE_ALLOWLIST_DURATION_MS = 60 * 1000; // Length of time (in milliseconds) that an app registered for VpnManager events is placed on // the device idle allowlist each time the a VpnManager event is fired. private static final long VPN_MANAGER_EVENT_ALLOWLIST_DURATION_MS = 30 * 1000; private static final String LOCKDOWN_ALLOWLIST_SETTING_NAME = private static final String LOCKDOWN_ALLOWLIST_SETTING_NAME = Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN_WHITELIST; Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN_WHITELIST; /** /** Loading Loading @@ -720,6 +724,14 @@ public class Vpn { intent.putExtra(VpnManager.EXTRA_ERROR_CLASS, errorClass); intent.putExtra(VpnManager.EXTRA_ERROR_CLASS, errorClass); intent.putExtra(VpnManager.EXTRA_ERROR_CODE, errorCode); intent.putExtra(VpnManager.EXTRA_ERROR_CODE, errorCode); } } // Allow VpnManager app to temporarily run background services to handle this error. // If an app requires anything beyond this grace period, they MUST either declare // themselves as a foreground service, or schedule a job/workitem. DeviceIdleInternal idleController = mDeps.getDeviceIdleInternal(); idleController.addPowerSaveTempWhitelistApp(Process.myUid(), packageName, VPN_MANAGER_EVENT_ALLOWLIST_DURATION_MS, mUserId, false, REASON_VPN, "VpnManager event"); try { try { return mUserIdContext.startService(intent) != null; return mUserIdContext.startService(intent) != null; } catch (RuntimeException e) { } catch (RuntimeException e) { Loading Loading
core/java/android/net/VpnManager.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -100,6 +100,12 @@ public class VpnManager { /** /** * Action sent in {@link android.content.Intent}s to VpnManager clients when an event occurred. * Action sent in {@link android.content.Intent}s to VpnManager clients when an event occurred. * * * <p>If the provisioning application declares a service handling this intent action, but is not * already running, it will be started. Upon starting, the application is granted a short grace * period to run in the background even while the device is idle to handle any potential * failures. Applications requiring long-running actions triggered by one of these events should * declare a foreground service to prevent being killed once the grace period expires. * * This action will have a category of either {@link #CATEGORY_EVENT_IKE_ERROR}, * This action will have a category of either {@link #CATEGORY_EVENT_IKE_ERROR}, * {@link #CATEGORY_EVENT_NETWORK_ERROR}, or {@link #CATEGORY_EVENT_DEACTIVATED_BY_USER}, * {@link #CATEGORY_EVENT_NETWORK_ERROR}, or {@link #CATEGORY_EVENT_DEACTIVATED_BY_USER}, * that the app can use to filter events it's interested in reacting to. * that the app can use to filter events it's interested in reacting to. Loading
services/core/java/com/android/server/connectivity/Vpn.java +12 −0 Original line number Original line Diff line number Diff line Loading @@ -192,6 +192,10 @@ public class Vpn { // the device idle allowlist during service launch and VPN bootstrap. // the device idle allowlist during service launch and VPN bootstrap. private static final long VPN_LAUNCH_IDLE_ALLOWLIST_DURATION_MS = 60 * 1000; private static final long VPN_LAUNCH_IDLE_ALLOWLIST_DURATION_MS = 60 * 1000; // Length of time (in milliseconds) that an app registered for VpnManager events is placed on // the device idle allowlist each time the a VpnManager event is fired. private static final long VPN_MANAGER_EVENT_ALLOWLIST_DURATION_MS = 30 * 1000; private static final String LOCKDOWN_ALLOWLIST_SETTING_NAME = private static final String LOCKDOWN_ALLOWLIST_SETTING_NAME = Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN_WHITELIST; Settings.Secure.ALWAYS_ON_VPN_LOCKDOWN_WHITELIST; /** /** Loading Loading @@ -720,6 +724,14 @@ public class Vpn { intent.putExtra(VpnManager.EXTRA_ERROR_CLASS, errorClass); intent.putExtra(VpnManager.EXTRA_ERROR_CLASS, errorClass); intent.putExtra(VpnManager.EXTRA_ERROR_CODE, errorCode); intent.putExtra(VpnManager.EXTRA_ERROR_CODE, errorCode); } } // Allow VpnManager app to temporarily run background services to handle this error. // If an app requires anything beyond this grace period, they MUST either declare // themselves as a foreground service, or schedule a job/workitem. DeviceIdleInternal idleController = mDeps.getDeviceIdleInternal(); idleController.addPowerSaveTempWhitelistApp(Process.myUid(), packageName, VPN_MANAGER_EVENT_ALLOWLIST_DURATION_MS, mUserId, false, REASON_VPN, "VpnManager event"); try { try { return mUserIdContext.startService(intent) != null; return mUserIdContext.startService(intent) != null; } catch (RuntimeException e) { } catch (RuntimeException e) { Loading