From eb17082d98578be667a4712543f689391e2133e8 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Thu, 17 Apr 2025 18:23:29 +0300 Subject: [PATCH] Restored swipe left/right gesture to toggle between accounts --- .../kotlin/com/tutpro/baresip/MainActivity.kt | 50 +++++++++++++++++-- app/src/main/res/values-fi/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index cdea1872..9e4036f4 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -52,6 +52,7 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -102,6 +103,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -568,7 +570,8 @@ class MainActivity : ComponentActivity() { neutralButtonText = getString(R.string.cancel), onNeutralClicked = {} ) - + var offset by remember { mutableFloatStateOf(0f) } + val swipeThreshold = 200 Column( modifier = Modifier .imePadding() @@ -576,7 +579,46 @@ class MainActivity : ComponentActivity() { .padding(contentPadding) .padding(top = 18.dp, bottom = 6.dp, start = 16.dp, end = 16.dp) .fillMaxSize() + .pointerInput(Unit) { + detectHorizontalDragGestures( + onDragStart = { offset = 0f }, + onDragEnd = { + if (offset < -swipeThreshold) { + if (uas.value.isNotEmpty()) { + val curPos = UserAgent.findAorIndex(viewModel.selectedAor.value) + val newPos = if (curPos == null) + 0 + else + (curPos + 1) % uas.value.size + if (curPos != newPos) { + val ua = uas.value[newPos] + spinToAor(ua.account.aor) + showCall(ua) + } + } + } + else if (offset > swipeThreshold) { + if (uas.value.isNotEmpty()) { + val curPos = UserAgent.findAorIndex(viewModel.selectedAor.value) + val newPos = when (curPos) { + null -> 0 + 0 -> uas.value.size - 1 + else -> curPos - 1 + } + if (curPos != newPos) { + val ua = uas.value[newPos] + spinToAor(ua.account.aor) + showCall(ua) + } + } + } + } + ) { _, dragAmount -> + offset += dragAmount + } + } .verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.Top, horizontalAlignment = Alignment.CenterHorizontally, ) { AccountSpinner(ctx) @@ -1096,11 +1138,13 @@ class MainActivity : ComponentActivity() { alertMessage.value = getString(R.string.call_not_secure) showAlert.value = true } + R.drawable.locked_yellow -> { alertTitle.value = getString(R.string.alert) alertMessage.value = getString(R.string.peer_not_verified) showAlert.value = true } + R.drawable.locked_green -> { dialogTitle.value = getString(R.string.info) dialogMessage.value = getString(R.string.call_is_secure) @@ -1156,7 +1200,7 @@ class MainActivity : ComponentActivity() { if (showHangupButton.value) { - var ua: UserAgent = userAgentofSelectedAor() + var ua: UserAgent = userAgentOfSelectedAor() IconButton( modifier = Modifier.size(48.dp), @@ -2686,7 +2730,7 @@ class MainActivity : ComponentActivity() { updateIcons(Account.ofAor(aor)) } - private fun userAgentofSelectedAor(): UserAgent { + private fun userAgentOfSelectedAor(): UserAgent { return UserAgent.ofAor(viewModel.selectedAor.value)!! } diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 7d506c5e..3dfc6c2b 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -19,6 +19,7 @@ valkoinen (rekisteröintiä ei ole aktivoitu).
  • Pisteen kosketus johtaa suoraan tilin asetuksiin.
  • Pyyhkäisy alas aikaansaa parhaillaan näkyvissä olevan tilin uudelleen rekisteröinnin.
  • Parhaillaan näkyvissä olevan tilin pitkä kosketus aktivoi tai passivoi tilin rekisteröinnin.
  • +
  • Pyyhkäisy vasemmalle/oikealle vaihtaa näkyvissä olevaa tiliä.
  • Voit valita edellisen puhelun uudelleen koskettamalla virheää luuria silloin, kun puhelun kohde on tyhjä.
  • Voit lisätä puheluiden ja viestien kohteet yhteystietoihin pitkällä kosketuksella.
  • Pitkillä kosketuksilla voit myös poistaa puheluita, viestiketjuja, viestejä ja yhteystietoja.
  • diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f0e4acad..024580fc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,6 +23,7 @@
  • Touch on the dot leads directly to account configuration.
  • Swipe down gesture causes re-registration of the currently shown account.
  • Long touch on currently shown account enables or disables account\'s registration.
  • +
  • Swipe left/right gesture toggles between the accounts.
  • Previous call party can be reselect by touching the call icon when Callee is empty.
  • Peers of calls and messages can be added to contacts by long touches.
  • Long touches can also be used to remove calls, chats, messages, and contacts.