Merge "Turn on foregroundServiceType camera and microphone feature in permissive mode." into rvc-dev am: 4723328cee
Change-Id: I17aaf2285792a1479cc1dcd6d90da4031009b504
This commit is contained in:
@@ -137,6 +137,10 @@ public final class ActiveServices {
|
|||||||
|
|
||||||
private static final boolean SHOW_DUNGEON_NOTIFICATION = false;
|
private static final boolean SHOW_DUNGEON_NOTIFICATION = false;
|
||||||
|
|
||||||
|
//TODO: remove this when development is done.
|
||||||
|
private static final int DEBUG_FGS_ALLOW_WHILE_IN_USE = 0;
|
||||||
|
private static final int DEBUG_FGS_ENFORCE_TYPE = 1;
|
||||||
|
|
||||||
// How long we wait for a service to finish executing.
|
// How long we wait for a service to finish executing.
|
||||||
static final int SERVICE_TIMEOUT = 20*1000;
|
static final int SERVICE_TIMEOUT = 20*1000;
|
||||||
|
|
||||||
@@ -4915,10 +4919,20 @@ public final class ActiveServices {
|
|||||||
if (!r.isForeground) {
|
if (!r.isForeground) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!r.mAllowWhileInUsePermissionInFgs
|
if (mode == DEBUG_FGS_ALLOW_WHILE_IN_USE) {
|
||||||
&& r.mInfoDenyWhileInUsePermissionInFgs != null) {
|
if (!r.mAllowWhileInUsePermissionInFgs
|
||||||
final String msg = r.mInfoDenyWhileInUsePermissionInFgs
|
&& r.mInfoDenyWhileInUsePermissionInFgs != null) {
|
||||||
+ " affected while-in-use permission:"
|
final String msg = r.mInfoDenyWhileInUsePermissionInFgs
|
||||||
|
+ " affected while-in-use permission:"
|
||||||
|
+ AppOpsManager.opToPublicName(op);
|
||||||
|
Slog.wtf(TAG, msg);
|
||||||
|
}
|
||||||
|
} else if (mode == DEBUG_FGS_ENFORCE_TYPE) {
|
||||||
|
final String msg =
|
||||||
|
"FGS Missing foregroundServiceType in manifest file [callingPackage: "
|
||||||
|
+ r.mRecentCallingPackage
|
||||||
|
+ "; intent:" + r.intent.getIntent()
|
||||||
|
+ "] affected while-in-use permission:"
|
||||||
+ AppOpsManager.opToPublicName(op);
|
+ AppOpsManager.opToPublicName(op);
|
||||||
Slog.wtf(TAG, msg);
|
Slog.wtf(TAG, msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ import android.app.ActivityManager;
|
|||||||
import android.app.ApplicationExitInfo;
|
import android.app.ApplicationExitInfo;
|
||||||
import android.app.usage.UsageEvents;
|
import android.app.usage.UsageEvents;
|
||||||
import android.compat.annotation.ChangeId;
|
import android.compat.annotation.ChangeId;
|
||||||
import android.compat.annotation.Disabled;
|
|
||||||
import android.compat.annotation.EnabledAfter;
|
import android.compat.annotation.EnabledAfter;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ServiceInfo;
|
import android.content.pm.ServiceInfo;
|
||||||
@@ -149,12 +148,13 @@ public final class OomAdjuster {
|
|||||||
* capabilities.
|
* capabilities.
|
||||||
*/
|
*/
|
||||||
@ChangeId
|
@ChangeId
|
||||||
//TODO: change to @EnabledAfter when enforcing the feature.
|
@EnabledAfter(targetSdkVersion=android.os.Build.VERSION_CODES.Q)
|
||||||
@Disabled
|
|
||||||
static final long CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID = 136219221L;
|
static final long CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID = 136219221L;
|
||||||
|
|
||||||
//TODO: remove this when development is done.
|
//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_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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For some direct access we need to power manager.
|
* For some direct access we need to power manager.
|
||||||
@@ -1513,10 +1513,12 @@ public final class OomAdjuster {
|
|||||||
if (enabled) {
|
if (enabled) {
|
||||||
capabilityFromFGS |=
|
capabilityFromFGS |=
|
||||||
(fgsType & FOREGROUND_SERVICE_TYPE_CAMERA)
|
(fgsType & FOREGROUND_SERVICE_TYPE_CAMERA)
|
||||||
!= 0 ? PROCESS_CAPABILITY_FOREGROUND_CAMERA : 0;
|
!= 0 ? PROCESS_CAPABILITY_FOREGROUND_CAMERA
|
||||||
|
: TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA;
|
||||||
capabilityFromFGS |=
|
capabilityFromFGS |=
|
||||||
(fgsType & FOREGROUND_SERVICE_TYPE_MICROPHONE)
|
(fgsType & FOREGROUND_SERVICE_TYPE_MICROPHONE)
|
||||||
!= 0 ? PROCESS_CAPABILITY_FOREGROUND_MICROPHONE : 0;
|
!= 0 ? PROCESS_CAPABILITY_FOREGROUND_MICROPHONE
|
||||||
|
: TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
|
||||||
} else {
|
} else {
|
||||||
capabilityFromFGS |= PROCESS_CAPABILITY_FOREGROUND_CAMERA
|
capabilityFromFGS |= PROCESS_CAPABILITY_FOREGROUND_CAMERA
|
||||||
| PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
|
| PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
|
||||||
|
|||||||
@@ -249,6 +249,11 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
|
|
||||||
//TODO: remove this when development is done.
|
//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_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;
|
||||||
|
|
||||||
|
|
||||||
final Context mContext;
|
final Context mContext;
|
||||||
final AtomicFile mFile;
|
final AtomicFile mFile;
|
||||||
@@ -551,7 +556,7 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
// The FGS has the location capability, but due to FGS BG start
|
// The FGS has the location capability, but due to FGS BG start
|
||||||
// restriction it lost the capability, use temp location capability
|
// restriction it lost the capability, use temp location capability
|
||||||
// to mark this case.
|
// to mark this case.
|
||||||
maybeShowWhileInUseDebugToast(op, mode);
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE);
|
||||||
return MODE_IGNORED;
|
return MODE_IGNORED;
|
||||||
} else {
|
} else {
|
||||||
return MODE_IGNORED;
|
return MODE_IGNORED;
|
||||||
@@ -559,15 +564,25 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
case OP_CAMERA:
|
case OP_CAMERA:
|
||||||
if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
|
if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
|
||||||
return MODE_ALLOWED;
|
return MODE_ALLOWED;
|
||||||
|
} else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA)
|
||||||
|
!= 0) {
|
||||||
|
// CHANGE TO MODE_IGNORED when enforce this feature.
|
||||||
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE);
|
||||||
|
return MODE_ALLOWED;
|
||||||
} else {
|
} else {
|
||||||
maybeShowWhileInUseDebugToast(op, mode);
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE);
|
||||||
return MODE_IGNORED;
|
return MODE_IGNORED;
|
||||||
}
|
}
|
||||||
case OP_RECORD_AUDIO:
|
case OP_RECORD_AUDIO:
|
||||||
if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) {
|
if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) {
|
||||||
return MODE_ALLOWED;
|
return MODE_ALLOWED;
|
||||||
|
} else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE)
|
||||||
|
!= 0) {
|
||||||
|
// CHANGE TO MODE_IGNORED when enforce this feature.
|
||||||
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE);
|
||||||
|
return MODE_ALLOWED;
|
||||||
} else {
|
} else {
|
||||||
maybeShowWhileInUseDebugToast(op, mode);
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE);
|
||||||
return MODE_IGNORED;
|
return MODE_IGNORED;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -582,15 +597,24 @@ public class AppOpsService extends IAppOpsService.Stub {
|
|||||||
case OP_CAMERA:
|
case OP_CAMERA:
|
||||||
if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
|
if ((capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
|
||||||
return MODE_ALLOWED;
|
return MODE_ALLOWED;
|
||||||
|
} else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
|
||||||
|
// CHANGE TO MODE_IGNORED when enforce this feature.
|
||||||
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE);
|
||||||
|
return MODE_ALLOWED;
|
||||||
} else {
|
} else {
|
||||||
maybeShowWhileInUseDebugToast(op, mode);
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE);
|
||||||
return MODE_IGNORED;
|
return MODE_IGNORED;
|
||||||
}
|
}
|
||||||
case OP_RECORD_AUDIO:
|
case OP_RECORD_AUDIO:
|
||||||
if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) {
|
if ((capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) {
|
||||||
return MODE_ALLOWED;
|
return MODE_ALLOWED;
|
||||||
|
} else if ((capability & TEMP_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE)
|
||||||
|
!= 0) {
|
||||||
|
// CHANGE TO MODE_IGNORED when enforce this feature.
|
||||||
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ENFORCE_TYPE);
|
||||||
|
return MODE_ALLOWED;
|
||||||
} else {
|
} else {
|
||||||
maybeShowWhileInUseDebugToast(op, mode);
|
maybeShowWhileInUseDebugToast(op, DEBUG_FGS_ALLOW_WHILE_IN_USE);
|
||||||
return MODE_IGNORED;
|
return MODE_IGNORED;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|||||||
Reference in New Issue
Block a user