Commit e0b76c2a by Maurits van Beusekom Committed by GitHub

Add support for the Permission.assistant in all platforms. (#1267)

* Adding SiriKit permissions (#1140)

* Adding SiriKit permissions

* Fix tests

---------

Co-authored-by: Maurits van Beusekom <maurits@vnbskm.nl>

* Reserves the assistant permission on no-op platforms

* Adds support to example application

* Remove pubspec overrides

* Fix formatting

* Revert app facing package to main

* Revert so only platform implementation changes are included

* Add support for Permission.assistant to platforms

* Update permission_handler_android/CHANGELOG.md

Co-authored-by: TimHoogstrate <tim566@hotmail.com>

* Update permission_handler_html/CHANGELOG.md

Co-authored-by: TimHoogstrate <tim566@hotmail.com>

* Update permission_handler_windows/CHANGELOG.md

Co-authored-by: TimHoogstrate <tim566@hotmail.com>

---------

Co-authored-by: Baptiste DUPUCH <baptiste.dupuch@gmail.com>
Co-authored-by: TimHoogstrate <tim566@hotmail.com>
parent 0bf4d6f0
## 12.0.3
* Updates the dependency on `permission_handler_platform_interface` to version 4.1.0 (SiriKit support is only available for iOS or macOS).
## 12.0.2
* Fixes bug where Android activity is leaked when embedded in native Android application.
......
......@@ -60,6 +60,7 @@ final class PermissionConstants {
static final int PERMISSION_GROUP_SENSORS_ALWAYS = 35;
static final int PERMISSION_GROUP_CALENDAR_WRITE_ONLY = 36;
static final int PERMISSION_GROUP_CALENDAR_FULL_ACCESS = 37;
static final int PERMISSION_GROUP_ASSISTANT = 38;
@Retention(RetentionPolicy.SOURCE)
@IntDef({
......@@ -97,7 +98,8 @@ final class PermissionConstants {
PERMISSION_GROUP_AUDIO,
PERMISSION_GROUP_SCHEDULE_EXACT_ALARM,
PERMISSION_GROUP_CALENDAR_WRITE_ONLY,
PERMISSION_GROUP_CALENDAR_FULL_ACCESS
PERMISSION_GROUP_CALENDAR_FULL_ACCESS,
PERMISSION_GROUP_ASSISTANT
})
@interface PermissionGroup {
}
......
......@@ -41,7 +41,8 @@ class _PermissionHandlerWidgetState extends State<PermissionHandlerWidget> {
permission != Permission.reminders &&
permission != Permission.bluetooth &&
permission != Permission.appTrackingTransparency &&
permission != Permission.criticalAlerts;
permission != Permission.criticalAlerts &&
permission != Permission.assistant;
})
.map((permission) => PermissionWidget(permission))
.toList()),
......
name: permission_handler_android
description: Permission plugin for Flutter. This plugin provides the Android API to request and check permissions.
homepage: https://github.com/baseflow/flutter-permission-handler
version: 12.0.2
version: 12.0.3
environment:
sdk: ">=2.15.0 <4.0.0"
......@@ -18,7 +18,7 @@ flutter:
dependencies:
flutter:
sdk: flutter
permission_handler_platform_interface: ^4.0.0
permission_handler_platform_interface: ^4.1.0
dev_dependencies:
flutter_lints: ^1.0.4
......
## 9.3.0
* Adds support to request authorization to access SiriKit via the `Permission.assistant` permission.
## 9.2.0
* Adds the support for `Permission.calendarWriteOnly` and `Permission.calendarFullAccess` permissions which are introduced in iOS 17+.
## 9.1.4
......
......@@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>11.0</string>
<string>12.0</string>
</dict>
</plist>
# Uncomment this line to define a global platform for your project
# platform :ios, '11.0'
# platform :ios, '12.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
......@@ -71,7 +71,7 @@ post_install do |installer|
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=1',
## dart: PermissionGroup.notification
'PERMISSION_NOTIFICATIONS=1',
......@@ -89,6 +89,9 @@ post_install do |installer|
## dart: PermissionGroup.criticalAlerts
'PERMISSION_CRITICAL_ALERTS=1',
## dart: PermissionGroup.criticalAlerts
'PERMISSION_ASSISTANT=1',
]
end
......
......@@ -47,6 +47,7 @@
C446183715B92022DDB68882 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CEA40B36DE135D81D16B7399 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
DA7CB50DE8057A7A8D126AC9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
F6BD02742B56D78D00C59EAA /* RunnerDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerDebug.entitlements; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
......@@ -112,6 +113,7 @@
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
F6BD02742B56D78D00C59EAA /* RunnerDebug.entitlements */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
......@@ -342,7 +344,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
......@@ -428,7 +430,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
......@@ -477,7 +479,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
......@@ -494,6 +496,7 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/RunnerDebug.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 7624MWN53C;
ENABLE_BITCODE = NO;
......
......@@ -101,6 +101,11 @@
<!-- Permission options for the `appTrackingTransparency` -->
<key>NSUserTrackingUsageDescription</key>
<string>appTrackingTransparency</string>
<!-- Permission options for the `assistant` group -->
<key>NSSiriUsageDescription</key>
<string>The example app would like access to Siri Kit to demonstrate requesting authorization.</string>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.siri</key>
<true/>
</dict>
</plist>
......@@ -102,7 +102,6 @@
#define PERMISSION_APP_TRACKING_TRANSPARENCY 0
#endif
// ios: PermissionGroupCriticalAlerts
// Info.plist: UNAuthorizationOptionCriticalAlert
// dart: PermissionGroup.criticalAlerts
......@@ -110,6 +109,13 @@
#define PERMISSION_CRITICAL_ALERTS 0
#endif
// ios: PermissionGroupAssistant
// Info.plist: [NSSiriUsageDescription]
// dart: PermissionGroup.assistant
#ifndef PERMISSION_ASSISTANT
#define PERMISSION_ASSISTANT 0
#endif
// ios: PermissionGroupCalendarFullAccess
// Info.plist: [NSCalendarFullAccessUsageDescription]
// dart: PermissionGroup.calendarFullAccess
......@@ -155,7 +161,8 @@ typedef NS_ENUM(int, PermissionGroup) {
PermissionGroupScheduleExactAlarm,
PermissionGroupSensorsAlways,
PermissionGroupCalendarWriteOnly,
PermissionGroupCalendarFullAccess
PermissionGroupCalendarFullAccess,
PermissionGroupAssistant
};
typedef NS_ENUM(int, PermissionStatus) {
......
......@@ -25,6 +25,7 @@
#import "UnknownPermissionStrategy.h"
#import "NotificationPermissionStrategy.h"
#import "CriticalAlertsPermissionStrategy.h"
#import "AssistantPermissionStrategy.h"
#import "PermissionHandlerEnums.h"
#import "Codec.h"
......
......@@ -147,6 +147,8 @@
return [AppTrackingTransparencyPermissionStrategy new];
case PermissionGroupCriticalAlerts:
return [CriticalAlertsPermissionStrategy new];
case PermissionGroupAssistant:
return [AssistantPermissionStrategy new];
default:
return [UnknownPermissionStrategy new];
}
......
//
// Created by Baptiste Dupuch(dupuchba) on 2023-09-04.
// Copyright (c) 2019 The Chromium Authors. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "PermissionStrategy.h"
#if PERMISSION_ASSISTANT
#import <Intents/Intents.h>
@interface AssistantPermissionStrategy : NSObject <PermissionStrategy>
@end
#else
#import "UnknownPermissionStrategy.h"
@interface AssistantPermissionStrategy : UnknownPermissionStrategy
@end
#endif
//
// Assistant.m
// permission_handler
//
// Created by Baptiste Dupuch (dupuchba) on Tue Sep 5 08:50:04 2023
//
#import "AssistantPermissionStrategy.h"
#if PERMISSION_ASSISTANT
@implementation AssistantPermissionStrategy
- (PermissionStatus)checkPermissionStatus:(PermissionGroup)permission {
if (@available(iOS 10, *)) {
INSiriAuthorizationStatus assistantPermission = [INPreferences siriAuthorizationStatus];
return [AssistantPermissionStrategy parsePermission:assistantPermission];
}
return PermissionStatusGranted;
}
- (void)checkServiceStatus:(PermissionGroup)permission completionHandler:(ServiceStatusHandler)completionHandler {
completionHandler(ServiceStatusNotApplicable);
}
- (void)requestPermission:(PermissionGroup)permission completionHandler:(PermissionStatusHandler)completionHandler {
PermissionStatus status = [self checkPermissionStatus:permission];
if (status != PermissionStatusDenied) {
completionHandler(status);
return;
}
if (@available(iOS 10, *)){
[INPreferences requestSiriAuthorization:^(INSiriAuthorizationStatus status) {
PermissionStatus permissionStatus = [AssistantPermissionStrategy parsePermission:status];
completionHandler(permissionStatus);
}];
} else {
completionHandler(PermissionStatusGranted);
}
}
+ (PermissionStatus)parsePermission:(INSiriAuthorizationStatus)assistantPermission API_AVAILABLE(ios(10)){
switch(assistantPermission){
case INSiriAuthorizationStatusAuthorized:
return PermissionStatusGranted;
case INSiriAuthorizationStatusRestricted:
return PermissionStatusRestricted;
case INSiriAuthorizationStatusDenied:
return PermissionStatusPermanentlyDenied;
case INSiriAuthorizationStatusNotDetermined:
return PermissionStatusDenied;
}
}
@end
#else
@implementation AssistantPermissionStrategy
@end
#endif
......@@ -2,7 +2,7 @@ name: permission_handler_apple
description: Permission plugin for Flutter. This plugin provides the iOS API to request and check permissions.
repository: https://github.com/baseflow/flutter-permission-handler
issue_tracker: https://github.com/Baseflow/flutter-permission-handler/issues
version: 9.2.0
version: 9.3.0
environment:
sdk: ">=2.15.0 <4.0.0"
......@@ -18,7 +18,7 @@ flutter:
dependencies:
flutter:
sdk: flutter
permission_handler_platform_interface: ^4.0.0
permission_handler_platform_interface: ^4.1.0
dev_dependencies:
flutter_lints: ^1.0.4
......
## 0.1.1
* Updates the dependency on `permission_handler_platform_interface` to version 4.1.0 (SiriKit support is only available for iOS and macOS).
## 0.1.0+2
* Fixes plugin initialization for non-https web app.
......
name: permission_handler_html
description: Permission plugin for Flutter. This plugin provides the web API to request and check permissions.
version: 0.1.0+2
version: 0.1.1
homepage: https://github.com/baseflow/flutter-permission-handler
environment:
......@@ -12,7 +12,7 @@ dependencies:
sdk: flutter
flutter_web_plugins:
sdk: flutter
permission_handler_platform_interface: ^4.0.2
permission_handler_platform_interface: ^4.1.0
dev_dependencies:
flutter_test:
......
## 0.2.1
* Updates the dependency on `permission_handler_platform_interface` to version 4.1.0 (SiriKit support is only available for iOS and macOS).
## 0.2.0
* Implements the `Permission.calendarWriteOnly` and `Permission.calendarFullAccess` permissions.
......
name: permission_handler_windows
description: Permission plugin for Flutter. This plugin provides the Windows API to request and check permissions.
version: 0.2.0
version: 0.2.1
homepage: https://github.com/baseflow/flutter-permission-handler
flutter:
......@@ -13,7 +13,7 @@ flutter:
dependencies:
flutter:
sdk: flutter
permission_handler_platform_interface: ^4.0.0
permission_handler_platform_interface: ^4.1.0
dev_dependencies:
flutter_test:
......
......@@ -48,7 +48,8 @@ public:
SCHEDULE_EXACT_ALARM = 34,
SENSORS_ALWAYS = 35,
CALENDAR_WRITE_ONLY = 36,
CALENDAR_FULL_ACCESS = 37
CALENDAR_FULL_ACCESS = 37,
ASSISTANT = 38
};
//PERMISSION_STATUS
......
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