From 251ea7920d2eea8495ce1b3477464321edb63bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 1 May 2019 12:15:43 +0200 Subject: [PATCH] android: use PermissionListener to avoid Android manual steps --- .../com/calendarevents/CalendarEvents.java | 21 +++++++++++++------ .../calendarevents/CalendarEventsPackage.java | 4 ---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/android/src/main/java/com/calendarevents/CalendarEvents.java b/android/src/main/java/com/calendarevents/CalendarEvents.java index f24c09b..8578167 100644 --- a/android/src/main/java/com/calendarevents/CalendarEvents.java +++ b/android/src/main/java/com/calendarevents/CalendarEvents.java @@ -11,7 +11,6 @@ import android.database.DatabaseUtils; import android.net.Uri; import android.provider.CalendarContract; -import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.database.Cursor; import android.accounts.Account; @@ -30,6 +29,8 @@ import com.facebook.react.bridge.WritableNativeArray; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.bridge.Dynamic; +import com.facebook.react.modules.core.PermissionAwareActivity; +import com.facebook.react.modules.core.PermissionListener; import java.sql.Array; import java.text.ParseException; @@ -41,7 +42,7 @@ import java.util.TimeZone; import android.util.Log; -public class CalendarEvents extends ReactContextBaseJavaModule { +public class CalendarEvents extends ReactContextBaseJavaModule implements PermissionListener { private static int PERMISSION_REQUEST_CODE = 37; private final ReactContext reactContext; @@ -66,15 +67,21 @@ private void requestCalendarReadWritePermission(final Promise promise) promise.reject("E_ACTIVITY_DOES_NOT_EXIST", "Activity doesn't exist"); return; } + if (!(currentActivity instanceof PermissionAwareActivity)) { + promise.reject("E_ACTIVITY_NOT_PERMISSION_AWARE", "Activity does not implement the PermissionAwareActivity interface"); + return; + } + PermissionAwareActivity activity = (PermissionAwareActivity)currentActivity; PERMISSION_REQUEST_CODE++; permissionsPromises.put(PERMISSION_REQUEST_CODE, promise); - ActivityCompat.requestPermissions(currentActivity, new String[]{ + activity.requestPermissions(new String[]{ Manifest.permission.WRITE_CALENDAR, Manifest.permission.READ_CALENDAR - }, PERMISSION_REQUEST_CODE); + }, PERMISSION_REQUEST_CODE, this); } - public static void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + @Override + public boolean onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { if (permissionsPromises.containsKey(requestCode)) { // If request is cancelled, the result arrays are empty. @@ -89,6 +96,8 @@ public static void onRequestPermissionsResult(int requestCode, String permission } permissionsPromises.remove(requestCode); } + + return permissionsPromises.size() == 0; } private boolean haveCalendarReadWritePermissions() { @@ -1324,4 +1333,4 @@ public void uriForCalendar(Promise promise) { promise.resolve(CalendarContract.Events.CONTENT_URI.toString()); } //endregion -} \ No newline at end of file +} diff --git a/android/src/main/java/com/calendarevents/CalendarEventsPackage.java b/android/src/main/java/com/calendarevents/CalendarEventsPackage.java index b975aa6..0b04b1a 100644 --- a/android/src/main/java/com/calendarevents/CalendarEventsPackage.java +++ b/android/src/main/java/com/calendarevents/CalendarEventsPackage.java @@ -25,8 +25,4 @@ public List createNativeModules( return modules; } - - public static void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - CalendarEvents.onRequestPermissionsResult(requestCode, permissions, grantResults); - } }