Fix hidden API usages in LocationAccessPolicy and add API in ActivityManager
Bug: 146355892 Test: Cts test, atest TeleServiceTests Change-Id: I91bf8a05383f29feaa26b03d6a03ed7de2d79061
This commit is contained in:
@@ -321,6 +321,7 @@ package android.app {
|
||||
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getPackageImportance(String);
|
||||
method @NonNull public java.util.Collection<java.util.Locale> getSupportedLocales();
|
||||
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidImportance(int);
|
||||
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, "android.permission.CREATE_USERS"}) public boolean isProfileForeground(@NonNull android.os.UserHandle);
|
||||
method @RequiresPermission(android.Manifest.permission.KILL_UID) public void killUid(int, String);
|
||||
method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
|
||||
method public void setDeviceLocales(@NonNull android.os.LocaleList);
|
||||
|
||||
@@ -65,6 +65,7 @@ import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.os.WorkSource;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.DisplayMetrics;
|
||||
@@ -4438,6 +4439,29 @@ public class ActivityManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return if a given profile is in the foreground.
|
||||
* @param userHandle UserHandle to check
|
||||
* @return Returns the boolean result.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(anyOf = {
|
||||
android.Manifest.permission.MANAGE_USERS,
|
||||
android.Manifest.permission.CREATE_USERS
|
||||
})
|
||||
public boolean isProfileForeground(@NonNull UserHandle userHandle) {
|
||||
UserManager userManager = mContext.getSystemService(UserManager.class);
|
||||
if (userManager != null) {
|
||||
for (UserInfo userInfo : userManager.getProfiles(getCurrentUser())) {
|
||||
if (userInfo.id == userHandle.getIdentifier()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* The AppTask allows you to manage your own application's tasks.
|
||||
* See {@link android.app.ActivityManager#getAppTasks()}
|
||||
|
||||
@@ -24,20 +24,16 @@ import android.app.ActivityManager;
|
||||
import android.app.AppOpsManager;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.Process;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.android.internal.telephony.util.TelephonyUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Helper for performing location access checks.
|
||||
* @hide
|
||||
@@ -309,7 +305,7 @@ public final class LocationAccessPolicy {
|
||||
}
|
||||
|
||||
private static boolean checkSystemLocationAccess(@NonNull Context context, int uid, int pid) {
|
||||
if (!isLocationModeEnabled(context, UserHandle.getUserId(uid))) {
|
||||
if (!isLocationModeEnabled(context, UserHandle.getUserHandleForUid(uid).getIdentifier())) {
|
||||
if (DBG) Log.w(TAG, "Location disabled, failed, (" + uid + ")");
|
||||
return false;
|
||||
}
|
||||
@@ -336,20 +332,17 @@ public final class LocationAccessPolicy {
|
||||
private static boolean isCurrentProfile(@NonNull Context context, int uid) {
|
||||
long token = Binder.clearCallingIdentity();
|
||||
try {
|
||||
final int currentUser = ActivityManager.getCurrentUser();
|
||||
final int callingUserId = UserHandle.getUserId(uid);
|
||||
if (callingUserId == currentUser) {
|
||||
if (UserHandle.getUserHandleForUid(uid).getIdentifier()
|
||||
== ActivityManager.getCurrentUser()) {
|
||||
return true;
|
||||
} else {
|
||||
List<UserInfo> userProfiles = context.getSystemService(
|
||||
UserManager.class).getProfiles(currentUser);
|
||||
for (UserInfo user : userProfiles) {
|
||||
if (user.id == callingUserId) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
ActivityManager activityManager = context.getSystemService(ActivityManager.class);
|
||||
if (activityManager != null) {
|
||||
return activityManager.isProfileForeground(
|
||||
UserHandle.getUserHandleForUid(ActivityManager.getCurrentUser()));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user