use of android.app.AppOpsManager in project android_packages_apps_Settings by SudaMod.
the class DevelopmentSettings method updateMockLocation.
private void updateMockLocation() {
AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATION_APP_OPS);
if (packageOps != null) {
for (PackageOps packageOp : packageOps) {
if (packageOp.getOps().get(0).getMode() == AppOpsManager.MODE_ALLOWED) {
mMockLocationApp = packageOps.get(0).getPackageName();
break;
}
}
}
if (!TextUtils.isEmpty(mMockLocationApp)) {
String label = mMockLocationApp;
try {
ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mMockLocationApp, PackageManager.GET_DISABLED_COMPONENTS);
CharSequence appLabel = getPackageManager().getApplicationLabel(ai);
if (appLabel != null) {
label = appLabel.toString();
}
} catch (PackageManager.NameNotFoundException e) {
/* ignore */
}
mMockLocationAppPref.setSummary(getString(R.string.mock_location_app_set, label));
mHaveDebugSettings = true;
} else {
mMockLocationAppPref.setSummary(getString(R.string.mock_location_app_not_set));
}
}
use of android.app.AppOpsManager in project network-monitor by caarmen.
the class PermissionUtil method hasUsageStatsPermission.
@TargetApi(Build.VERSION_CODES.M)
public static boolean hasUsageStatsPermission(Context context) {
AppOpsManager appOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
if (appOps == null)
return false;
int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), context.getPackageName());
return mode == AppOpsManager.MODE_ALLOWED;
}
use of android.app.AppOpsManager in project platform_packages_apps_Settings by BlissRoms.
the class AppOpsState method buildState.
public List<AppOpEntry> buildState(OpsTemplate tpl, int uid, String packageName, Comparator<AppOpEntry> comparator) {
final Context context = mContext;
final HashMap<String, AppEntry> appEntries = new HashMap<String, AppEntry>();
final List<AppOpEntry> entries = new ArrayList<AppOpEntry>();
final ArrayList<String> perms = new ArrayList<String>();
final ArrayList<Integer> permOps = new ArrayList<Integer>();
final int[] opToOrder = new int[AppOpsManager._NUM_OP];
for (int i = 0; i < tpl.ops.length; i++) {
if (tpl.showPerms[i]) {
String perm = AppOpsManager.opToPermission(tpl.ops[i]);
if (perm != null && !perms.contains(perm)) {
perms.add(perm);
permOps.add(tpl.ops[i]);
opToOrder[tpl.ops[i]] = i;
}
}
}
List<AppOpsManager.PackageOps> pkgs;
if (packageName != null) {
pkgs = mAppOps.getOpsForPackage(uid, packageName, tpl.ops);
} else {
pkgs = mAppOps.getPackagesForOps(tpl.ops);
}
if (pkgs != null) {
for (int i = 0; i < pkgs.size(); i++) {
AppOpsManager.PackageOps pkgOps = pkgs.get(i);
AppEntry appEntry = getAppEntry(context, appEntries, pkgOps.getPackageName(), null);
if (appEntry == null) {
continue;
}
for (int j = 0; j < pkgOps.getOps().size(); j++) {
AppOpsManager.OpEntry opEntry = pkgOps.getOps().get(j);
addOp(entries, pkgOps, appEntry, opEntry, packageName == null, packageName == null ? 0 : opToOrder[opEntry.getOp()]);
}
}
}
List<PackageInfo> apps;
if (packageName != null) {
apps = new ArrayList<PackageInfo>();
try {
PackageInfo pi = mPm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
apps.add(pi);
} catch (NameNotFoundException e) {
}
} else {
String[] permsArray = new String[perms.size()];
perms.toArray(permsArray);
apps = mPm.getPackagesHoldingPermissions(permsArray, 0);
}
for (int i = 0; i < apps.size(); i++) {
PackageInfo appInfo = apps.get(i);
AppEntry appEntry = getAppEntry(context, appEntries, appInfo.packageName, appInfo.applicationInfo);
if (appEntry == null) {
continue;
}
List<AppOpsManager.OpEntry> dummyOps = null;
AppOpsManager.PackageOps pkgOps = null;
if (appInfo.requestedPermissions != null) {
for (int j = 0; j < appInfo.requestedPermissions.length; j++) {
if (appInfo.requestedPermissionsFlags != null) {
if ((appInfo.requestedPermissionsFlags[j] & PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0) {
if (DEBUG)
Log.d(TAG, "Pkg " + appInfo.packageName + " perm " + appInfo.requestedPermissions[j] + " not granted; skipping");
continue;
}
}
if (DEBUG)
Log.d(TAG, "Pkg " + appInfo.packageName + ": requested perm " + appInfo.requestedPermissions[j]);
for (int k = 0; k < perms.size(); k++) {
if (!perms.get(k).equals(appInfo.requestedPermissions[j])) {
continue;
}
if (DEBUG)
Log.d(TAG, "Pkg " + appInfo.packageName + " perm " + perms.get(k) + " has op " + permOps.get(k) + ": " + appEntry.hasOp(permOps.get(k)));
if (appEntry.hasOp(permOps.get(k))) {
continue;
}
if (dummyOps == null) {
dummyOps = new ArrayList<AppOpsManager.OpEntry>();
pkgOps = new AppOpsManager.PackageOps(appInfo.packageName, appInfo.applicationInfo.uid, dummyOps);
}
AppOpsManager.OpEntry opEntry = new AppOpsManager.OpEntry(permOps.get(k), AppOpsManager.MODE_ALLOWED, 0, 0, 0, -1, null);
dummyOps.add(opEntry);
addOp(entries, pkgOps, appEntry, opEntry, packageName == null, packageName == null ? 0 : opToOrder[opEntry.getOp()]);
}
}
}
}
// Sort the list.
Collections.sort(entries, comparator);
// Done!
return entries;
}
use of android.app.AppOpsManager in project XUtil by xuexiangjys.
the class ProcessUtils method getForegroundProcessName.
/**
* 获取前台线程包名
* <p>当不是查看当前 App,且 SDK 大于 21 时,
* 需添加权限
* {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />}</p>
*
* @return 前台应用包名
*/
public static String getForegroundProcessName() {
ActivityManager manager = (ActivityManager) XUtil.getContext().getSystemService(Context.ACTIVITY_SERVICE);
if (manager == null)
return null;
List<ActivityManager.RunningAppProcessInfo> pInfo = manager.getRunningAppProcesses();
if (pInfo != null && pInfo.size() > 0) {
for (ActivityManager.RunningAppProcessInfo aInfo : pInfo) {
if (aInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return aInfo.processName;
}
}
}
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.LOLLIPOP) {
PackageManager packageManager = XUtil.getContext().getPackageManager();
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
Log.i("ProcessUtils", list.toString());
if (list.size() <= 0) {
Log.i("ProcessUtils", "getForegroundProcessName() called" + ": 无\"有权查看使用权限的应用\"选项");
return null;
}
try {
// 有"有权查看使用权限的应用"选项
ApplicationInfo info = packageManager.getApplicationInfo(XUtil.getContext().getPackageName(), 0);
AppOpsManager aom = (AppOpsManager) XUtil.getContext().getSystemService(Context.APP_OPS_SERVICE);
if (aom != null) {
if (aom.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, info.uid, info.packageName) != AppOpsManager.MODE_ALLOWED) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
XUtil.getContext().startActivity(intent);
}
if (aom.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, info.uid, info.packageName) != AppOpsManager.MODE_ALLOWED) {
Log.i("ProcessUtils", "没有打开\"有权查看使用权限的应用\"选项");
return null;
}
}
UsageStatsManager usageStatsManager = (UsageStatsManager) XUtil.getContext().getSystemService(Context.USAGE_STATS_SERVICE);
List<UsageStats> usageStatsList = null;
if (usageStatsManager != null) {
long endTime = System.currentTimeMillis();
long beginTime = endTime - 86400000 * 7;
usageStatsList = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, beginTime, endTime);
}
if (usageStatsList == null || usageStatsList.isEmpty())
return null;
UsageStats recentStats = null;
for (UsageStats usageStats : usageStatsList) {
if (recentStats == null || usageStats.getLastTimeUsed() > recentStats.getLastTimeUsed()) {
recentStats = usageStats;
}
}
return recentStats == null ? null : recentStats.getPackageName();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
use of android.app.AppOpsManager in project platform_packages_apps_Settings by BlissRoms.
the class PictureInPictureDetails method setEnterPipStateForPackage.
/**
* Sets whether the app associated with the given {@param packageName} is allowed to enter
* picture-in-picture.
*/
static void setEnterPipStateForPackage(Context context, int uid, String packageName, boolean value) {
final AppOpsManager appOps = context.getSystemService(AppOpsManager.class);
final int newMode = value ? MODE_ALLOWED : MODE_ERRORED;
appOps.setMode(OP_PICTURE_IN_PICTURE, uid, packageName, newMode);
}
Aggregations