Merge "Add VPN app into power saver whitelist for a while to start its service"
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
/**
|
/**
|
||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user