Browse Source

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é 7 years ago
parent
commit
388c906312

+ 19
- 1
android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivity.java View File

27
 
27
 
28
 import com.facebook.react.ReactInstanceManager;
28
 import com.facebook.react.ReactInstanceManager;
29
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
29
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
30
+import com.facebook.react.modules.core.PermissionListener;
30
 
31
 
31
 import java.net.URL;
32
 import java.net.URL;
32
 
33
 
42
  * {@code JitsiMeetView} static methods.
43
  * {@code JitsiMeetView} static methods.
43
  */
44
  */
44
 public class JitsiMeetActivity
45
 public class JitsiMeetActivity
45
-    extends AppCompatActivity {
46
+    extends AppCompatActivity implements JitsiMeetActivityInterface {
46
 
47
 
47
     /**
48
     /**
48
      * The request code identifying requests for the permission to draw on top
49
      * The request code identifying requests for the permission to draw on top
260
         ReactActivityLifecycleCallbacks.onNewIntent(intent);
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
     @Override
273
     @Override
264
     protected void onResume() {
274
     protected void onResume() {
265
         super.onResume();
275
         super.onResume();
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
      * @see JitsiMeetView#setDefaultURL(URL)
306
      * @see JitsiMeetView#setDefaultURL(URL)

+ 15
- 0
android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityInterface.java View File

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 View File

16
 
16
 
17
 package org.jitsi.meet.sdk;
17
 package org.jitsi.meet.sdk;
18
 
18
 
19
+import android.annotation.TargetApi;
19
 import android.app.Activity;
20
 import android.app.Activity;
20
 import android.content.Intent;
21
 import android.content.Intent;
22
+import android.os.Build;
21
 
23
 
24
+import com.calendarevents.CalendarEventsPackage;
22
 import com.facebook.react.ReactInstanceManager;
25
 import com.facebook.react.ReactInstanceManager;
26
+import com.facebook.react.bridge.Callback;
23
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
27
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
28
+import com.facebook.react.modules.core.PermissionListener;
24
 
29
 
25
 /**
30
 /**
26
  * Helper class to encapsulate the work which needs to be done on
31
  * Helper class to encapsulate the work which needs to be done on
28
  * it.
33
  * it.
29
  */
34
  */
30
 public class ReactActivityLifecycleCallbacks {
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
      * {@link Activity} lifecycle method which should be called from
44
      * {@link Activity} lifecycle method which should be called from
33
      * {@link Activity#onBackPressed} so we can do the required internal
45
      * {@link Activity#onBackPressed} so we can do the required internal
107
         if (reactInstanceManager != null) {
119
         if (reactInstanceManager != null) {
108
             reactInstanceManager.onHostResume(activity, defaultBackButtonImpl);
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
             reactInstanceManager.onNewIntent(intent);
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
 }

Loading…
Cancel
Save