Commit bea04e24 by Jan-Derk

Added "REQUEST_INSTALL_PACKAGES" permission.

parent 25b10ca8
## 7.2.0
* Added support for the "REQUEST_INSTALL_PACKAGES" permission on Android.
## 7.1.1 ## 7.1.1
* Improved the example app by using the Baseflow Plugin Template and move all the functionality to the `main.dart` file. * Improved the example app by using the Baseflow Plugin Template and move all the functionality to the `main.dart` file.
......
...@@ -209,6 +209,7 @@ The following permissions will show no dialog, but will open the corrseponding s ...@@ -209,6 +209,7 @@ The following permissions will show no dialog, but will open the corrseponding s
- manageExternalStorage - manageExternalStorage
- systemAlertWindow - systemAlertWindow
- requestInstallPackages
## Issues ## Issues
......
...@@ -11,6 +11,7 @@ final class PermissionConstants { ...@@ -11,6 +11,7 @@ final class PermissionConstants {
static final int PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS = 209; static final int PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS = 209;
static final int PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE = 210; static final int PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE = 210;
static final int PERMISSION_CODE_SYSTEM_ALERT_WINDOW = 211; static final int PERMISSION_CODE_SYSTEM_ALERT_WINDOW = 211;
static final int PERMISSION_CODE_REQUEST_INSTALL_PACKAGES = 212;
//PERMISSION_GROUP //PERMISSION_GROUP
static final int PERMISSION_GROUP_CALENDAR = 0; static final int PERMISSION_GROUP_CALENDAR = 0;
...@@ -37,6 +38,7 @@ final class PermissionConstants { ...@@ -37,6 +38,7 @@ final class PermissionConstants {
static final int PERMISSION_GROUP_BLUETOOTH = 21; static final int PERMISSION_GROUP_BLUETOOTH = 21;
static final int PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE = 22; static final int PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE = 22;
static final int PERMISSION_GROUP_SYSTEM_ALERT_WINDOW = 23; static final int PERMISSION_GROUP_SYSTEM_ALERT_WINDOW = 23;
static final int PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES = 24;
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({ @IntDef({
...@@ -62,7 +64,8 @@ final class PermissionConstants { ...@@ -62,7 +64,8 @@ final class PermissionConstants {
PERMISSION_GROUP_UNKNOWN, PERMISSION_GROUP_UNKNOWN,
PERMISSION_GROUP_BLUETOOTH, PERMISSION_GROUP_BLUETOOTH,
PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE, PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE,
PERMISSION_GROUP_SYSTEM_ALERT_WINDOW PERMISSION_GROUP_SYSTEM_ALERT_WINDOW,
PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES
}) })
@interface PermissionGroup { @interface PermissionGroup {
} }
......
...@@ -37,7 +37,8 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener, ...@@ -37,7 +37,8 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
public boolean onActivityResult(int requestCode, int resultCode, Intent data) { public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode != PermissionConstants.PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS && if (requestCode != PermissionConstants.PERMISSION_CODE_IGNORE_BATTERY_OPTIMIZATIONS &&
requestCode != PermissionConstants.PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE && requestCode != PermissionConstants.PERMISSION_CODE_MANAGE_EXTERNAL_STORAGE &&
requestCode != PermissionConstants.PERMISSION_CODE_SYSTEM_ALERT_WINDOW) { requestCode != PermissionConstants.PERMISSION_CODE_SYSTEM_ALERT_WINDOW &&
requestCode != PermissionConstants.PERMISSION_CODE_REQUEST_INSTALL_PACKAGES) {
return false; return false;
} }
...@@ -63,6 +64,15 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener, ...@@ -63,6 +64,15 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
} else { } else {
return false; return false;
} }
} else if (requestCode == PermissionConstants.PERMISSION_CODE_REQUEST_INSTALL_PACKAGES) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
status = activity.getPackageManager().canRequestPackageInstalls()
? PermissionConstants.PERMISSION_STATUS_GRANTED
: PermissionConstants.PERMISSION_STATUS_DENIED;
permission = PermissionConstants.PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES;
} else {
return false;
}
} else { } else {
return false; return false;
} }
...@@ -241,6 +251,10 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener, ...@@ -241,6 +251,10 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
executeIntent( executeIntent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
PermissionConstants.PERMISSION_CODE_SYSTEM_ALERT_WINDOW); PermissionConstants.PERMISSION_CODE_SYSTEM_ALERT_WINDOW);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permission == PermissionConstants.PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES) {
executeIntent(
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,
PermissionConstants.PERMISSION_CODE_REQUEST_INSTALL_PACKAGES);
} else { } else {
permissionsToRequest.addAll(names); permissionsToRequest.addAll(names);
} }
...@@ -343,6 +357,14 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener, ...@@ -343,6 +357,14 @@ final class PermissionManager implements PluginRegistry.ActivityResultListener,
} }
} }
if (permission == PermissionConstants.PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return context.getPackageManager().canRequestPackageInstalls()
? PermissionConstants.PERMISSION_STATUS_GRANTED
: PermissionConstants.PERMISSION_STATUS_DENIED;
}
}
final int permissionStatus = ContextCompat.checkSelfPermission(context, name); final int permissionStatus = ContextCompat.checkSelfPermission(context, name);
if (permissionStatus != PackageManager.PERMISSION_GRANTED) { if (permissionStatus != PackageManager.PERMISSION_GRANTED) {
return PermissionConstants.PERMISSION_STATUS_DENIED; return PermissionConstants.PERMISSION_STATUS_DENIED;
......
...@@ -65,6 +65,8 @@ public class PermissionUtils { ...@@ -65,6 +65,8 @@ public class PermissionUtils {
return PermissionConstants.PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE; return PermissionConstants.PERMISSION_GROUP_MANAGE_EXTERNAL_STORAGE;
case Manifest.permission.SYSTEM_ALERT_WINDOW: case Manifest.permission.SYSTEM_ALERT_WINDOW:
return PermissionConstants.PERMISSION_GROUP_SYSTEM_ALERT_WINDOW; return PermissionConstants.PERMISSION_GROUP_SYSTEM_ALERT_WINDOW;
case Manifest.permission.REQUEST_INSTALL_PACKAGES:
return PermissionConstants.PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES;
default: default:
return PermissionConstants.PERMISSION_GROUP_UNKNOWN; return PermissionConstants.PERMISSION_GROUP_UNKNOWN;
} }
...@@ -231,6 +233,13 @@ public class PermissionUtils { ...@@ -231,6 +233,13 @@ public class PermissionUtils {
permissionNames.add(Manifest.permission.SYSTEM_ALERT_WINDOW); permissionNames.add(Manifest.permission.SYSTEM_ALERT_WINDOW);
break; break;
case PermissionConstants.PERMISSION_GROUP_REQUEST_INSTALL_PACKAGES:
// The REQUEST_INSTALL_PACKAGES permission is introduced in Android M, meaning we should
// not handle permissions on pre Android M devices.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && hasPermissionInManifest(context, permissionNames, Manifest.permission.REQUEST_INSTALL_PACKAGES ))
permissionNames.add(Manifest.permission.REQUEST_INSTALL_PACKAGES);
break;
case PermissionConstants.PERMISSION_GROUP_NOTIFICATION: case PermissionConstants.PERMISSION_GROUP_NOTIFICATION:
case PermissionConstants.PERMISSION_GROUP_MEDIA_LIBRARY: case PermissionConstants.PERMISSION_GROUP_MEDIA_LIBRARY:
case PermissionConstants.PERMISSION_GROUP_PHOTOS: case PermissionConstants.PERMISSION_GROUP_PHOTOS:
......
...@@ -69,6 +69,9 @@ ...@@ -69,6 +69,9 @@
<!-- Permissions options for the `system alert windows` group --> <!-- Permissions options for the `system alert windows` group -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- Permissions options for the `request install packages` group -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<application <application
android:name="io.flutter.app.FlutterApplication" android:name="io.flutter.app.FlutterApplication"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
......
...@@ -43,11 +43,13 @@ class _PermissionHandlerWidgetState extends State<PermissionHandlerWidget> { ...@@ -43,11 +43,13 @@ class _PermissionHandlerWidgetState extends State<PermissionHandlerWidget> {
permission != Permission.accessMediaLocation && permission != Permission.accessMediaLocation &&
permission != Permission.activityRecognition && permission != Permission.activityRecognition &&
permission != Permission.manageExternalStorage && permission != Permission.manageExternalStorage &&
permission != Permission.systemAlertWindow; permission != Permission.systemAlertWindow &&
permission != Permission.requestInstallPackages;
} else { } else {
return permission != Permission.unknown && return permission != Permission.unknown &&
permission != Permission.mediaLibrary && permission != Permission.mediaLibrary &&
permission != Permission.photos && permission != Permission.photos &&
permission != Permission.photosAddOnly &&
permission != Permission.reminders; permission != Permission.reminders;
} }
}) })
......
name: permission_handler name: permission_handler
description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions. description: Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
version: 7.1.1 version: 7.2.0
homepage: https://github.com/baseflowit/flutter-permission-handler homepage: https://github.com/baseflowit/flutter-permission-handler
flutter: flutter:
...@@ -16,7 +16,7 @@ dependencies: ...@@ -16,7 +16,7 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
meta: ^1.3.0 meta: ^1.3.0
permission_handler_platform_interface: ^3.3.0 permission_handler_platform_interface: ^3.4.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment