Skip to content

Commit 1bead2d

Browse files
committed
Production release 1.0.0
2 parents 2fbc01a + 2d0802b commit 1bead2d

31 files changed

+530
-248
lines changed

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
## 0.0.1
1+
## 1.0.0
22

3-
* TODO: Describe initial release.
3+
* Initial release.

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ group 'com.baseflow.permissionhandler'
22
version '1.0-SNAPSHOT'
33

44
buildscript {
5-
ext.kotlin_version = '1.1.51'
5+
ext.kotlin_version = '1.2.51'
66
repositories {
77
google()
88
jcenter()

android/src/main/kotlin/com/baseflow/permissionhandler/PermissionHandlerPlugin.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ
9999
call.method == "requestPermissions" -> {
100100
if (mResult != null) {
101101
result.error(
102-
"ERROR_ALREADY_REQUESTED_PERMISSIONS",
102+
"ERROR_ALREADY_REQUESTING_PERMISSIONS",
103103
"A request for permissions is already running, please wait for it to finish before doing another request (note that you can request multiple permissions at the same time).",
104104
null)
105105
}
@@ -220,10 +220,14 @@ class PermissionHandlerPlugin(private val registrar: Registrar, private var requ
220220
}
221221
}
222222

223-
ActivityCompat.requestPermissions(
224-
registrar.activity(),
225-
permissionsToRequest.toTypedArray(),
226-
permissionCode)
223+
if (permissionsToRequest.count() > 0) {
224+
ActivityCompat.requestPermissions(
225+
registrar.activity(),
226+
permissionsToRequest.toTypedArray(),
227+
permissionCode)
228+
} else if (mRequestResults.count() > 0) {
229+
processResult()
230+
}
227231
}
228232

229233
private fun handlePermissionsRequest(permissions: Array<String>, grantResults: IntArray) {
Binary file not shown.

example/android/.idea/codeStyles/Project.xml

Lines changed: 0 additions & 29 deletions
This file was deleted.

example/android/.idea/gradle.xml

Lines changed: 0 additions & 19 deletions
This file was deleted.

example/android/.idea/misc.xml

Lines changed: 0 additions & 34 deletions
This file was deleted.

example/android/.idea/modules.xml

Lines changed: 0 additions & 10 deletions
This file was deleted.

example/android/.idea/runConfigurations.xml

Lines changed: 0 additions & 12 deletions
This file was deleted.

example/android/app/src/main/AndroidManifest.xml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,28 @@
66
to allow setting breakpoints, to provide hot reload, etc.
77
-->
88
<uses-permission android:name="android.permission.INTERNET"/>
9-
<uses-permission android:name="android.permission.READ_CALENDAR"/>
10-
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
9+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
10+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
11+
<uses-permission android:name="android.permission.RECEIVE_MMS" />
12+
<uses-permission android:name="android.permission.RECEIVE_SMS" />
13+
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH" />
14+
<uses-permission android:name="android.permission.RECORD_AUDIO" />
15+
<uses-permission android:name="android.permission.CALL_PHONE" />
16+
<uses-permission android:name="android.permission.CAMERA" />
17+
<uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
18+
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
19+
<uses-permission android:name="android.permission.READ_CALL_LOG" />
20+
<uses-permission android:name="android.permission.READ_CALENDAR" />
21+
<uses-permission android:name="android.permission.READ_CONTACTS" />
22+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
23+
<uses-permission android:name="android.permission.READ_SMS" />
24+
<uses-permission android:name="android.permission.SEND_SMS" />
25+
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
26+
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
27+
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
28+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
29+
<uses-permission android:name="android.permission.SENSORS" />
30+
<uses-permission android:name="android.permission.BODY_SENSORS" />
1131

1232
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
1333
calls FlutterMain.startInitialization(this); in its onCreate method.

example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@
444444
PRODUCT_NAME = "$(TARGET_NAME)";
445445
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
446446
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
447-
SWIFT_SWIFT3_OBJC_INFERENCE = On;
447+
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
448448
SWIFT_VERSION = 4.0;
449449
VERSIONING_SYSTEM = "apple-generic";
450450
};
@@ -471,7 +471,7 @@
471471
PRODUCT_BUNDLE_IDENTIFIER = com.baseflow.permissionHandlerExample;
472472
PRODUCT_NAME = "$(TARGET_NAME)";
473473
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
474-
SWIFT_SWIFT3_OBJC_INFERENCE = On;
474+
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
475475
SWIFT_VERSION = 4.0;
476476
VERSIONING_SYSTEM = "apple-generic";
477477
};

example/ios/Runner/Info.plist

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,13 @@
4646
<key>UIViewControllerBasedStatusBarAppearance</key>
4747
<false/>
4848
<key>NSLocationWhenInUseUsageDescription</key>
49-
<string>Can I haz location?</string>
49+
<string>Need location when in use</string>
50+
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
51+
<string>Always and when in use!</string>
52+
<key>NSLocationUsageDescription</key>
53+
<string>Older devices need location.</string>
54+
<key>NSLocationAlwaysUsageDescription</key>
55+
<string>Can I haz location always?</string>
5056
<key>NSAppleMusicUsageDescription</key>
5157
<string>Music!</string>
5258
<key>NSBluetoothPeripheralUsageDescription</key>

example/lib/main.dart

Lines changed: 87 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,114 @@
1-
import 'dart:async';
1+
import 'dart:io';
22

33
import 'package:flutter/material.dart';
4-
import 'package:flutter/services.dart';
54
import 'package:permission_handler/permission_enums.dart';
65
import 'package:permission_handler/permission_handler.dart';
76

