mirror of
https://github.com/nextcloud/talk-android
synced 2025-02-03 05:03:04 +00:00
update UI if audio output device changed
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
3587fe6e12
commit
338f06dda1
@ -158,7 +158,7 @@ import okhttp3.Cache;
|
||||
import pub.devrel.easypermissions.AfterPermissionGranted;
|
||||
|
||||
@AutoInjector(NextcloudTalkApplication.class)
|
||||
public class CallActivity extends CallBaseActivity implements MagicAudioManager.AudioManagerEvents {
|
||||
public class CallActivity extends CallBaseActivity {
|
||||
|
||||
@Inject
|
||||
NcApi ncApi;
|
||||
@ -256,10 +256,7 @@ public class CallActivity extends CallBaseActivity implements MagicAudioManager.
|
||||
|
||||
private CallActivityBinding binding;
|
||||
|
||||
@Override
|
||||
public void onAudioDeviceChanged(MagicAudioManager.AudioDevice selectedAudioDevice, Set<MagicAudioManager.AudioDevice> availableAudioDevices) {
|
||||
setAudioOutputChannel(selectedAudioDevice);
|
||||
}
|
||||
private AudioOutputDialog audioOutputDialog;
|
||||
|
||||
@Parcel
|
||||
public enum CallStatus {
|
||||
@ -336,9 +333,10 @@ public class CallActivity extends CallBaseActivity implements MagicAudioManager.
|
||||
private void initClickListeners() {
|
||||
binding.pictureInPictureButton.setOnClickListener(l -> enterPipMode());
|
||||
|
||||
binding.audioOutputButton.setOnClickListener(v -> new AudioOutputDialog(
|
||||
this
|
||||
).show());
|
||||
binding.audioOutputButton.setOnClickListener(v -> {
|
||||
audioOutputDialog = new AudioOutputDialog(this);
|
||||
audioOutputDialog.show();
|
||||
});
|
||||
|
||||
binding.microphoneButton.setOnClickListener(l -> onMicrophoneClick());
|
||||
binding.microphoneButton.setOnLongClickListener(l -> {
|
||||
@ -457,13 +455,14 @@ public class CallActivity extends CallBaseActivity implements MagicAudioManager.
|
||||
}
|
||||
|
||||
public void setAudioOutputChannel(MagicAudioManager.AudioDevice selectedAudioDevice) {
|
||||
if (audioManager == null) {
|
||||
return;
|
||||
if (audioManager != null) {
|
||||
audioManager.selectAudioDevice(selectedAudioDevice);
|
||||
updateAudioOutputButton(audioManager.getResultingAudioDevice());
|
||||
}
|
||||
}
|
||||
|
||||
audioManager.selectAudioDevice(selectedAudioDevice);
|
||||
|
||||
switch (audioManager.getResultingAudioDevice()) {
|
||||
private void updateAudioOutputButton(MagicAudioManager.AudioDevice activeAudioDevice) {
|
||||
switch (activeAudioDevice) {
|
||||
case BLUETOOTH:
|
||||
binding.audioOutputButton.getHierarchy().setPlaceholderImage(
|
||||
AppCompatResources.getDrawable(context, R.drawable.ic_baseline_bluetooth_audio_24));
|
||||
@ -749,7 +748,7 @@ public class CallActivity extends CallBaseActivity implements MagicAudioManager.
|
||||
final MagicAudioManager.AudioDevice device,
|
||||
final Set<MagicAudioManager.AudioDevice> availableDevices) {
|
||||
Log.d(TAG, "onAudioManagerDevicesChanged: " + availableDevices + ", "
|
||||
+ "selected: " + device);
|
||||
+ "result: " + device);
|
||||
|
||||
final boolean shouldDisableProximityLock = (device.equals(MagicAudioManager.AudioDevice.WIRED_HEADSET)
|
||||
|| device.equals(MagicAudioManager.AudioDevice.SPEAKER_PHONE)
|
||||
@ -760,6 +759,11 @@ public class CallActivity extends CallBaseActivity implements MagicAudioManager.
|
||||
} else {
|
||||
powerManagerUtils.updatePhoneState(PowerManagerUtils.PhoneState.WITH_PROXIMITY_SENSOR_LOCK);
|
||||
}
|
||||
|
||||
if (audioOutputDialog != null){
|
||||
audioOutputDialog.updateOutputDeviceList();
|
||||
}
|
||||
updateAudioOutputButton(device);
|
||||
}
|
||||
|
||||
|
||||
@ -1675,10 +1679,10 @@ public class CallActivity extends CallBaseActivity implements MagicAudioManager.
|
||||
Log.d(TAG, " currentSessionId is " + currentSessionId);
|
||||
|
||||
for (HashMap<String, Object> participant : users) {
|
||||
long inCallFlag = (long)participant.get("inCall");
|
||||
long inCallFlag = (long) participant.get("inCall");
|
||||
if (!participant.get("sessionId").equals(currentSessionId)) {
|
||||
boolean isNewSession;
|
||||
Log.d(TAG, " inCallFlag of participant " + participant.get("sessionId").toString().substring(0,4) + " : " + inCallFlag);
|
||||
Log.d(TAG, " inCallFlag of participant " + participant.get("sessionId").toString().substring(0, 4) + " : " + inCallFlag);
|
||||
isNewSession = inCallFlag != 0;
|
||||
|
||||
if (isNewSession) {
|
||||
@ -1688,7 +1692,7 @@ public class CallActivity extends CallBaseActivity implements MagicAudioManager.
|
||||
}
|
||||
} else {
|
||||
Log.d(TAG, " inCallFlag of currentSessionId: " + inCallFlag);
|
||||
if (inCallFlag == 0){
|
||||
if (inCallFlag == 0) {
|
||||
Log.d(TAG, "Most probably a moderator ended the call for all.");
|
||||
hangup(true);
|
||||
}
|
||||
|
@ -42,17 +42,22 @@ class AudioOutputDialog(val callActivity: CallActivity) : BottomSheetDialog(call
|
||||
setContentView(dialogAudioOutputBinding.root)
|
||||
window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||
|
||||
hideUnavailableOutputChannels()
|
||||
updateOutputDeviceList()
|
||||
highlightActiveOutputChannel()
|
||||
initClickListeners()
|
||||
}
|
||||
|
||||
private fun hideUnavailableOutputChannels() {
|
||||
fun updateOutputDeviceList() {
|
||||
if (callActivity.audioManager?.audioDevices?.contains(MagicAudioManager.AudioDevice.BLUETOOTH) == false){
|
||||
dialogAudioOutputBinding.audioOutputBluetooth.visibility = View.GONE
|
||||
} else {
|
||||
dialogAudioOutputBinding.audioOutputBluetooth.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
if (callActivity.audioManager?.audioDevices?.contains(MagicAudioManager.AudioDevice.EARPIECE) == false){
|
||||
dialogAudioOutputBinding.audioOutputEarspeaker.visibility = View.GONE
|
||||
} else {
|
||||
dialogAudioOutputBinding.audioOutputEarspeaker.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ public class MagicAudioManager {
|
||||
private final MagicBluetoothManager bluetoothManager;
|
||||
private boolean controlSpeakerByProximitySensor;
|
||||
private AudioManager audioManager;
|
||||
private AudioManagerEvents audioManagerEvents;
|
||||
private AudioManagerListener audioManagerListener;
|
||||
private AudioManagerState amState;
|
||||
private int savedAudioMode = AudioManager.MODE_INVALID;
|
||||
private boolean savedIsSpeakerPhoneOn = false;
|
||||
@ -147,7 +147,7 @@ public class MagicAudioManager {
|
||||
}
|
||||
|
||||
@SuppressLint("WrongConstant")
|
||||
public void start(AudioManagerEvents audioManagerEvents) {
|
||||
public void start(AudioManagerListener audioManagerListener) {
|
||||
Log.d(TAG, "start");
|
||||
ThreadUtils.checkIsOnMainThread();
|
||||
if (amState == AudioManagerState.RUNNING) {
|
||||
@ -157,7 +157,7 @@ public class MagicAudioManager {
|
||||
// TODO(henrika): perhaps call new method called preInitAudio() here if UNINITIALIZED.
|
||||
|
||||
Log.d(TAG, "AudioManager starts...");
|
||||
this.audioManagerEvents = audioManagerEvents;
|
||||
this.audioManagerListener = audioManagerListener;
|
||||
amState = AudioManagerState.RUNNING;
|
||||
|
||||
// Store current audio state so we can restore it when stop() is called.
|
||||
@ -276,7 +276,7 @@ public class MagicAudioManager {
|
||||
|
||||
powerManagerUtils.updatePhoneState(PowerManagerUtils.PhoneState.IDLE);
|
||||
|
||||
audioManagerEvents = null;
|
||||
audioManagerListener = null;
|
||||
Log.d(TAG, "AudioManager stopped");
|
||||
}
|
||||
|
||||
@ -462,7 +462,7 @@ public class MagicAudioManager {
|
||||
// Correct user selected audio devices if needed.
|
||||
if (userSelectedAudioDevice == AudioDevice.BLUETOOTH
|
||||
&& bluetoothManager.getState() == MagicBluetoothManager.State.HEADSET_UNAVAILABLE) {
|
||||
userSelectedAudioDevice = AudioDevice.NONE;
|
||||
userSelectedAudioDevice = AudioDevice.SPEAKER_PHONE;
|
||||
}
|
||||
if (userSelectedAudioDevice == AudioDevice.SPEAKER_PHONE && hasWiredHeadset) {
|
||||
userSelectedAudioDevice = AudioDevice.WIRED_HEADSET;
|
||||
@ -539,9 +539,9 @@ public class MagicAudioManager {
|
||||
Log.d(TAG, "New device status: "
|
||||
+ "available=" + audioDevices + ", "
|
||||
+ "resulting(new)=" + newResultingAudioDevice);
|
||||
if (audioManagerEvents != null) {
|
||||
if (audioManagerListener != null) {
|
||||
// Notify a listening client that audio device has been changed.
|
||||
audioManagerEvents.onAudioDeviceChanged(resultingAudioDevice, audioDevices);
|
||||
audioManagerListener.onAudioDeviceChanged(resultingAudioDevice, audioDevices);
|
||||
}
|
||||
}
|
||||
Log.d(TAG, "--- updateAudioDeviceState done");
|
||||
@ -567,7 +567,7 @@ public class MagicAudioManager {
|
||||
/**
|
||||
* Selected audio device change event.
|
||||
*/
|
||||
public static interface AudioManagerEvents {
|
||||
public static interface AudioManagerListener {
|
||||
// Callback fired once audio device is changed or list of available audio devices changed.
|
||||
void onAudioDeviceChanged(
|
||||
AudioDevice selectedAudioDevice, Set<AudioDevice> availableAudioDevices);
|
||||
|
Loading…
Reference in New Issue
Block a user