Skip to content

Commit 59b2526

Browse files
authored
Merge pull request #137 from LinusU/separate-react-native
Separate react native part from rest of Android code
2 parents 8034d7e + 37b543b commit 59b2526

File tree

5 files changed

+80
-63
lines changed

5 files changed

+80
-63
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.wazo.callkeep;
2+
3+
public class Constants {
4+
public static final String ACTION_ANSWER_CALL = "ACTION_ANSWER_CALL";
5+
public static final String ACTION_AUDIO_SESSION = "ACTION_AUDIO_SESSION";
6+
public static final String ACTION_CHECK_REACHABILITY = "ACTION_CHECK_REACHABILITY";
7+
public static final String ACTION_DTMF_TONE = "ACTION_DTMF_TONE";
8+
public static final String ACTION_END_CALL = "ACTION_END_CALL";
9+
public static final String ACTION_HOLD_CALL = "ACTION_HOLD_CALL";
10+
public static final String ACTION_MUTE_CALL = "ACTION_MUTE_CALL";
11+
public static final String ACTION_ONGOING_CALL = "ACTION_ONGOING_CALL";
12+
public static final String ACTION_UNHOLD_CALL = "ACTION_UNHOLD_CALL";
13+
public static final String ACTION_UNMUTE_CALL = "ACTION_UNMUTE_CALL";
14+
public static final String ACTION_WAKE_APP = "ACTION_WAKE_APP";
15+
16+
public static final String EXTRA_CALL_NUMBER = "EXTRA_CALL_NUMBER";
17+
public static final String EXTRA_CALL_UUID = "EXTRA_CALL_UUID";
18+
public static final String EXTRA_CALLER_NAME = "EXTRA_CALLER_NAME";
19+
}

android/src/main/java/io/wazo/callkeep/RNCallKeepBackgroundMessagingService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import com.facebook.react.bridge.Arguments;
2727
import com.facebook.react.jstasks.HeadlessJsTaskConfig;
2828

29-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALLER_NAME;
30-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALL_NUMBER;
31-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALL_UUID;
29+
import static io.wazo.callkeep.Constants.EXTRA_CALLER_NAME;
30+
import static io.wazo.callkeep.Constants.EXTRA_CALL_NUMBER;
31+
import static io.wazo.callkeep.Constants.EXTRA_CALL_UUID;
3232

3333
import javax.annotation.Nullable;
3434

android/src/main/java/io/wazo/callkeep/RNCallKeepModule.java

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.facebook.react.bridge.ReadableArray;
5656
import com.facebook.react.bridge.ReadableMap;
5757
import com.facebook.react.bridge.WritableMap;
58+
import com.facebook.react.HeadlessJsTaskService;
5859
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter;
5960

6061
import java.lang.reflect.Array;
@@ -67,26 +68,26 @@
6768

6869
import static android.support.v4.app.ActivityCompat.requestPermissions;
6970

