Prevent UI from being hidden in video call while interacting with it

This commit is contained in:
Sylvain Berfini 2020-04-24 15:18:44 +02:00
parent e974335a06
commit bb4328f216
4 changed files with 35 additions and 0 deletions

View file

@ -64,6 +64,12 @@ class CallActivity : ProximitySensorActivity() {
} }
}) })
sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.observe(this, Observer {
it.consume {
viewModel.showMomentarily()
}
})
coreContext.core.nativeVideoWindowId = binding.remoteVideoSurface coreContext.core.nativeVideoWindowId = binding.remoteVideoSurface
coreContext.core.nativePreviewWindowId = binding.localPreviewVideoSurface coreContext.core.nativePreviewWindowId = binding.localPreviewVideoSurface

View file

@ -30,13 +30,16 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.activities.call.viewmodels.CallsViewModel import org.linphone.activities.call.viewmodels.CallsViewModel
import org.linphone.activities.call.viewmodels.ControlsViewModel import org.linphone.activities.call.viewmodels.ControlsViewModel
import org.linphone.activities.call.viewmodels.SharedCallViewModel
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
import org.linphone.databinding.CallControlsFragmentBinding import org.linphone.databinding.CallControlsFragmentBinding
import org.linphone.utils.Event
class ControlsFragment : Fragment() { class ControlsFragment : Fragment() {
private lateinit var binding: CallControlsFragmentBinding private lateinit var binding: CallControlsFragmentBinding
private lateinit var callsViewModel: CallsViewModel private lateinit var callsViewModel: CallsViewModel
private lateinit var controlsViewModel: ControlsViewModel private lateinit var controlsViewModel: ControlsViewModel
private lateinit var sharedViewModel: SharedCallViewModel
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
@ -52,6 +55,10 @@ class ControlsFragment : Fragment() {
binding.lifecycleOwner = this binding.lifecycleOwner = this
sharedViewModel = activity?.run {
ViewModelProvider(this).get(SharedCallViewModel::class.java)
} ?: throw Exception("Invalid Activity")
callsViewModel = ViewModelProvider(this).get(CallsViewModel::class.java) callsViewModel = ViewModelProvider(this).get(CallsViewModel::class.java)
binding.viewModel = callsViewModel binding.viewModel = callsViewModel
@ -103,5 +110,11 @@ class ControlsFragment : Fragment() {
startActivity(intent) startActivity(intent)
} }
}) })
controlsViewModel.somethingClickedEvent.observe(viewLifecycleOwner, Observer {
it.consume {
sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.value = Event(true)
}
})
} }
} }

View file