87
void main() => runApp(new MyApp());
98

10-
class MyApp extends StatefulWidget {
9+
class MyApp extends StatelessWidget {
1110
@override
12-
_MyAppState createState() => new _MyAppState();
11+
Widget build(BuildContext context) {
12+
return new MaterialApp(
13+
home: new Scaffold(
14+
appBar: new AppBar(
15+
title: const Text('Plugin example app'),
16+
actions: <Widget>[
17+
IconButton(
18+
icon: const Icon(Icons.settings),
19+
onPressed: () {
20+
PermissionHandler.openAppSettings();
21+
},
22+
)
23+
],
24+
),
25+
body: new Center(
26+
child: new ListView(
27+
children: PermissionGroup.values
28+
.where((PermissionGroup permission) {
29+
if (Platform.isIOS) {
30+
return permission != PermissionGroup.unknown &&
31+
permission != PermissionGroup.phone &&
32+
permission != PermissionGroup.sms &&
33+
permission != PermissionGroup.storage;
34+
} else {
35+
return permission != PermissionGroup.unknown &&
36+
permission != PermissionGroup.mediaLibrary &&
37+
permission != PermissionGroup.photos &&
38+
permission != PermissionGroup.reminders;
39+
}
40+
})
41+
.map((PermissionGroup permission) =>
42+
new PermissionWidget(permission))
43+
.toList()),
44+
),
45+
));
46+
}
47+
}
48+
49+
class PermissionWidget extends StatefulWidget {
50+
final PermissionGroup _permissionGroup;
51+
52+
const PermissionWidget(this._permissionGroup);
53+
54+
@override
55+
_PermissionState createState() => _PermissionState(_permissionGroup);
1356
}
1457

15-
class _MyAppState extends State<MyApp> {
16-
String _permissionStatus = 'Unknown';
58+
class _PermissionState extends State<PermissionWidget> {
59+
final PermissionGroup _permissionGroup;
60+
PermissionStatus _permissionStatus = PermissionStatus.unknown;
61+
62+
_PermissionState(this._permissionGroup);
1763

1864
@override
1965
void initState() {
2066
super.initState();
21-
initPlatformState();
22-
}
2367

24-
// Platform messages are asynchronous, so we initialize in an async method.
25-
Future<void> initPlatformState() async {
26-
PermissionStatus permissionStatus;
27-
28-
// Platform messages may fail, so we use a try/catch PlatformException.
29-
try {
30-
permissionStatus = await PermissionHandler
31-
.checkPermissionStatus(PermissionGroup.calendar);
32-
33-
/*
34-
if (permissionStatus != PermissionStatus.granted) {
35-
final bool shouldShowRationale = await PermissionHandler
36-
.shouldShowRequestPermissionRationale(PermissionGroup.calendar);
37-
38-
if (shouldShowRationale) {
39-
final Map<PermissionGroup, PermissionStatus> permissions =
40-
await PermissionHandler.requestPermissions(
41-
<PermissionGroup>[PermissionGroup.calendar]);
42-
43-
if (permissions.containsKey(PermissionGroup.calendar)) {
44-
permissionStatus = permissions[PermissionGroup.calendar];
45-
}
46-
}
47-
}
48-
*/
49-
} on PlatformException {
50-
permissionStatus = PermissionStatus.unknown;
51-
}
68+
_listenForPermissionStatus();
69+
}
5270

53-
// If the widget was removed from the tree while the asynchronous platform
54-
// message was in flight, we want to discard the reply rather than calling
55-
// setState to update our non-existent appearance.
56-
if (!mounted) {
57-
return;
58-
}
71+
void _listenForPermissionStatus() async {
72+
final PermissionStatus status =
73+
await PermissionHandler.checkPermissionStatus(_permissionGroup);
5974

6075
setState(() {
61-
_permissionStatus = permissionStatus.toString();
76+
_permissionStatus = status;
6277
});
6378
}
6479

80+
Color getPermissionColor() {
81+
switch (_permissionStatus) {
82+
case PermissionStatus.denied:
83+
return Colors.red;
84+
case PermissionStatus.granted:
85+
return Colors.green;
86+
default:
87+
return Colors.grey;
88+
}
89+
}
90+
6591
@override
6692
Widget build(BuildContext context) {
67-
return new MaterialApp(
68-
home: new Scaffold(
69-
appBar: new AppBar(
70-
title: const Text('Plugin example app'),
71-
),
72-
body: new Center(
73-
child: new Column(
74-
children: <Widget>[
75-
new Text('Running on: $_permissionStatus\n'),
76-
new RaisedButton(
77-
child: const Text('Open settings'),
78-
onPressed: () async =>
79-
await PermissionHandler.openAppSettings(),
80-
),
81-
],
82-
),
83-
),
93+
return new ListTile(
94+
title: new Text(_permissionGroup.toString()),
95+
subtitle: new Text(
96+
_permissionStatus.toString(),
97+
style: new TextStyle(color: getPermissionColor()),
8498
),
99+
onTap: () async {
100+
requestPermission(_permissionGroup);
101+
},
85102
);
86103
}
104+
105+
void requestPermission(PermissionGroup permission) async {
106+
final List<PermissionGroup> permissions = <PermissionGroup>[permission];
107+
final Map<PermissionGroup, PermissionStatus> permissionRequestResult =
108+
await PermissionHandler.requestPermissions(permissions);
109+
110+
setState(() {
111+
_permissionStatus = permissionRequestResult[permission];
112+
});
113+
}
87114
}

0 commit comments

Comments
 (0)