71+
import static io.wazo.callkeep.Constants.EXTRA_CALLER_NAME;
72+
import static io.wazo.callkeep.Constants.EXTRA_CALL_UUID;
73+
import static io.wazo.callkeep.Constants.EXTRA_CALL_NUMBER;
74+
import static io.wazo.callkeep.Constants.ACTION_END_CALL;
75+
import static io.wazo.callkeep.Constants.ACTION_ANSWER_CALL;
76+
import static io.wazo.callkeep.Constants.ACTION_MUTE_CALL;
77+
import static io.wazo.callkeep.Constants.ACTION_UNMUTE_CALL;
78+
import static io.wazo.callkeep.Constants.ACTION_DTMF_TONE;
79+
import static io.wazo.callkeep.Constants.ACTION_HOLD_CALL;
80+
import static io.wazo.callkeep.Constants.ACTION_UNHOLD_CALL;
81+
import static io.wazo.callkeep.Constants.ACTION_ONGOING_CALL;
82+
import static io.wazo.callkeep.Constants.ACTION_AUDIO_SESSION;
83+
import static io.wazo.callkeep.Constants.ACTION_CHECK_REACHABILITY;
84+
import static io.wazo.callkeep.Constants.ACTION_WAKE_APP;
85+
7086
// @see https://github.com/kbagchiGWC/voice-quickstart-android/blob/9a2aff7fbe0d0a5ae9457b48e9ad408740dfb968/exampleConnectionService/src/main/java/com/twilio/voice/examples/connectionservice/VoiceConnectionServiceActivity.java
7187
public class RNCallKeepModule extends ReactContextBaseJavaModule {
7288
public static final int REQUEST_READ_PHONE_STATE = 1337;
7389
public static final int REQUEST_REGISTER_CALL_PROVIDER = 394859;
7490

75-
public static final String CHECKING_PERMS = "CHECKING_PERMS";
76-
public static final String EXTRA_CALLER_NAME = "EXTRA_CALLER_NAME";
77-
public static final String EXTRA_CALL_UUID = "EXTRA_CALL_UUID";
78-
public static final String EXTRA_CALL_NUMBER = "EXTRA_CALL_NUMBER";
79-
public static final String ACTION_END_CALL = "ACTION_END_CALL";
80-
public static final String ACTION_ANSWER_CALL = "ACTION_ANSWER_CALL";
81-
public static final String ACTION_MUTE_CALL = "ACTION_MUTE_CALL";
82-
public static final String ACTION_UNMUTE_CALL = "ACTION_UNMUTE_CALL";
83-
public static final String ACTION_DTMF_TONE = "ACTION_DTMF_TONE";
84-
public static final String ACTION_HOLD_CALL = "ACTION_HOLD_CALL";
85-
public static final String ACTION_UNHOLD_CALL = "ACTION_UNHOLD_CALL";
86-
public static final String ACTION_ONGOING_CALL = "ACTION_ONGOING_CALL";
87-
public static final String ACTION_AUDIO_SESSION = "ACTION_AUDIO_SESSION";
88-
public static final String ACTION_CHECK_REACHABILITY = "ACTION_CHECK_REACHABILITY";
89-
9091
private static final String E_ACTIVITY_DOES_NOT_EXIST = "E_ACTIVITY_DOES_NOT_EXIST";
9192
private static final String REACT_NATIVE_MODULE_NAME = "RNCallKeep";
9293
private static final String[] permissions = { Manifest.permission.READ_PHONE_STATE,
@@ -122,6 +123,7 @@ public void setup(ReadableMap options) {
122123
this.registerPhoneAccount(this.getAppContext());
123124
voiceBroadcastReceiver = new VoiceBroadcastReceiver();
124125
registerReceiver();
126+
VoiceConnectionService.setPhoneAccountHandle(handle);
125127
VoiceConnectionService.setAvailable(true);
126128
}
127129
}
@@ -568,6 +570,18 @@ public void onReceive(Context context, Intent intent) {
568570
case ACTION_CHECK_REACHABILITY:
569571
sendEventToJS("RNCallKeepCheckReachability", null);
570572
break;
573+
case ACTION_WAKE_APP:
574+
Intent headlessIntent = new Intent(reactContext, RNCallKeepBackgroundMessagingService.class);
575+
headlessIntent.putExtra("callUUID", attributeMap.get(EXTRA_CALL_UUID));
576+
headlessIntent.putExtra("name", attributeMap.get(EXTRA_CALLER_NAME));
577+
headlessIntent.putExtra("handle", attributeMap.get(EXTRA_CALL_NUMBER));
578+
Log.d(TAG, "wakeUpApplication: " + attributeMap.get(EXTRA_CALL_UUID) + ", number : " + attributeMap.get(EXTRA_CALL_NUMBER) + ", displayName:" + attributeMap.get(EXTRA_CALLER_NAME));
579+
580+
ComponentName name = reactContext.startService(headlessIntent);
581+
if (name != null) {
582+
HeadlessJsTaskService.acquireWakeLockNow(reactContext);
583+
}
584+
break;
571585
}
572586
}
573587
}

android/src/main/java/io/wazo/callkeep/VoiceConnection.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,17 @@
3737

3838
import java.util.HashMap;
3939

40-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_ANSWER_CALL;
41-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_AUDIO_SESSION;
42-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_DTMF_TONE;
43-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_END_CALL;
44-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_HOLD_CALL;
45-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_MUTE_CALL;
46-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_UNHOLD_CALL;
47-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_UNMUTE_CALL;
48-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALLER_NAME;
49-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALL_NUMBER;
50-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALL_UUID;
40+
import static io.wazo.callkeep.Constants.ACTION_ANSWER_CALL;
41+
import static io.wazo.callkeep.Constants.ACTION_AUDIO_SESSION;
42+
import static io.wazo.callkeep.Constants.ACTION_DTMF_TONE;
43+
import static io.wazo.callkeep.Constants.ACTION_END_CALL;
44+
import static io.wazo.callkeep.Constants.ACTION_HOLD_CALL;
45+
import static io.wazo.callkeep.Constants.ACTION_MUTE_CALL;
46+
import static io.wazo.callkeep.Constants.ACTION_UNHOLD_CALL;
47+
import static io.wazo.callkeep.Constants.ACTION_UNMUTE_CALL;
48+
import static io.wazo.callkeep.Constants.EXTRA_CALLER_NAME;
49+
import static io.wazo.callkeep.Constants.EXTRA_CALL_NUMBER;
50+
import static io.wazo.callkeep.Constants.EXTRA_CALL_UUID;
5151

