Files
discord-decomp/modules/voice_calls/native/AudioSessionModeManager.tsx
T
2026-11-01 12:12:55 +02:00

59 lines
2.9 KiB
TypeScript

// Metro module 16135 (f16136).
import { NativeModules } from "react-native";
import EmbeddedActivitiesStore from "../../activities/EmbeddedActivitiesStore";
import StageChannelRoleStore from "../../stage_channels/StageChannelRoleStore";
import ApplicationStreamingStore from "../../../stores/ApplicationStreamingStore";
import AuthenticationStore from "../../../stores/AuthenticationStore";
import ChannelStore from "../../../stores/ChannelStore";
import MediaEngineStore from "../../../stores/MediaEngineStore";
import SelectedChannelStore from "../../../stores/SelectedChannelStore";
import VoiceStateStore from "../../../stores/VoiceStateStore";
import AppStateStore from "../../../stores/native/AppStateStore";
import { AppStates } from "../../../Constants";
import { isAndroid } from "../../../utils/PlatformUtils";
import * as _VoicePermissionManager from "../VoicePermissionManager";
import AutomaticLifecycleManager from "../../../lib/AutomaticLifecycleManager";
let c11556_12, VOICE;
const handleAVAudioSessionMode = function handleAVAudioSessionMode() {
let DEFAULT;
L14: {
const channel = ChannelStore.getChannel(SelectedChannelStore.getVoiceChannelId());
if (channel == null) {
DEFAULT = c11556_12.AVAudioSessionMode.DEFAULT;
} else {
const r15 = ApplicationStreamingStore.getAllActiveStreams().length > 0 || VoiceStateStore.hasVideo(channel.id) || MediaEngineStore.isVideoEnabled();
const r23 = EmbeddedActivitiesStore.getCurrentEmbeddedActivity() != null;
if (!r15 && !r23) {
const shouldImmediatelyRequestVoicePermissions = _VoicePermissionManager.shouldImmediatelyRequestVoicePermissions(AuthenticationStore.getId(), channel.id);
const AVAudioSessionMode = c11556_12.AVAudioSessionMode;
if (shouldImmediatelyRequestVoicePermissions) {
DEFAULT = AVAudioSessionMode.VOICE;
break L14;
}
DEFAULT = AVAudioSessionMode.LISTEN;
break L14;
}
DEFAULT = c11556_12.AVAudioSessionMode.VIDEO;
}
}
if (VOICE !== DEFAULT && AppStateStore.getState() === AppStates.ACTIVE) {
VOICE = DEFAULT;
c11556_12.setAVAudioSessionMode(DEFAULT);
}
};
c11556_12 = isAndroid() ? {
setAVAudioSessionMode: () => {},
AVAudioSessionMode: {
VOICE: "AVAudioSessionModeVoiceChat",
VIDEO: "AVAudioSessionModeVideoChat",
LISTEN: "AVAudioSessionModeSpokenAudio",
DEFAULT: "AVAudioSessionModeDefault"
}
} : NativeModules.VoiceEngine;
VOICE = c11556_12.AVAudioSessionMode.VOICE;
class AudioSessionModeManager extends AutomaticLifecycleManager {
stores = new Map().set(ApplicationStreamingStore, handleAVAudioSessionMode).set(VoiceStateStore, handleAVAudioSessionMode).set(MediaEngineStore, handleAVAudioSessionMode).set(StageChannelRoleStore, handleAVAudioSessionMode).set(EmbeddedActivitiesStore, handleAVAudioSessionMode);
}
const audioSessionModeManager = new AudioSessionModeManager();
export default audioSessionModeManager;