content: /*
   * Copyright (C) 2016 Facishare Technology Co., Ltd. All Rights Reserved.
   */
  package com.termux.floatball.permission.rom;
  
  import android.annotation.TargetApi;
  import android.app.AppOpsManager;
  import android.content.Context;
  import android.content.Intent;
  import android.content.pm.PackageManager;
  import android.net.Uri;
  import android.os.Binder;
  import android.os.Build;
  import android.provider.Settings;
  import android.util.Log;
  
  import java.lang.reflect.Method;
  
  public class MiuiUtils {
      private static final String TAG = "MiuiUtils";
  
      /**
       * Get Xiaomi ROM version number, return -1 if failed
       *
       * @return miui rom version code, if fail , return -1
       */
      public static int getMiuiVersion() {
          String version = RomUtils.getSystemProperty("ro.miui.ui.version.name");
          if (version != null) {
              try {
                  return Integer.parseInt(version.substring(1));
              } catch (Exception e) {
                  Log.e(TAG, "get miui version code error, version : " + version);
                  Log.e(TAG, Log.getStackTraceString(e));
              }
          }
          return -1;
      }
  
      /**
       * Check miui floating window permissions
       */
      public static boolean checkFloatWindowPermission(Context context) {
          final int version = Build.VERSION.SDK_INT;
  
          if (version >= 19) {
              return checkOp(context, 24); //OP_SYSTEM_ALERT_WINDOW = 24;
          } else {
  //            if ((context.getApplicationInfo().flags & 1 << 27) == 1) {
  //                return true;
  //            } else {
  //                return false;
  //            }
              return true;
          }
      }
  
      @TargetApi(Build.VERSION_CODES.KITKAT)
      private static boolean checkOp(Context context, int op) {
          final int version = Build.VERSION.SDK_INT;
          if (version >= 19) {
              AppOpsManager manager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
              try {
                  Class clazz = AppOpsManager.class;
                  Method method = clazz.getDeclaredMethod("checkOp", int.class, int.class, String.class);
                  return AppOpsManager.MODE_ALLOWED == (int) method.invoke(manager, op, Binder.getCallingUid(), context.getPackageName());
              } catch (Exception e) {
                  Log.e(TAG, Log.getStackTraceString(e));
              }
          } else {
              Log.e(TAG, "Below API 19 cannot invoke!");
          }
          return false;
      }
  
      /**
       * 小米 ROM 权限申请
       */
      public static void applyMiuiPermission(Context context) {
          int versionCode = getMiuiVersion();
          if (versionCode == 5) {
              goToMiuiPermissionActivity_V5(context);
          } else if (versionCode == 6) {
              goToMiuiPermissionActivity_V6(context);
          } else if (versionCode == 7) {
              goToMiuiPermissionActivity_V7(context);
          } else if (versionCode == 8) {
              goToMiuiPermissionActivity_V8(context);
          } else {
              Log.e(TAG, "this is a special MIUI rom version, its version code " + versionCode);
          }
      }
  
      private static boolean isIntentAvailable(Intent intent, Context context) {
          if (intent == null) {
              return false;
          }
          return context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0;
      }
  
      /**
       * Xiaomi V5 version ROM permission application
       */
      public static void goToMiuiPermissionActivity_V5(Context context) {
          Intent intent = null;
          String packageName = context.getPackageName();
          intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
          Uri uri = Uri.fromParts("package", packageName, null);
          intent.setData(uri);
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          if (isIntentAvailable(intent, context)) {
              context.startActivity(intent);
          } else {
              Log.e(TAG, "intent is not available!");
          }
  
  //        Settings page in the app details page
  //        Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
  //        PackageInfo pInfo = null;
  //        try {
  //            pInfo = context.getPackageManager().getPackageInfo
  //                    (HostInterfaceManager.getHostInterface().getApp().getPackageName(), 0);
  //        } catch (PackageManager.NameNotFoundException e) {
  //            AVLogUtils.e(TAG, e.getMessage());
  //        }
  //        intent.setClassName("com.android.settings", "com.miui.securitycenter.permission.AppPermissionsEditor");
  //        intent.putExtra("extra_package_uid", pInfo.applicationInfo.uid);
  //        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  //        if (isIntentAvailable(intent, context)) {
  //            context.startActivity(intent);
  //        } else {
  //            AVLogUtils.e(TAG, "Intent is not available!");
  //        }
      }
  
      /**
       * Xiaomi V6 version ROM permission application
       */
      public static void goToMiuiPermissionActivity_V6(Context context) {
          Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
          intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
          intent.putExtra("extra_pkgname", context.getPackageName());
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
          if (isIntentAvailable(intent, context)) {
              context.startActivity(intent);
          } else {
              Log.e(TAG, "Intent is not available!");
          }
      }
  
      /**
       * Xiaomi V7 version ROM permission application
       */
      public static void goToMiuiPermissionActivity_V7(Context context) {
          Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
          intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
          intent.putExtra("extra_pkgname", context.getPackageName());
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
          if (isIntentAvailable(intent, context)) {
              context.startActivity(intent);
          } else {
              Log.e(TAG, "Intent is not available!");
          }
      }
  
      /**
       * Xiaomi V8 version ROM permission application
       */
      public static void goToMiuiPermissionActivity_V8(Context context) {
          Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
          intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
  //        intent.setPackage("com.miui.securitycenter");
          intent.putExtra("extra_pkgname", context.getPackageName());
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
          if (isIntentAvailable(intent, context)) {
              context.startActivity(intent);
          } else {
              intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
              intent.setPackage("com.miui.securitycenter");
              intent.putExtra("extra_pkgname", context.getPackageName());
              intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  
              if (isIntentAvailable(intent, context)) {
                  context.startActivity(intent);
              } else {
                  Log.e(TAG, "Intent is not available!");
              }
          }
      }
  }
  