2
2
package com .rnlocktask ;
3
3
4
4
import android .app .Activity ;
5
- import android .view .WindowManager ;
6
5
import android .app .admin .DevicePolicyManager ;
7
6
import android .content .ComponentName ;
8
7
import android .content .Context ;
9
- import android .os .Build ;
10
8
9
+ import com .facebook .react .bridge .Promise ;
11
10
import com .facebook .react .bridge .ReactApplicationContext ;
12
11
import com .facebook .react .bridge .ReactContextBaseJavaModule ;
13
12
import com .facebook .react .bridge .ReactMethod ;
14
- import com .facebook .react .bridge .Callback ;
13
+ import com .facebook .react .bridge .ReadableArray ;
14
+
15
+ import java .util .ArrayList ;
15
16
16
17
public class RNLockTaskModule extends ReactContextBaseJavaModule {
17
18
18
- private final ReactApplicationContext reactContext ;
19
+
20
+ private static final String ACTIVITY_GONE = "ACTIVITY_GONE" ;
21
+ private static final String DEVICE_OWNER_CLEARED = "DEVICE_OWNER_CLEARED" ;
22
+ private static final String LOCKED_TASK = "LOCKED_TASK" ;
23
+ private static final String LOCKED_TASK_AS_OWNER = "LOCKED_TASK_AS_OWNER" ;
24
+ private static final String UNLOCKED_TASK = "UNLOCKED_TASK" ;
19
25
20
26
public RNLockTaskModule (ReactApplicationContext reactContext ) {
21
27
super (reactContext );
22
- this .reactContext = reactContext ;
23
28
}
24
29
25
30
@ Override
@@ -28,45 +33,68 @@ public String getName() {
28
33
}
29
34
30
35
@ ReactMethod
31
- public void clearDeviceOwnerApp () {
36
+ public void clearDeviceOwnerApp (Promise promise ) {
32
37
try {
33
- Activity mActivity = reactContext . getCurrentActivity ();
38
+ Activity mActivity = getCurrentActivity ();
34
39
if (mActivity != null ) {
35
40
DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager ) mActivity .getSystemService (Context .DEVICE_POLICY_SERVICE );
36
41
myDevicePolicyManager .clearDeviceOwnerApp (mActivity .getPackageName ());
42
+ promise .resolve (DEVICE_OWNER_CLEARED );
37
43
}
44
+ promise .reject (ACTIVITY_GONE , "Activity gone or mismatch" );
38
45
} catch (Exception e ) {
46
+ promise .reject (e );
39
47
}
40
48
}
41
49
42
50
@ ReactMethod
43
- public void startLockTask ( ) {
51
+ public void startLockTaskWith ( ReadableArray additionalPackages , Promise promise ) {
44
52
try {
45
- Activity mActivity = reactContext . getCurrentActivity ();
53
+ Activity mActivity = getCurrentActivity ();
46
54
if (mActivity != null ) {
47
55
DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager ) mActivity .getSystemService (Context .DEVICE_POLICY_SERVICE );
48
56
ComponentName mDPM = new ComponentName (mActivity , MyAdmin .class );
49
57
50
58
if (myDevicePolicyManager .isDeviceOwnerApp (mActivity .getPackageName ())) {
51
- String [] packages = {mActivity .getPackageName ()};
52
- myDevicePolicyManager .setLockTaskPackages (mDPM , packages );
59
+ ArrayList <String > packages = new ArrayList <>();
60
+ packages .add (mActivity .getPackageName ());
61
+ if (additionalPackages != null ){
62
+ for (int i = 0 ; i < additionalPackages .size (); i ++) {
63
+ packages .add (additionalPackages .getString (i ));
64
+ }
65
+ }
66
+ myDevicePolicyManager .setLockTaskPackages (mDPM , packages .toArray (new String [0 ]));
53
67
mActivity .startLockTask ();
68
+ promise .resolve (LOCKED_TASK_AS_OWNER );
54
69
} else {
55
70
mActivity .startLockTask ();
71
+ promise .resolve (LOCKED_TASK );
56
72
}
73
+ } else {
74
+ promise .reject (ACTIVITY_GONE , "Activity gone or mismatch" );
57
75
}
58
76
} catch (Exception e ) {
77
+ promise .reject (e );
59
78
}
60
79
}
61
80
62
81
@ ReactMethod
63
- public void stopLockTask () {
82
+ public void startLockTask (Promise promise ) {
83
+ startLockTaskWith (null , promise );
84
+ }
85
+
86
+ @ ReactMethod
87
+ public void stopLockTask (Promise promise ) {
64
88
try {
65
- Activity mActivity = reactContext . getCurrentActivity ();
89
+ Activity mActivity = getCurrentActivity ();
66
90
if (mActivity != null ) {
67
91
mActivity .stopLockTask ();
92
+ promise .resolve (UNLOCKED_TASK );
93
+ } else {
94
+ promise .reject (ACTIVITY_GONE , "Activity gone or mismatch" );
68
95
}
69
96
} catch (Exception e ) {
97
+ promise .reject (e );
70
98
}
71
99
}
72
100
}
0 commit comments