-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathPipAndroidModule.java
More file actions
77 lines (62 loc) · 2.58 KB
/
PipAndroidModule.java
File metadata and controls
77 lines (62 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.reactnativepipandroid;
import android.app.PictureInPictureParams;
import android.util.Log;
import android.util.Rational;
import android.app.AppOpsManager;
import android.content.Context;
import androidx.annotation.NonNull;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.modules.core.DeviceEventManagerModule;
@ReactModule(name = PipAndroidModule.NAME)
public class PipAndroidModule extends ReactContextBaseJavaModule {
public static final String NAME = "PipAndroid";
public static final String PIP_MODE_CHANGE = "PIP_MODE_CHANGE";
public static final String PIP_CLOSED = "PIP_CLOSED";
private static DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter = null;
ReactApplicationContext reactApplicationContext;
public static void pipModeChanged(Boolean isInPictureInPictureMode) {
eventEmitter.emit(PIP_MODE_CHANGE, isInPictureInPictureMode);
}
public static void pipClosed() {
eventEmitter.emit(PIP_CLOSED, true);
}
public PipAndroidModule(ReactApplicationContext reactContext) {
super(reactContext);
Log.d("PIP", "Got the context");
this.reactApplicationContext = reactContext;
}
@Override
@NonNull
public String getName() {
return NAME;
}
@Override
public void initialize() {
super.initialize();
eventEmitter = getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class);
}
private boolean hasPermission() {
AppOpsManager appOps = (AppOpsManager) getReactApplicationContext().getSystemService(Context.APP_OPS_SERVICE);
return appOps.checkOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, android.os.Process.myUid(), getReactApplicationContext().getPackageName()) == AppOpsManager.MODE_ALLOWED;
}
@ReactMethod
public void enterPipMode(int width, int height) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O && hasPermission()) {
int ratWidth = width > 0 ? width : 380;
int ratHeight = height > 0 ? height : 214;
Rational ratio
= new Rational(ratWidth, ratHeight);
PictureInPictureParams.Builder
pip_Builder
= null;
pip_Builder = new PictureInPictureParams
.Builder();
pip_Builder.setAspectRatio(ratio).build();
reactApplicationContext.getCurrentActivity().enterPictureInPictureMode(pip_Builder.build());
}
}
}