szkolny/app/src/main/java/pl/szczodrzynski/edziennik/utils/PermissionChecker.java

166 lines
5.7 KiB
Java
Raw Normal View History

package pl.szczodrzynski.edziennik.utils;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.annotation.TargetApi;
import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import java.util.List;
public class PermissionChecker {
private Context mContext;
public PermissionChecker(Context context) {
mContext = context;
}
@TargetApi(Build.VERSION_CODES.M)
public boolean canDrawOverOtherApps() {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || Settings.canDrawOverlays(mContext);
}
@TargetApi(Build.VERSION_CODES.M)
public void requestDrawOverOtherApps() {
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mContext.startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + mContext.getPackageName())));
}
}
@TargetApi(Build.VERSION_CODES.M)
public Intent intentDrawOverOtherApps() {
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + mContext.getPackageName()));
}
return null;
}
public boolean canGetUsageStats() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
AppOpsManager appOps = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
int mode = 0;
try {
mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
android.os.Process.myUid(), mContext.getPackageName());
} catch (java.lang.IllegalArgumentException e) {
e.printStackTrace();
}
boolean granted = false;
if (mode == AppOpsManager.MODE_DEFAULT) {
granted = (mContext.checkCallingOrSelfPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) == PackageManager.PERMISSION_GRANTED);
} else {
granted = (mode == AppOpsManager.MODE_ALLOWED);
}
return granted;
}
else
{
return true;
}
}
public void requestUsageStatsPermission() {
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mContext.startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
}
}
public Intent intentUsageStatsPermission() {
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
}
return null;
}
public boolean isAccessibilityEnabled() {
AccessibilityManager am = (AccessibilityManager) mContext
.getSystemService(Context.ACCESSIBILITY_SERVICE);
List<AccessibilityServiceInfo> runningServices = am
.getEnabledAccessibilityServiceList(AccessibilityEvent.TYPES_ALL_MASK);
for (AccessibilityServiceInfo service : runningServices) {
if ("pl.szczodrzynski.topd/.OverlayAccessibilityService".equals(service.getId())) {
return true;
}
}
return false;
}
public void requestAccessibilityService() {
mContext.startActivity(new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS));
}
public Intent intentAccessibilityService() {
return new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
}
public boolean isNotificationListenerEnabled() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
String pkgName = mContext.getPackageName();
final String flat = Settings.Secure.getString(mContext.getContentResolver(),
"enabled_notification_listeners");
if (!TextUtils.isEmpty(flat)) {
final String[] names = flat.split(":");
for (String name : names) {
final ComponentName cn = ComponentName.unflattenFromString(name);
if (cn != null) {
if (TextUtils.equals(pkgName, cn.getPackageName())) {
return true;
}
}
}
}
return false;
}
else
{
return false;
}
}
public void requestNotificationListener() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
mContext.startActivity(intentNotificationListener());
}
}
public Intent intentNotificationListener()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
return new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
}
return null;
}
public boolean canRequestApkInstall() {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.O || mContext.getPackageManager().canRequestPackageInstalls();
}
public void requestApkInstall() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mContext.startActivity(intentApkInstall());
}
}
public Intent intentApkInstall() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return new Intent("android.settings.MANAGE_UNKNOWN_APP_SOURCES",
Uri.parse("package:" + mContext.getPackageName()));
}
return null;
}
}