mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-06 02:35:19 +08:00
Added: Add support to request Settings.ACTION* permissions to be requested via Service context
This commit is contained in:
@@ -3,6 +3,7 @@ package com.termux.shared.android;
|
|||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.app.Service;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
@@ -324,13 +325,20 @@ public class PermissionUtils {
|
|||||||
return requestPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE, requestCode);
|
return requestPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE, requestCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Wrapper for {@link #requestManageStorageExternalPermission(Context, int)}. */
|
||||||
|
public static Error requestManageStorageExternalPermission(@NonNull Context context) {
|
||||||
|
return requestManageStorageExternalPermission(context, -1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request user to grant {@link Manifest.permission#MANAGE_EXTERNAL_STORAGE} permission to the app.
|
* Request user to grant {@link Manifest.permission#MANAGE_EXTERNAL_STORAGE} permission to the app.
|
||||||
*
|
*
|
||||||
* @param context The context for operations. It must be an instance of {@link Activity} or
|
* @param context The context for operations, like an {@link Activity} or {@link Service} context.
|
||||||
* {@link AppCompatActivity}.
|
* It must be an instance of {@link Activity} or {@link AppCompatActivity} if
|
||||||
* @param requestCode The request code to use while asking for permission. It must be `>=0` or
|
* result is required via the Activity#onActivityResult() callback and
|
||||||
* will fail silently and will log an exception.
|
* {@code requestCode} is `>=0`.
|
||||||
|
* @param requestCode The request code to use while asking for permission. It must be `>=0` if
|
||||||
|
* result it required.
|
||||||
* @return Returns the {@code error} if requesting the permission was not successful, otherwise {@code null}.
|
* @return Returns the {@code error} if requesting the permission was not successful, otherwise {@code null}.
|
||||||
*/
|
*/
|
||||||
public static Error requestManageStorageExternalPermission(@NonNull Context context, int requestCode) {
|
public static Error requestManageStorageExternalPermission(@NonNull Context context, int requestCode) {
|
||||||
@@ -339,13 +347,22 @@ public class PermissionUtils {
|
|||||||
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
|
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
|
||||||
intent.addCategory("android.intent.category.DEFAULT");
|
intent.addCategory("android.intent.category.DEFAULT");
|
||||||
intent.setData(Uri.parse("package:" + context.getPackageName()));
|
intent.setData(Uri.parse("package:" + context.getPackageName()));
|
||||||
Error error = ActivityUtils.startActivityForResult(context, requestCode, intent, true, false);
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|
||||||
|
Error error;
|
||||||
|
if (requestCode >=0)
|
||||||
|
error = ActivityUtils.startActivityForResult(context, requestCode, intent, true, false);
|
||||||
|
else
|
||||||
|
error = ActivityUtils.startActivity(context, intent, true, false);
|
||||||
|
|
||||||
// Use fallback if matching Activity did not exist for ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION.
|
// Use fallback if matching Activity did not exist for ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION.
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
intent = new Intent();
|
intent = new Intent();
|
||||||
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
|
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
|
||||||
return ActivityUtils.startActivityForResult(context, requestCode, intent);
|
if (requestCode >=0)
|
||||||
|
return ActivityUtils.startActivityForResult(context, requestCode, intent);
|
||||||
|
else
|
||||||
|
return ActivityUtils.startActivity(context, intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -421,19 +438,33 @@ public class PermissionUtils {
|
|||||||
return Settings.canDrawOverlays(context);
|
return Settings.canDrawOverlays(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Wrapper for {@link #requestDisplayOverOtherAppsPermission(Context, int)}. */
|
||||||
|
public static Error requestDisplayOverOtherAppsPermission(@NonNull Context context) {
|
||||||
|
return requestDisplayOverOtherAppsPermission(context, -1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request user to grant {@link Manifest.permission#SYSTEM_ALERT_WINDOW} permission to the app.
|
* Request user to grant {@link Manifest.permission#SYSTEM_ALERT_WINDOW} permission to the app.
|
||||||
*
|
*
|
||||||
* @param context The context for operations. It must be an instance of {@link Activity} or
|
* @param context The context for operations, like an {@link Activity} or {@link Service} context.
|
||||||
* {@link AppCompatActivity}.
|
* It must be an instance of {@link Activity} or {@link AppCompatActivity} if
|
||||||
* @param requestCode The request code to use while asking for permission. It must be `>=0` or
|
* result is required via the Activity#onActivityResult() callback and
|
||||||
* will fail silently and will log an exception.
|
* {@code requestCode} is `>=0`.
|
||||||
|
* @param requestCode The request code to use while asking for permission. It must be `>=0` if
|
||||||
|
* result it required.
|
||||||
* @return Returns the {@code error} if requesting the permission was not successful, otherwise {@code null}.
|
* @return Returns the {@code error} if requesting the permission was not successful, otherwise {@code null}.
|
||||||
*/
|
*/
|
||||||
public static Error requestDisplayOverOtherAppsPermission(@NonNull Context context, int requestCode) {
|
public static Error requestDisplayOverOtherAppsPermission(@NonNull Context context, int requestCode) {
|
||||||
|
Logger.logInfo(LOG_TAG, "Requesting display over apps permission");
|
||||||
|
|
||||||
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
|
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
|
||||||
intent.setData(Uri.parse("package:" + context.getPackageName()));
|
intent.setData(Uri.parse("package:" + context.getPackageName()));
|
||||||
return ActivityUtils.startActivityForResult(context, requestCode, intent);
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|
||||||
|
if (requestCode >=0)
|
||||||
|
return ActivityUtils.startActivityForResult(context, requestCode, intent);
|
||||||
|
else
|
||||||
|
return ActivityUtils.startActivity(context, intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -475,21 +506,35 @@ public class PermissionUtils {
|
|||||||
return powerManager.isIgnoringBatteryOptimizations(context.getPackageName());
|
return powerManager.isIgnoringBatteryOptimizations(context.getPackageName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Wrapper for {@link #requestDisableBatteryOptimizations(Context, int)}. */
|
||||||
|
public static Error requestDisableBatteryOptimizations(@NonNull Context context) {
|
||||||
|
return requestDisableBatteryOptimizations(context, -1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request user to grant {@link Manifest.permission#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}
|
* Request user to grant {@link Manifest.permission#REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}
|
||||||
* permission to the app.
|
* permission to the app.
|
||||||
*
|
*
|
||||||
* @param context The context for operations. It must be an instance of {@link Activity} or
|
* @param context The context for operations, like an {@link Activity} or {@link Service} context.
|
||||||
* {@link AppCompatActivity}.
|
* It must be an instance of {@link Activity} or {@link AppCompatActivity} if
|
||||||
* @param requestCode The request code to use while asking for permission. It must be `>=0` or
|
* result is required via the Activity#onActivityResult() callback and
|
||||||
* will fail silently and will log an exception.
|
* {@code requestCode} is `>=0`.
|
||||||
|
* @param requestCode The request code to use while asking for permission. It must be `>=0` if
|
||||||
|
* result it required.
|
||||||
* @return Returns the {@code error} if requesting the permission was not successful, otherwise {@code null}.
|
* @return Returns the {@code error} if requesting the permission was not successful, otherwise {@code null}.
|
||||||
*/
|
*/
|
||||||
@SuppressLint("BatteryLife")
|
@SuppressLint("BatteryLife")
|
||||||
public static Error requestDisableBatteryOptimizations(@NonNull Context context, int requestCode) {
|
public static Error requestDisableBatteryOptimizations(@NonNull Context context, int requestCode) {
|
||||||
|
Logger.logInfo(LOG_TAG, "Requesting to disable battery optimizations");
|
||||||
|
|
||||||
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
|
||||||
intent.setData(Uri.parse("package:" + context.getPackageName()));
|
intent.setData(Uri.parse("package:" + context.getPackageName()));
|
||||||
return ActivityUtils.startActivityForResult(context, requestCode, intent);
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
|
||||||
|
if (requestCode >=0)
|
||||||
|
return ActivityUtils.startActivityForResult(context, requestCode, intent);
|
||||||
|
else
|
||||||
|
return ActivityUtils.startActivity(context, intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user