summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2021-06-30 03:03:32 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-06-30 03:03:32 +0000
commit12ded20343075f80ea375abf459bc9d382e11800 (patch)
treea315a36e6a3d4372d13d04a0e8c7cd6de42c468f
parented6a76796f4047845be3baf9c58cb1b1f12c9faf (diff)
parent20a8ef3c7f4862a2033015c2827380579bf3dec7 (diff)
Merge "Exempt default_input_method from BG-FGS-start restriction." into sc-dev
-rw-r--r--apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java5
-rw-r--r--services/core/java/com/android/server/am/ActiveServices.java15
2 files changed, 20 insertions, 0 deletions
diff --git a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
index 42e953b72a69..a1a46afcffe6 100644
--- a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
+++ b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
@@ -190,6 +190,8 @@ public class PowerExemptionManager {
* @hide
*/
public static final int REASON_TEMP_ALLOWED_WHILE_IN_USE = 70;
+ /** @hide */
+ public static final int REASON_CURRENT_INPUT_METHOD = 71;
/* BG-FGS-launch is allowed by temp-allow-list or system-allow-list.
Reason code for temp and system allow list starts here.
@@ -381,6 +383,7 @@ public class PowerExemptionManager {
REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD,
REASON_OP_ACTIVATE_VPN,
REASON_OP_ACTIVATE_PLATFORM_VPN,
+ REASON_CURRENT_INPUT_METHOD,
REASON_TEMP_ALLOWED_WHILE_IN_USE,
// temp and system allow list reasons.
REASON_GEOFENCING,
@@ -649,6 +652,8 @@ public class PowerExemptionManager {
return "OP_ACTIVATE_VPN";
case REASON_OP_ACTIVATE_PLATFORM_VPN:
return "OP_ACTIVATE_PLATFORM_VPN";
+ case REASON_CURRENT_INPUT_METHOD:
+ return "CURRENT_INPUT_METHOD";
case REASON_TEMP_ALLOWED_WHILE_IN_USE:
return "TEMP_ALLOWED_WHILE_IN_USE";
case REASON_GEOFENCING:
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 58a1ead3ed1d..875ef377f442 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -36,6 +36,7 @@ import static android.os.PowerExemptionManager.REASON_DENIED;
import static android.os.PowerExemptionManager.REASON_DEVICE_DEMO_MODE;
import static android.os.PowerExemptionManager.REASON_DEVICE_OWNER;
import static android.os.PowerExemptionManager.REASON_FGS_BINDING;
+import static android.os.PowerExemptionManager.REASON_CURRENT_INPUT_METHOD;
import static android.os.PowerExemptionManager.REASON_INSTR_BACKGROUND_ACTIVITY_PERMISSION;
import static android.os.PowerExemptionManager.REASON_INSTR_BACKGROUND_FGS_PERMISSION;
import static android.os.PowerExemptionManager.REASON_OPT_OUT_REQUESTED;
@@ -6162,6 +6163,20 @@ public final class ActiveServices {
ret = REASON_OP_ACTIVATE_PLATFORM_VPN;
}
}
+
+ if (ret == REASON_DENIED) {
+ final String inputMethod =
+ Settings.Secure.getStringForUser(mAm.mContext.getContentResolver(),
+ Settings.Secure.DEFAULT_INPUT_METHOD,
+ UserHandle.getUserId(callingUid));
+ if (inputMethod != null) {
+ final ComponentName cn = ComponentName.unflattenFromString(inputMethod);
+ if (cn != null && cn.getPackageName().equals(callingPackage)) {
+ ret = REASON_CURRENT_INPUT_METHOD;
+ }
+ }
+ }
+
if (ret == REASON_DENIED) {
if (mAm.mConstants.mFgsAllowOptOut
&& targetService != null