Skip to content

Commit 82778ca

Browse files
committed
android: expose request/abandon audio focus
1 parent f29b1f9 commit 82778ca

File tree

2 files changed

+51
-24
lines changed

2 files changed

+51
-24
lines changed

android/src/main/java/com/zxcpoiu/incallmanager/InCallManagerModule.java

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -639,17 +639,22 @@ private void stopEvents() {
639639
turnScreenOn();
640640
}
641641

642-
private void requestAudioFocus() {
643-
if (android.os.Build.VERSION.SDK_INT >= 26) {
644-
requestAudioFocusV26();
645-
} else {
646-
requestAudioFocusOld();
647-
}
642+
@ReactMethod
643+
public void requestAudioFocusJS(Promise promise) {
644+
promise.resolve(requestAudioFocus());
645+
}
646+
647+
private String requestAudioFocus() {
648+
String requestAudioFocusResStr = (android.os.Build.VERSION.SDK_INT >= 26)
649+
? requestAudioFocusV26()
650+
: requestAudioFocusOld();
651+
Log.d(TAG, "requestAudioFocus(): res = " + requestAudioFocusResStr);
652+
return requestAudioFocusResStr;
648653
}
649654

650-
private void requestAudioFocusV26() {
655+
private String requestAudioFocusV26() {
651656
if (isAudioFocused) {
652-
return;
657+
return "";
653658
}
654659

655660
if (mAudioAttributes == null) {
@@ -687,12 +692,12 @@ private void requestAudioFocusV26() {
687692
break;
688693
}
689694

690-
Log.d(TAG, "requestAudioFocus(): res = " + requestAudioFocusRes + " - " + requestAudioFocusResStr);
695+
return requestAudioFocusResStr;
691696
}
692697

693-
private void requestAudioFocusOld() {
698+
private String requestAudioFocusOld() {
694699
if (isAudioFocused) {
695-
return;
700+
return "";
696701
}
697702

698703
int requestAudioFocusRes = audioManager.requestAudioFocus(mOnFocusChangeListener, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
@@ -711,20 +716,25 @@ private void requestAudioFocusOld() {
711716
break;
712717
}
713718

714-
Log.d(TAG, "requestAudioFocus(): res = " + requestAudioFocusRes + " - " + requestAudioFocusResStr);
719+
return requestAudioFocusResStr;
715720
}
716721

717-
private void abandonAudioFocus() {
718-
if (android.os.Build.VERSION.SDK_INT >= 26) {
719-
abandonAudioFocusV26();
720-
} else {
721-
abandonAudioFocusOld();
722-
}
722+
@ReactMethod
723+
public void abandonAudioFocusJS(Promise promise) {
724+
promise.resolve(abandonAudioFocus());
725+
}
726+
727+
private String abandonAudioFocus() {
728+
String abandonAudioFocusResStr = (android.os.Build.VERSION.SDK_INT >= 26)
729+
? abandonAudioFocusV26()
730+
: abandonAudioFocusOld();
731+
Log.d(TAG, "abandonAudioFocus(): res = " + abandonAudioFocusResStr);
732+
return abandonAudioFocusResStr;
723733
}
724734

725-
private void abandonAudioFocusV26() {
735+
private String abandonAudioFocusV26() {
726736
if (!isAudioFocused || mAudioFocusRequest == null) {
727-
return;
737+
return "";
728738
}
729739

730740
int abandonAudioFocusRes = audioManager.abandonAudioFocusRequest(mAudioFocusRequest);
@@ -741,12 +751,13 @@ private void abandonAudioFocusV26() {
741751
abandonAudioFocusResStr = "AUDIOFOCUS_REQUEST_UNKNOWN";
742752
break;
743753
}
744-
Log.d(TAG, "abandonAudioFocus(): res = " + abandonAudioFocusRes + " - " + abandonAudioFocusResStr);
754+
755+
return abandonAudioFocusResStr;
745756
}
746757

747-
private void abandonAudioFocusOld() {
758+
private String abandonAudioFocusOld() {
748759
if (!isAudioFocused) {
749-
return;
760+
return "";
750761
}
751762

752763
int abandonAudioFocusRes = audioManager.abandonAudioFocus(null);
@@ -765,7 +776,7 @@ private void abandonAudioFocusOld() {
765776
break;
766777
}
767778

768-
Log.d(TAG, "abandonAudioFocus(): res = " + abandonAudioFocusRes + " - " + abandonAudioFocusResStr);
779+
return abandonAudioFocusResStr;
769780
}
770781

771782
@ReactMethod

index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,22 @@ class InCallManager {
153153
let result = await _InCallManager.chooseAudioRoute(route);
154154
return result;
155155
}
156+
157+
async requestAudioFocus() {
158+
if (Platform.OS === 'android') {
159+
return await _InCallManager.requestAudioFocusJS();
160+
} else {
161+
console.log("ios doesn't support requestAudioFocus()");
162+
}
163+
}
164+
165+
async abandonAudioFocus() {
166+
if (Platform.OS === 'android') {
167+
return await _InCallManager.abandonAudioFocusJS();
168+
} else {
169+
console.log("ios doesn't support requestAudioFocus()");
170+
}
171+
}
156172
}
157173

158174
export default new InCallManager();

0 commit comments

Comments
 (0)