From f5b88a9ee5024a7cc2dc77380ab08f087b932eac Mon Sep 17 00:00:00 2001 From: Naveen Date: Mon, 19 Sep 2022 00:42:58 +0530 Subject: [PATCH] Make sure dialpad tone length is at least >150ms --- .../dialer/activities/DialpadActivity.kt | 5 +++-- .../dialer/helpers/ToneGeneratorHelper.kt | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt index 118abbf0..e2275f27 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt @@ -24,6 +24,7 @@ import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.adapters.ContactsAdapter import com.simplemobiletools.dialer.extensions.* +import com.simplemobiletools.dialer.helpers.DIALPAD_TONE_LENGTH_MS import com.simplemobiletools.dialer.helpers.ToneGeneratorHelper import com.simplemobiletools.dialer.models.SpeedDial import kotlinx.android.synthetic.main.activity_dialpad.* @@ -55,9 +56,9 @@ class DialpadActivity : SimpleActivity() { setupOptionsMenu() speedDialValues = config.getSpeedDialValues() - privateCursor = getMyContactsCursor(false, true) + privateCursor = getMyContactsCursor(favoritesOnly = false, withPhoneNumbersOnly = true) - toneGeneratorHelper = ToneGeneratorHelper(this) + toneGeneratorHelper = ToneGeneratorHelper(this, DIALPAD_TONE_LENGTH_MS) if (hasRussianLocale) { initRussianChars() diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/ToneGeneratorHelper.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/ToneGeneratorHelper.kt index f2008ecc..b20e9b62 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/ToneGeneratorHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/ToneGeneratorHelper.kt @@ -4,16 +4,20 @@ import android.content.Context import android.media.AudioManager import android.media.AudioManager.STREAM_DTMF import android.media.ToneGenerator +import android.os.Handler +import android.os.Looper -class ToneGeneratorHelper(context: Context) { +class ToneGeneratorHelper(context: Context, private val minToneLengthMs: Long) { private val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager private val toneGenerator = ToneGenerator(DIAL_TONE_STREAM_TYPE, TONE_RELATIVE_VOLUME) + private var toneStartTimeMs = 0L private fun isSilent(): Boolean { return audioManager.ringerMode in arrayOf(AudioManager.RINGER_MODE_SILENT, AudioManager.RINGER_MODE_VIBRATE) } fun startTone(char: Char) { + toneStartTimeMs = System.currentTimeMillis() startTone(charToTone[char] ?: -1) } @@ -23,7 +27,16 @@ class ToneGeneratorHelper(context: Context) { } } - fun stopTone() = toneGenerator.stopTone() + fun stopTone() { + val timeSinceStartMs = System.currentTimeMillis() - toneStartTimeMs + if (timeSinceStartMs < minToneLengthMs) { + Handler(Looper.getMainLooper()).postDelayed({ + toneGenerator.stopTone() + }, minToneLengthMs - timeSinceStartMs) + } else { + toneGenerator.stopTone() + } + } companion object { const val TONE_RELATIVE_VOLUME = 80 // The DTMF tone volume relative to other sounds in the stream