@ -72,9 +72,12 @@ class ControlsViewModel : ViewModel() {
MutableLiveData<Event<Boolean>>() MutableLiveData<Event<Boolean>>()
} }
val somethingClickedEvent = MutableLiveData<Event<Boolean>>()
val onKeyClick: NumpadDigitListener = object : NumpadDigitListener { val onKeyClick: NumpadDigitListener = object : NumpadDigitListener {
override fun handleClick(key: Char) { override fun handleClick(key: Char) {
coreContext.core.playDtmf(key, 1) coreContext.core.playDtmf(key, 1)
somethingClickedEvent.value = Event(true)
} }
override fun handleLongClick(key: Char): Boolean { override fun handleLongClick(key: Char): Boolean {
@ -140,12 +143,14 @@ class ControlsViewModel : ViewModel() {
} }
fun toggleMuteMicrophone() { fun toggleMuteMicrophone() {
somethingClickedEvent.value = Event(true)
val micEnabled = coreContext.core.micEnabled() val micEnabled = coreContext.core.micEnabled()
coreContext.core.enableMic(!micEnabled) coreContext.core.enableMic(!micEnabled)
updateMuteMicState() updateMuteMicState()
} }
fun toggleSpeaker() { fun toggleSpeaker() {
somethingClickedEvent.value = Event(true)
val audioDevice = coreContext.core.outputAudioDevice val audioDevice = coreContext.core.outputAudioDevice
if (audioDevice?.type == AudioDevice.Type.Speaker) { if (audioDevice?.type == AudioDevice.Type.Speaker) {
forceEarpieceAudioRoute() forceEarpieceAudioRoute()
@ -155,6 +160,7 @@ class ControlsViewModel : ViewModel() {
} }
fun switchCamera() { fun switchCamera() {
somethingClickedEvent.value = Event(true)
coreContext.switchCamera() coreContext.switchCamera()
} }
@ -184,18 +190,22 @@ class ControlsViewModel : ViewModel() {
} }
fun toggleOptionsMenu() { fun toggleOptionsMenu() {
somethingClickedEvent.value = Event(true)
optionsVisibility.value = optionsVisibility.value != true optionsVisibility.value = optionsVisibility.value != true
} }
fun toggleNumpadVisibility() { fun toggleNumpadVisibility() {
somethingClickedEvent.value = Event(true)
numpadVisibility.value = numpadVisibility.value != true numpadVisibility.value = numpadVisibility.value != true
} }
fun toggleRoutesMenu() { fun toggleRoutesMenu() {
somethingClickedEvent.value = Event(true)
audioRoutesVisibility.value = audioRoutesVisibility.value != true audioRoutesVisibility.value = audioRoutesVisibility.value != true
} }
fun toggleRecording(closeMenu: Boolean) { fun toggleRecording(closeMenu: Boolean) {
somethingClickedEvent.value = Event(true)
val currentCall = coreContext.core.currentCall val currentCall = coreContext.core.currentCall
if (currentCall != null) { if (currentCall != null) {
if (currentCall.isRecording) { if (currentCall.isRecording) {
@ -223,11 +233,13 @@ class ControlsViewModel : ViewModel() {
} }
fun startConference() { fun startConference() {
somethingClickedEvent.value = Event(true)
coreContext.core.addAllToConference() coreContext.core.addAllToConference()
toggleOptionsMenu() toggleOptionsMenu()
} }
fun forceEarpieceAudioRoute() { fun forceEarpieceAudioRoute() {
somethingClickedEvent.value = Event(true)
for (audioDevice in coreContext.core.audioDevices) { for (audioDevice in coreContext.core.audioDevices) {
if (audioDevice.type == AudioDevice.Type.Earpiece) { if (audioDevice.type == AudioDevice.Type.Earpiece) {
Log.i("[Call] Found earpiece audio device [${audioDevice.deviceName}], routing audio to it") Log.i("[Call] Found earpiece audio device [${audioDevice.deviceName}], routing audio to it")
@ -239,6 +251,7 @@ class ControlsViewModel : ViewModel() {
} }
fun forceSpeakerAudioRoute() { fun forceSpeakerAudioRoute() {
somethingClickedEvent.value = Event(true)
for (audioDevice in coreContext.core.audioDevices) { for (audioDevice in coreContext.core.audioDevices) {
if (audioDevice.type == AudioDevice.Type.Speaker) { if (audioDevice.type == AudioDevice.Type.Speaker) {
Log.i("[Call] Found speaker audio device [${audioDevice.deviceName}], routing audio to it") Log.i("[Call] Found speaker audio device [${audioDevice.deviceName}], routing audio to it")
@ -250,6 +263,7 @@ class ControlsViewModel : ViewModel() {
} }
fun forceBluetoothAudioRoute() { fun forceBluetoothAudioRoute() {
somethingClickedEvent.value = Event(true)
for (audioDevice in coreContext.core.audioDevices) { for (audioDevice in coreContext.core.audioDevices) {
if ((audioDevice.type == AudioDevice.Type.Bluetooth) && audioDevice.hasCapability(AudioDevice.Capabilities.CapabilityPlay)) { if ((audioDevice.type == AudioDevice.Type.Bluetooth) && audioDevice.hasCapability(AudioDevice.Capabilities.CapabilityPlay)) {
Log.i("[Call] Found bluetooth audio device [${audioDevice.deviceName}], routing audio to it") Log.i("[Call] Found bluetooth audio device [${audioDevice.deviceName}], routing audio to it")

View file

@ -25,4 +25,6 @@ import org.linphone.utils.Event
class SharedCallViewModel : ViewModel() { class SharedCallViewModel : ViewModel() {
val toggleDrawerEvent = MutableLiveData<Event<Boolean>>() val toggleDrawerEvent = MutableLiveData<Event<Boolean>>()
val resetHiddenInterfaceTimerInVideoCallEvent = MutableLiveData<Event<Boolean>>()
} }