mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2024-09-20 13:59:08 -05:00
166 lines
5.7 KiB
Java
166 lines
5.7 KiB
Java
|
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;
|
||
|
}
|
||
|
|
||
|
}
|