package com.james.status.utils;
import android.Manifest;
import android.app.Activity;
import android.app.ActivityManager;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.os.Build;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import com.james.status.Status;
import com.james.status.activities.StartActivity;
import com.james.status.services.AccessibilityService;
import com.james.status.services.StatusService;
import java.util.ArrayList;
import java.util.List;
public class StaticUtils {
public static int getStatusBarHeight(Context context) {
int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0) return context.getResources().getDimensionPixelSize(resId);
else return 0;
}
public static boolean shouldShowTutorial(Context context, String tutorialName) {
return shouldShowTutorial(context, tutorialName, 0);
}
public static boolean shouldShowTutorial(Context context, String tutorialName, int limit) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
int shown = prefs.getInt("tutorial" + tutorialName, 0);
prefs.edit().putInt("tutorial" + tutorialName, shown + 1).apply();
return limit == shown;
}
public static int getNavigationBarHeight(Context context) {
int resId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resId > 0) return context.getResources().getDimensionPixelSize(resId);
else return 0;
}
public static float getPixelsFromDp(int dp) {
return dp * Resources.getSystem().getDisplayMetrics().density;
}
public static float getDpFromPixels(int px) {
return px / Resources.getSystem().getDisplayMetrics().density;
}
public static int getBluetoothState(Context context) {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter != null) return adapter.getState();
else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
adapter = ((BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter();
if (adapter != null) return adapter.getState();
else return BluetoothAdapter.STATE_OFF;
}
}
public static boolean isAccessibilityGranted(Context context) {
return isAccessibilityServiceRunning(context);
}
public static boolean isNotificationGranted(Context context) {
for (String packageName : NotificationManagerCompat.getEnabledListenerPackages(context)) {
if (packageName.contains(context.getPackageName()) || packageName.equals(context.getPackageName()))
return true;
}
return shouldUseCompatNotifications(context);
}
public static boolean isIgnoringOptimizations(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
return ((PowerManager) context.getSystemService(Context.POWER_SERVICE)).isIgnoringBatteryOptimizations(context.getPackageName());
else return true;
}
public static boolean canDrawOverlays(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;
else return Settings.canDrawOverlays(context);
}
public static boolean isPermissionsGranted(Context context) {
PackageInfo info;
try {
info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
if (info.requestedPermissions != null) {
for (String permission : info.requestedPermissions) {
if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
if (!permission.matches(Manifest.permission.SYSTEM_ALERT_WINDOW) && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M || !permission.matches("android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS")) && !permission.matches("android.permission.GET_TASKS")) {
Log.wtf("Permission", permission);
return false;
}
}
}
}
return true;
}
public static void requestPermissions(Activity activity) {
PackageInfo info;
try {
info = activity.getPackageManager().getPackageInfo(activity.getPackageName(), PackageManager.GET_PERMISSIONS);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return;
}
if (info.requestedPermissions != null) {
List<String> unrequestedPermissions = new ArrayList<>();
for (String permission : info.requestedPermissions) {
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
Log.wtf("Permission", permission);
if (permission.length() > 0 && !permission.matches(Manifest.permission.SYSTEM_ALERT_WINDOW) && !permission.matches("android.permission.GET_TASKS"))
unrequestedPermissions.add(permission);
}
}
if (unrequestedPermissions.size() > 0)
ActivityCompat.requestPermissions(activity, unrequestedPermissions.toArray(new String[unrequestedPermissions.size()]), StartActivity.REQUEST_PERMISSIONS);
}
}
public static boolean isStatusServiceRunning(Context context) {
Boolean isEnabled = PreferenceUtils.getBooleanPreference(context, PreferenceUtils.PreferenceIdentifier.STATUS_ENABLED);
if (isEnabled != null && isEnabled) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (StatusService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
Intent intent = new Intent(StatusService.ACTION_START);
intent.setClass(context, StatusService.class);
context.startService(intent);
return true;
} else return false;
}
public static void updateStatusService(Context context) {
if (isStatusServiceRunning(context)) {
Intent intent = new Intent(StatusService.ACTION_START);
intent.setClass(context, StatusService.class);
context.startService(intent);
}
((Status) context.getApplicationContext()).onPreferenceChanged();
}
public static boolean isAccessibilityServiceRunning(Context context) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (AccessibilityService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
public static boolean shouldUseCompatNotifications(Context context) {
Boolean enabled = PreferenceUtils.getBooleanPreference(context, PreferenceUtils.PreferenceIdentifier.STATUS_NOTIFICATIONS_COMPAT);
return Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2 || (enabled != null && enabled);
}
}