Przeglądaj źródła

android: implement the PermissionAwareActivity interface

This makes the PermissionsAndroid builtin module work.

Introduce the JitsiMeetActivityInterface, which defines the interface that
activities using JitsiMeetView directly must implement in order to ensure full
functionality.
j8
Saúl Ibarra Corretgé 6 lat temu
rodzic
commit
388c906312

+ 19
- 1
android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java Wyświetl plik

@@ -27,6 +27,7 @@ import android.view.KeyEvent;
27 27
 
28 28
 import com.facebook.react.ReactInstanceManager;
29 29
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
30
+import com.facebook.react.modules.core.PermissionListener;
30 31
 
31 32
 import java.net.URL;
32 33
 
@@ -42,7 +43,7 @@ import java.net.URL;
42 43
  * {@code JitsiMeetView} static methods.
43 44
  */
44 45
 public class JitsiMeetActivity
45
-    extends AppCompatActivity {
46
+    extends AppCompatActivity implements JitsiMeetActivityInterface {
46 47
 
47 48
     /**
48 49
      * The request code identifying requests for the permission to draw on top
@@ -260,6 +261,15 @@ public class JitsiMeetActivity
260 261
         ReactActivityLifecycleCallbacks.onNewIntent(intent);
261 262
     }
262 263
 
264
+    // https://developer.android.com/reference/android/support/v4/app/ActivityCompat.OnRequestPermissionsResultCallback
265
+    @Override
266
+    public void onRequestPermissionsResult(
267
+            final int requestCode,
268
+            final String[] permissions,
269
+            final int[] grantResults) {
270
+        ReactActivityLifecycleCallbacks.onRequestPermissionsResult(requestCode, permissions, grantResults);
271
+    }
272
+
263 273
     @Override
264 274
     protected void onResume() {
265 275
         super.onResume();
@@ -283,6 +293,14 @@ public class JitsiMeetActivity
283 293
         }
284 294
     }
285 295
 
296
+    /**
297
+     * Implementation of the {@code PermissionAwareActivity} interface.
298
+     */
299
+    @Override
300
+    public void requestPermissions(String[] permissions, int requestCode, PermissionListener listener) {
301
+        ReactActivityLifecycleCallbacks.requestPermissions(this, permissions, requestCode, listener);
302
+    }
303
+
286 304
     /**
287 305
      *
288 306
      * @see JitsiMeetView#setDefaultURL(URL)

+ 15
- 0
android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityInterface.java Wyświetl plik

@@ -0,0 +1,15 @@
1
+package org.jitsi.meet.sdk;
2
+
3
+import android.support.v4.app.ActivityCompat;
4
+
5
+import com.facebook.react.modules.core.PermissionAwareActivity;
6
+
7
+/**
8
+ * This interface serves as the umbrella interface that applications not using
9
+ * {@code JitsiMeetActivity} must implement in order to ensure full
10
+ * functionality.
11
+ */
12
+public interface JitsiMeetActivityInterface
13
+    extends ActivityCompat.OnRequestPermissionsResultCallback,
14
+            PermissionAwareActivity {
15
+}

+ 38
- 0
android/sdk/src/main/java/org/jitsi/meet/sdk/ReactActivityLifecycleCallbacks.java Wyświetl plik

@@ -16,11 +16,16 @@
16 16
 
17 17
 package org.jitsi.meet.sdk;
18 18
 
19
+import android.annotation.TargetApi;
19 20
 import android.app.Activity;
20 21
 import android.content.Intent;
22
+import android.os.Build;
21 23
 
24
+import com.calendarevents.CalendarEventsPackage;
22 25
 import com.facebook.react.ReactInstanceManager;
26
+import com.facebook.react.bridge.Callback;
23 27
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
28
+import com.facebook.react.modules.core.PermissionListener;
24 29
 
25 30
 /**
26 31
  * Helper class to encapsulate the work which needs to be done on
@@ -28,6 +33,13 @@ import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
28 33
  * it.
29 34
  */
30 35
 public class ReactActivityLifecycleCallbacks {
36
+    /**
37
+     * Needed for making sure this class working with the "PermissionsAndroid"
38
+     * React Native module.
39
+     */
40
+    private static PermissionListener permissionListener;
41
+    private static Callback permissionsCallback;
42
+
31 43
     /**
32 44
      * {@link Activity} lifecycle method which should be called from
33 45
      * {@link Activity#onBackPressed} so we can do the required internal
@@ -107,6 +119,11 @@ public class ReactActivityLifecycleCallbacks {
107 119
         if (reactInstanceManager != null) {
108 120
             reactInstanceManager.onHostResume(activity, defaultBackButtonImpl);
109 121
         }
122
+
123
+        if (permissionsCallback != null) {
124
+            permissionsCallback.invoke();
125
+            permissionsCallback = null;
126
+        }
110 127
     }
111 128
 
112 129
     /**
@@ -126,4 +143,25 @@ public class ReactActivityLifecycleCallbacks {
126 143
             reactInstanceManager.onNewIntent(intent);
127 144
         }
128 145
     }
146
+
147
+    public static void onRequestPermissionsResult(
148
+        final int requestCode,
149
+        final String[] permissions,
150
+        final int[] grantResults) {
151
+        permissionsCallback = new Callback() {
152
+            @Override
153
+            public void invoke(Object... args) {
154
+                if (permissionListener != null
155
+                        && permissionListener.onRequestPermissionsResult(requestCode, permissions, grantResults)) {
156
+                    permissionListener = null;
157
+                }
158
+            }
159
+        };
160
+    }
161
+
162
+    @TargetApi(Build.VERSION_CODES.M)
163
+    public static void requestPermissions(Activity activity, String[] permissions, int requestCode, PermissionListener listener) {
164
+        permissionListener = listener;
165
+        activity.requestPermissions(permissions, requestCode);
166
+    }
129 167
 }

Ładowanie…
Anuluj
Zapisz