From 38d24fd11334a3106085ebb3ed11e1e329e47105 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 15 Oct 2020 13:57:07 +0200 Subject: [PATCH] Added setting to have a small vibration when pressing keypad numbers --- .../activities/call/viewmodels/ControlsViewModel.kt | 10 ++++++++++ .../main/dialer/viewmodels/DialerViewModel.kt | 12 ++++++++++-- .../org/linphone/compatibility/Api21Compatibility.kt | 5 +++++ .../org/linphone/compatibility/Api26Compatibility.kt | 8 ++++++++ .../java/org/linphone/compatibility/Compatibility.kt | 8 ++++++++ .../main/java/org/linphone/core/CorePreferences.kt | 3 +++ 6 files changed, 44 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt b/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt index 8df5b9d59..0fc445bb7 100644 --- a/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt @@ -20,11 +20,15 @@ package org.linphone.activities.call.viewmodels import android.Manifest +import android.content.Context +import android.os.Vibrator import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import kotlin.math.max +import org.linphone.LinphoneApplication import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.activities.main.dialer.NumpadDigitListener +import org.linphone.compatibility.Compatibility import org.linphone.core.* import org.linphone.core.tools.Log import org.linphone.utils.Event @@ -81,11 +85,17 @@ class ControlsViewModel : ViewModel() { val somethingClickedEvent = MutableLiveData>() + private val vibrator = coreContext.context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + val onKeyClick: NumpadDigitListener = object : NumpadDigitListener { override fun handleClick(key: Char) { coreContext.core.playDtmf(key, 1) somethingClickedEvent.value = Event(true) coreContext.core.currentCall?.sendDtmf(key) + + if (vibrator.hasVibrator() && LinphoneApplication.corePreferences.dtmfKeypadVibration) { + Compatibility.eventVibration(vibrator) + } } override fun handleLongClick(key: Char): Boolean { diff --git a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt index d4365a69a..97bc6d060 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/viewmodels/DialerViewModel.kt @@ -19,11 +19,14 @@ */ package org.linphone.activities.main.dialer.viewmodels +import android.content.Context +import android.os.Vibrator import android.provider.Settings import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.activities.main.dialer.NumpadDigitListener +import org.linphone.compatibility.Compatibility import org.linphone.core.* import org.linphone.core.tools.Log import org.linphone.utils.Event @@ -47,6 +50,8 @@ class DialerViewModel : LogsUploadViewModel() { MutableLiveData>() } + private val vibrator = coreContext.context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator + private var addressWaitingNetworkToBeCalled: String? = null private var timeAtWitchWeTriedToCall: Long = 0 @@ -55,9 +60,12 @@ class DialerViewModel : LogsUploadViewModel() { enteredUri.value += key.toString() if (coreContext.core.callsNb == 0) { val contentResolver = coreContext.context.contentResolver - val dtmfSetting = Settings.System.getInt(contentResolver, Settings.System.DTMF_TONE_WHEN_DIALING) - if (dtmfSetting == 1) { + if (Settings.System.getInt(contentResolver, Settings.System.DTMF_TONE_WHEN_DIALING) == 1) { coreContext.core.playDtmf(key, 1) + + if (vibrator.hasVibrator() && corePreferences.dtmfKeypadVibration) { + Compatibility.eventVibration(vibrator) + } } } } diff --git a/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt index 746c404e2..f0992d8a2 100644 --- a/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api21Compatibility.kt @@ -59,6 +59,11 @@ class Api21Compatibility { vibrator.vibrate(pattern, 1) } + fun eventVibration(vibrator: Vibrator) { + val pattern = longArrayOf(0, 100, 100) + vibrator.vibrate(pattern, -1) + } + suspend fun addImageToMediaStore(context: Context, content: Content): Boolean { val filePath = content.filePath if (filePath == null) { diff --git a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt index cd20aae39..15acd0b31 100644 --- a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt @@ -111,5 +111,13 @@ class Api26Compatibility { .build() vibrator.vibrate(effect, audioAttrs) } + + fun eventVibration(vibrator: Vibrator) { + val effect = VibrationEffect.createWaveform(longArrayOf(0L, 100L, 100L), intArrayOf(0, VibrationEffect.DEFAULT_AMPLITUDE, 0), -1) + val audioAttrs = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT) + .build() + vibrator.vibrate(effect, audioAttrs) + } } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index 8ca2bd236..cf83f6ac8 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -115,6 +115,14 @@ class Compatibility { } } + fun eventVibration(vibrator: Vibrator) { + if (Version.sdkAboveOrEqual(Version.API26_O_80)) { + Api26Compatibility.eventVibration(vibrator) + } else { + Api21Compatibility.eventVibration(vibrator) + } + } + /* Contacts */ fun createShortcutsToContacts(context: Context) { diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 649e18f6c..e63a06215 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -290,6 +290,9 @@ class CorePreferences constructor(private val context: Context) { val hideCameraPreviewInPipMode: Boolean get() = config.getBool("app", "hide_camera_preview_in_pip_mode", false) + val dtmfKeypadVibration: Boolean + get() = config.getBool("app", "dtmf_keypad_vibraton", false) + /* Tabs */ val showHistory: Boolean