Merge "Show mic/cam enable dialog for IME" into sc-dev am: 1ebeff8939
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15110105 Change-Id: Ia0a3671ebbdce61c87b79649f1ac396f9e8cc95e
This commit is contained in:
@@ -19,6 +19,7 @@ package android.app;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.UserIdInt;
|
import android.annotation.UserIdInt;
|
||||||
|
import android.app.ActivityManager.ProcessCapability;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.IIntentReceiver;
|
import android.content.IIntentReceiver;
|
||||||
import android.content.IIntentSender;
|
import android.content.IIntentSender;
|
||||||
@@ -634,4 +635,9 @@ public abstract class ActivityManagerInternal {
|
|||||||
* Return the temp allowlist type when server push messaging is over the quota.
|
* Return the temp allowlist type when server push messaging is over the quota.
|
||||||
*/
|
*/
|
||||||
public abstract @TempAllowListType int getPushMessagingOverQuotaBehavior();
|
public abstract @TempAllowListType int getPushMessagingOverQuotaBehavior();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the capability of the given uid
|
||||||
|
*/
|
||||||
|
public abstract @ProcessCapability int getUidCapability(int uid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
package com.android.server;
|
package com.android.server;
|
||||||
|
|
||||||
import static android.Manifest.permission.MANAGE_SENSOR_PRIVACY;
|
import static android.Manifest.permission.MANAGE_SENSOR_PRIVACY;
|
||||||
|
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA;
|
||||||
|
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
|
||||||
import static android.app.ActivityManager.RunningServiceInfo;
|
import static android.app.ActivityManager.RunningServiceInfo;
|
||||||
import static android.app.ActivityManager.RunningTaskInfo;
|
import static android.app.ActivityManager.RunningTaskInfo;
|
||||||
import static android.app.ActivityManager.getCurrentUser;
|
import static android.app.ActivityManager.getCurrentUser;
|
||||||
@@ -41,6 +43,7 @@ import android.annotation.NonNull;
|
|||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.UserIdInt;
|
import android.annotation.UserIdInt;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
|
import android.app.ActivityManagerInternal;
|
||||||
import android.app.ActivityOptions;
|
import android.app.ActivityOptions;
|
||||||
import android.app.ActivityTaskManager;
|
import android.app.ActivityTaskManager;
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
@@ -83,6 +86,7 @@ import android.telephony.TelephonyCallback;
|
|||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.telephony.emergency.EmergencyNumber;
|
import android.telephony.emergency.EmergencyNumber;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.ArraySet;
|
import android.util.ArraySet;
|
||||||
import android.util.AtomicFile;
|
import android.util.AtomicFile;
|
||||||
@@ -156,6 +160,7 @@ public final class SensorPrivacyService extends SystemService {
|
|||||||
private final SensorPrivacyServiceImpl mSensorPrivacyServiceImpl;
|
private final SensorPrivacyServiceImpl mSensorPrivacyServiceImpl;
|
||||||
private final UserManagerInternal mUserManagerInternal;
|
private final UserManagerInternal mUserManagerInternal;
|
||||||
private final ActivityManager mActivityManager;
|
private final ActivityManager mActivityManager;
|
||||||
|
private final ActivityManagerInternal mActivityManagerInternal;
|
||||||
private final ActivityTaskManager mActivityTaskManager;
|
private final ActivityTaskManager mActivityTaskManager;
|
||||||
private final AppOpsManager mAppOpsManager;
|
private final AppOpsManager mAppOpsManager;
|
||||||
private final TelephonyManager mTelephonyManager;
|
private final TelephonyManager mTelephonyManager;
|
||||||
@@ -173,6 +178,7 @@ public final class SensorPrivacyService extends SystemService {
|
|||||||
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
mAppOpsManager = context.getSystemService(AppOpsManager.class);
|
||||||
mUserManagerInternal = getLocalService(UserManagerInternal.class);
|
mUserManagerInternal = getLocalService(UserManagerInternal.class);
|
||||||
mActivityManager = context.getSystemService(ActivityManager.class);
|
mActivityManager = context.getSystemService(ActivityManager.class);
|
||||||
|
mActivityManagerInternal = getLocalService(ActivityManagerInternal.class);
|
||||||
mActivityTaskManager = context.getSystemService(ActivityTaskManager.class);
|
mActivityTaskManager = context.getSystemService(ActivityTaskManager.class);
|
||||||
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||||
|
|
||||||
@@ -421,11 +427,33 @@ public final class SensorPrivacyService extends SystemService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VoiceInteractionManagerInternal voiceInteractionManagerInternal =
|
String inputMethodComponent = Settings.Secure.getString(mContext.getContentResolver(),
|
||||||
LocalServices.getService(VoiceInteractionManagerInternal.class);
|
Settings.Secure.DEFAULT_INPUT_METHOD);
|
||||||
|
String inputMethodPackageName = null;
|
||||||
|
if (inputMethodComponent != null) {
|
||||||
|
inputMethodPackageName = ComponentName.unflattenFromString(
|
||||||
|
inputMethodComponent).getPackageName();
|
||||||
|
}
|
||||||
|
int capability = mActivityManagerInternal.getUidCapability(uid);
|
||||||
|
|
||||||
if (sensor == MICROPHONE && voiceInteractionManagerInternal != null
|
if (sensor == MICROPHONE) {
|
||||||
&& voiceInteractionManagerInternal.hasActiveSession(packageName)) {
|
VoiceInteractionManagerInternal voiceInteractionManagerInternal =
|
||||||
|
LocalServices.getService(VoiceInteractionManagerInternal.class);
|
||||||
|
if (voiceInteractionManagerInternal != null
|
||||||
|
&& voiceInteractionManagerInternal.hasActiveSession(packageName)) {
|
||||||
|
enqueueSensorUseReminderDialogAsync(-1, user, packageName, sensor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TextUtils.equals(packageName, inputMethodPackageName)
|
||||||
|
&& (capability & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0) {
|
||||||
|
enqueueSensorUseReminderDialogAsync(-1, user, packageName, sensor);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sensor == CAMERA && TextUtils.equals(packageName, inputMethodPackageName)
|
||||||
|
&& (capability & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0) {
|
||||||
enqueueSensorUseReminderDialogAsync(-1, user, packageName, sensor);
|
enqueueSensorUseReminderDialogAsync(-1, user, packageName, sensor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16333,6 +16333,17 @@ public class ActivityManagerService extends IActivityManager.Stub
|
|||||||
return mConstants.mPushMessagingOverQuotaBehavior;
|
return mConstants.mPushMessagingOverQuotaBehavior;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getUidCapability(int uid) {
|
||||||
|
synchronized (ActivityManagerService.this) {
|
||||||
|
UidRecord uidRecord = mProcessList.getUidRecordLOSP(uid);
|
||||||
|
if (uidRecord == null) {
|
||||||
|
throw new IllegalArgumentException("uid record for " + uid + " not found");
|
||||||
|
}
|
||||||
|
return uidRecord.getCurCapability();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long inputDispatchingTimedOut(int pid, final boolean aboveSystem, String reason) {
|
long inputDispatchingTimedOut(int pid, final boolean aboveSystem, String reason) {
|
||||||
|
|||||||
Reference in New Issue
Block a user