5252
@TargetApi(Build.VERSION_CODES.M)
5353
public class VoiceConnection extends Connection {

android/src/main/java/io/wazo/callkeep/VoiceConnectionService.java

Lines changed: 18 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@
4040
import android.app.ActivityManager;
4141
import android.app.ActivityManager.RunningTaskInfo;
4242

43-
import com.facebook.react.HeadlessJsTaskService;
44-
import com.facebook.react.bridge.ReactContext;
45-
import com.facebook.react.common.LifecycleState;
46-
4743
import java.util.ArrayList;
4844
import java.util.HashMap;
4945
import java.util.Iterator;
@@ -53,20 +49,13 @@
5349
import java.util.UUID;
5450
import java.util.stream.Collectors;
5551

56-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_ANSWER_CALL;
57-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_AUDIO_SESSION;
58-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_DTMF_TONE;
59-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_END_CALL;
60-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_HOLD_CALL;
61-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_MUTE_CALL;
62-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_ONGOING_CALL;
63-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_UNHOLD_CALL;
64-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_UNMUTE_CALL;
65-
import static io.wazo.callkeep.RNCallKeepModule.ACTION_CHECK_REACHABILITY;
66-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALLER_NAME;
67-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALL_NUMBER;
68-
import static io.wazo.callkeep.RNCallKeepModule.EXTRA_CALL_UUID;
69-
import static io.wazo.callkeep.RNCallKeepModule.handle;
52+
import static io.wazo.callkeep.Constants.ACTION_AUDIO_SESSION;
53+
import static io.wazo.callkeep.Constants.ACTION_ONGOING_CALL;
54+
import static io.wazo.callkeep.Constants.ACTION_CHECK_REACHABILITY;
55+
import static io.wazo.callkeep.Constants.ACTION_WAKE_APP;
56+
import static io.wazo.callkeep.Constants.EXTRA_CALLER_NAME;
57+
import static io.wazo.callkeep.Constants.EXTRA_CALL_NUMBER;
58+
import static io.wazo.callkeep.Constants.EXTRA_CALL_UUID;
7059

7160
// @see https://github.com/kbagchiGWC/voice-quickstart-android/blob/9a2aff7fbe0d0a5ae9457b48e9ad408740dfb968/exampleConnectionService/src/main/java/com/twilio/voice/examples/connectionservice/VoiceConnectionService.java
7261
@TargetApi(Build.VERSION_CODES.M)
@@ -76,6 +65,7 @@ public class VoiceConnectionService extends ConnectionService {
7665
private static Boolean isReachable;
7766
private static String notReachableCallUuid;
7867
private static ConnectionRequest currentConnectionRequest;
68+
private static PhoneAccountHandle phoneAccountHandle;
7969
private static String TAG = "RNCK:VoiceConnectionService";
8070
public static Map<String, VoiceConnection> currentConnections = new HashMap<>();
8171
public static Boolean hasOutgoingCall = false;
@@ -98,6 +88,10 @@ public VoiceConnectionService() {
9888
currentConnectionService = this;
9989
}
10090

91+
public static void setPhoneAccountHandle(PhoneAccountHandle phoneAccountHandle) {
92+
VoiceConnectionService.phoneAccountHandle = phoneAccountHandle;
93+
}
94+
10195
public static void setAvailable(Boolean value) {
10296
Log.d(TAG, "setAvailable: " + (value ? "true" : "false"));
10397
if (value) {
@@ -196,19 +190,11 @@ private Connection makeOutgoingCall(ConnectionRequest request, String uuid, Bool
196190
}
197191

198192
private void wakeUpApplication(String uuid, String number, String displayName) {
199-
Intent headlessIntent = new Intent(
200-
this.getApplicationContext(),
201-
RNCallKeepBackgroundMessagingService.class
202-
);
203-
headlessIntent.putExtra("callUUID", uuid);
204-
headlessIntent.putExtra("name", displayName);
205-
headlessIntent.putExtra("handle", number);
206-
Log.d(TAG, "wakeUpApplication: " + uuid + ", number : " + number + ", displayName:" + displayName);
207-
208-
ComponentName name = this.getApplicationContext().startService(headlessIntent);
209-
if (name != null) {
210-
HeadlessJsTaskService.acquireWakeLockNow(this.getApplicationContext());
211-
}
193+
HashMap<String, String> extrasMap = new HashMap();
194+
extrasMap.put(EXTRA_CALL_UUID, uuid);
195+
extrasMap.put(EXTRA_CALLER_NAME, displayName);
196+
extrasMap.put(EXTRA_CALL_NUMBER, number);
197+
sendCallRequestToActivity(ACTION_WAKE_APP, extrasMap);
212198
}
213199

214200
private void wakeUpAfterReachabilityTimeout(ConnectionRequest request) {
@@ -271,9 +257,7 @@ public void onConference(Connection connection1, Connection connection2) {
271257
VoiceConnection voiceConnection1 = (VoiceConnection) connection1;
272258
VoiceConnection voiceConnection2 = (VoiceConnection) connection2;
273259

274-
PhoneAccountHandle phoneAccountHandle = RNCallKeepModule.handle;
275-
276-
VoiceConference voiceConference = new VoiceConference(handle);
260+
VoiceConference voiceConference = new VoiceConference(phoneAccountHandle);
277261
voiceConference.addConnection(voiceConnection1);
278262
voiceConference.addConnection(voiceConnection2);
279263

0 commit comments

Comments
 (0)