use of android.app.AppOpsManager in project weiui by kuaifan.
the class ProcessUtils method getForegroundProcessName.
/**
* Return the foreground process name.
* <p>Target APIs greater than 21 must hold
* {@code <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />}</p>
*
* @return the foreground process name
*/
public static String getForegroundProcessName() {
ActivityManager am = (ActivityManager) Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE);
if (am == null)
return null;
List<ActivityManager.RunningAppProcessInfo> pInfo = am.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 pm = Utils.getApp().getPackageManager();
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
Log.i("ProcessUtils", list.toString());
if (list.size() <= 0) {
Log.i("ProcessUtils", "getForegroundProcessName: noun of access to usage information.");
return null;
}
try {
// Access to usage information.
ApplicationInfo info = pm.getApplicationInfo(Utils.getApp().getPackageName(), 0);
AppOpsManager aom = (AppOpsManager) Utils.getApp().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);
Utils.getApp().startActivity(intent);
}
if (aom.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, info.uid, info.packageName) != AppOpsManager.MODE_ALLOWED) {
Log.i("ProcessUtils", "getForegroundProcessName: refuse to device usage stats.");
return null;
}
}
UsageStatsManager usageStatsManager = (UsageStatsManager) Utils.getApp().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 Taskbar by farmerbb.
the class U method showRecentAppsDialog.
public static AlertDialog showRecentAppsDialog(Context context, Runnable onError, Runnable onFinish) {
Runnable finalOnFinish = onFinish == null ? () -> {
} : onFinish;
Runnable finalOnError = onError == null ? () -> showErrorDialog(context, "GET_USAGE_STATS", finalOnFinish) : onError;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !isSystemApp(context)) {
ApplicationInfo applicationInfo = null;
try {
applicationInfo = context.getPackageManager().getApplicationInfo(BuildConfig.APPLICATION_ID, 0);
} catch (PackageManager.NameNotFoundException e) {
/* Gracefully fail */
}
if (applicationInfo != null) {
AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, applicationInfo.uid, applicationInfo.packageName);
if (mode != AppOpsManager.MODE_ALLOWED) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.pref_header_recent_apps).setMessage(R.string.enable_recent_apps).setPositiveButton(R.string.action_ok, (dialog, which) -> {
try {
context.startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
showToastLong(context, R.string.usage_stats_message);
finalOnFinish.run();
} catch (ActivityNotFoundException e) {
finalOnError.run();
}
}).setNegativeButton(R.string.action_cancel, (dialog, which) -> finalOnFinish.run());
AlertDialog dialog = builder.create();
dialog.show();
dialog.setCancelable(false);
return dialog;
}
}
}
finalOnFinish.run();
return null;
}
use of android.app.AppOpsManager in project android_packages_apps_Settings by omnirom.
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 android_packages_apps_Settings by omnirom.
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);
}
use of android.app.AppOpsManager in project android_packages_apps_Settings by omnirom.
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));
}
}
Aggregations