Loading services/core/java/com/android/server/am/ActiveServices.java +2 −1 Original line number Diff line number Diff line Loading @@ -4939,7 +4939,8 @@ public final class ActiveServices { + r.mRecentCallingPackage + "; intent:" + r.intent.getIntent() + "] affected while-in-use permission:" + AppOpsManager.opToPublicName(op); + AppOpsManager.opToPublicName(op) + "; targetSdkVersion:" + r.appInfo.targetSdkVersion; Slog.wtf(TAG, msg); } } Loading services/core/java/com/android/server/am/OomAdjuster.java +13 −9 Original line number Diff line number Diff line Loading @@ -152,9 +152,13 @@ public final class OomAdjuster { static final long CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID = 136219221L; // TODO: remove this when development is done. private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1 << 31; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA = 1 << 30; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 29; // These are debug flags used between OomAdjuster and AppOpsService to detect and report absence // of the real flags. public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q = 1 << 27; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q = 1 << 28; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 29; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA = 1 << 30; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1 << 31; /** * For some direct access we need to power manager. Loading Loading @@ -1501,7 +1505,7 @@ public final class OomAdjuster { //TODO: remove this block when development is done. capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_LOCATION) != 0 ? TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION : 0; != 0 ? DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION : 0; } if (s.mAllowWhileInUsePermissionInFgs) { boolean enabled = false; Loading @@ -1514,22 +1518,22 @@ public final class OomAdjuster { capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_CAMERA) != 0 ? PROCESS_CAPABILITY_FOREGROUND_CAMERA : TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_MICROPHONE) != 0 ? PROCESS_CAPABILITY_FOREGROUND_MICROPHONE : TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; } else { // Remove fgsType check and assign PROCESS_CAPABILITY_FOREGROUND_CAMERA // and MICROPHONE when finish debugging. capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_CAMERA) != 0 ? PROCESS_CAPABILITY_FOREGROUND_CAMERA : TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_MICROPHONE) != 0 ? PROCESS_CAPABILITY_FOREGROUND_MICROPHONE : TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; } } } Loading services/core/java/com/android/server/appop/AppOpsService.java +27 −13 Original line number Diff line number Diff line Loading @@ -66,6 +66,11 @@ import static android.content.Intent.EXTRA_REPLACING; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static java.lang.Long.max; Loading Loading @@ -248,9 +253,6 @@ public class AppOpsService extends IAppOpsService.Stub { private static final int RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS = 300000; //TODO: remove this when development is done. private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1 << 31; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA = 1 << 30; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 29; private static final int DEBUG_FGS_ALLOW_WHILE_IN_USE = 0; private static final int DEBUG_FGS_ENFORCE_TYPE = 1; Loading Loading @@ -552,7 +554,7 @@ public class AppOpsService extends IAppOpsService.Stub { if ((capability & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0) { & DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0) { // The FGS has the location capability, but due to FGS BG start // restriction it lost the capability, use temp location capability // to mark this case. Loading @@ -564,11 +566,14 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_CAMERA: if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA) } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading @@ -576,11 +581,14 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_RECORD_AUDIO: if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading @@ -597,10 +605,13 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_CAMERA: if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading @@ -608,11 +619,14 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_RECORD_AUDIO: if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading Loading
services/core/java/com/android/server/am/ActiveServices.java +2 −1 Original line number Diff line number Diff line Loading @@ -4939,7 +4939,8 @@ public final class ActiveServices { + r.mRecentCallingPackage + "; intent:" + r.intent.getIntent() + "] affected while-in-use permission:" + AppOpsManager.opToPublicName(op); + AppOpsManager.opToPublicName(op) + "; targetSdkVersion:" + r.appInfo.targetSdkVersion; Slog.wtf(TAG, msg); } } Loading
services/core/java/com/android/server/am/OomAdjuster.java +13 −9 Original line number Diff line number Diff line Loading @@ -152,9 +152,13 @@ public final class OomAdjuster { static final long CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID = 136219221L; // TODO: remove this when development is done. private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1 << 31; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA = 1 << 30; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 29; // These are debug flags used between OomAdjuster and AppOpsService to detect and report absence // of the real flags. public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q = 1 << 27; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q = 1 << 28; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 29; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA = 1 << 30; public static final int DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1 << 31; /** * For some direct access we need to power manager. Loading Loading @@ -1501,7 +1505,7 @@ public final class OomAdjuster { //TODO: remove this block when development is done. capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_LOCATION) != 0 ? TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION : 0; != 0 ? DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION : 0; } if (s.mAllowWhileInUsePermissionInFgs) { boolean enabled = false; Loading @@ -1514,22 +1518,22 @@ public final class OomAdjuster { capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_CAMERA) != 0 ? PROCESS_CAPABILITY_FOREGROUND_CAMERA : TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_MICROPHONE) != 0 ? PROCESS_CAPABILITY_FOREGROUND_MICROPHONE : TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; } else { // Remove fgsType check and assign PROCESS_CAPABILITY_FOREGROUND_CAMERA // and MICROPHONE when finish debugging. capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_CAMERA) != 0 ? PROCESS_CAPABILITY_FOREGROUND_CAMERA : TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; capabilityFromFGS |= (fgsType & FOREGROUND_SERVICE_TYPE_MICROPHONE) != 0 ? PROCESS_CAPABILITY_FOREGROUND_MICROPHONE : TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; : DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; } } } Loading
services/core/java/com/android/server/appop/AppOpsService.java +27 −13 Original line number Diff line number Diff line Loading @@ -66,6 +66,11 @@ import static android.content.Intent.EXTRA_REPLACING; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static com.android.server.am.OomAdjuster.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static java.lang.Long.max; Loading Loading @@ -248,9 +253,6 @@ public class AppOpsService extends IAppOpsService.Stub { private static final int RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS = 300000; //TODO: remove this when development is done. private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1 << 31; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA = 1 << 30; private static final int TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 29; private static final int DEBUG_FGS_ALLOW_WHILE_IN_USE = 0; private static final int DEBUG_FGS_ENFORCE_TYPE = 1; Loading Loading @@ -552,7 +554,7 @@ public class AppOpsService extends IAppOpsService.Stub { if ((capability & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0) { & DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0) { // The FGS has the location capability, but due to FGS BG start // restriction it lost the capability, use temp location capability // to mark this case. Loading @@ -564,11 +566,14 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_CAMERA: if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA) } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading @@ -576,11 +581,14 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_RECORD_AUDIO: if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading @@ -597,10 +605,13 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_CAMERA: if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading @@ -608,11 +619,14 @@ public class AppOpsService extends IAppOpsService.Stub { case OP_RECORD_AUDIO: if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { return MODE_ALLOWED; } else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q) != 0) { // CHANGE TO MODE_IGNORED when enforce this feature. maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_ALLOWED; } else if ((capability & DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE); return MODE_IGNORED; } else { maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE); return MODE_IGNORED; Loading