fix: add CallDurationHelper to keep track of call duration

This commit is contained in:
darthpaul
2021-09-20 00:27:03 +01:00
parent bdab26838e
commit 2f9341dd33
4 changed files with 53 additions and 23 deletions

View File

@ -2,8 +2,10 @@ package com.simplemobiletools.dialer
import android.app.Application
import com.simplemobiletools.commons.extensions.checkUseEnglish
import com.simplemobiletools.dialer.helpers.CallDurationHelper
class App : Application() {
val callDurationHelper by lazy { CallDurationHelper() }
override fun onCreate() {
super.onCreate()
checkUseEnglish()

View File

@ -16,6 +16,7 @@ import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.MINUTE_SECONDS
import com.simplemobiletools.commons.helpers.isOreoMr1Plus
import com.simplemobiletools.commons.helpers.isOreoPlus
import com.simplemobiletools.dialer.App
import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.extensions.addCharacter
import com.simplemobiletools.dialer.extensions.audioManager
@ -24,8 +25,6 @@ import com.simplemobiletools.dialer.extensions.getHandleToUse
import com.simplemobiletools.dialer.helpers.CallContactAvatarHelper
import com.simplemobiletools.dialer.helpers.CallManager
import com.simplemobiletools.dialer.models.CallContact
import java.util.Timer
import java.util.TimerTask
import kotlinx.android.synthetic.main.activity_call.*
import kotlinx.android.synthetic.main.dialpad.*
@ -41,11 +40,11 @@ class CallActivity : SimpleActivity() {
private var isSpeakerOn = false
private var isMicrophoneOn = true
private var isCallEnded = false
private var callDuration = 0
private var callContact: CallContact? = null
private var proximityWakeLock: PowerManager.WakeLock? = null
private var callTimer = Timer()
private var callDuration = 0
private val callContactAvatarHelper by lazy { CallContactAvatarHelper(this) }
private val callDurationHelper by lazy { (application as App).callDurationHelper }
override fun onCreate(savedInstanceState: Bundle?) {
supportActionBar?.hide()
@ -75,7 +74,6 @@ class CallActivity : SimpleActivity() {
override fun onDestroy() {
super.onDestroy()
CallManager.unregisterCallback(callCallback)
callTimer.cancel()
if (proximityWakeLock?.isHeld == true) {
proximityWakeLock!!.release()
}
@ -221,10 +219,6 @@ class CallActivity : SimpleActivity() {
Call.STATE_SELECT_PHONE_ACCOUNT -> showPhoneAccountPicker()
}
if (state == Call.STATE_DISCONNECTED || state == Call.STATE_DISCONNECTING) {
callTimer.cancel()
}
val statusTextId = when (state) {
Call.STATE_RINGING -> R.string.is_calling
Call.STATE_DIALING -> R.string.dialing
@ -254,9 +248,13 @@ class CallActivity : SimpleActivity() {
initProximitySensor()
incoming_call_holder.beGone()
ongoing_call_holder.beVisible()
try {
callTimer.scheduleAtFixedRate(getCallTimerUpdateTask(), 1000, 1000)
} catch (ignored: Exception) {
callDurationHelper.onDurationChange {
callDuration = it
runOnUiThread {
if (!isCallEnded) {
call_status_label.text = callDuration.getFormattedDuration()
}
}
}
}
@ -298,17 +296,6 @@ class CallActivity : SimpleActivity() {
}
}
private fun getCallTimerUpdateTask() = object : TimerTask() {
override fun run() {
callDuration++
runOnUiThread {
if (!isCallEnded) {
call_status_label.text = callDuration.getFormattedDuration()
}
}
}
}
private val callCallback = object : Call.Callback() {
override fun onStateChanged(call: Call, state: Int) {
super.onStateChanged(call, state)

View File

@ -0,0 +1,32 @@
package com.simplemobiletools.dialer.helpers
import java.util.Timer
import java.util.TimerTask
class CallDurationHelper {
private var callTimer = Timer()
private var callDuration = 0
private var callback: ((durationSecs: Int) -> Unit)? = null
fun onDurationChange(callback: (durationSecs: Int) -> Unit) {
this.callback = callback
}
fun start() {
try {
callTimer.scheduleAtFixedRate(getTimerUpdateTask(), 1000, 1000)
} catch (ignored: Exception) {
}
}
fun cancel() {
callTimer.cancel()
}
private fun getTimerUpdateTask() = object : TimerTask() {
override fun run() {
callDuration++
callback?.invoke(callDuration)
}
}
}

View File

@ -2,16 +2,24 @@ package com.simplemobiletools.dialer.services
import android.telecom.Call
import android.telecom.InCallService
import com.simplemobiletools.dialer.App
import com.simplemobiletools.dialer.activities.CallActivity
import com.simplemobiletools.dialer.helpers.CallManager
import com.simplemobiletools.dialer.helpers.CallNotificationManager
class CallService : InCallService() {
private val callNotificationManager by lazy { CallNotificationManager(this) }
private val callDurationHelper by lazy { (application as App).callDurationHelper }
private val callListener = object : Call.Callback() {
override fun onStateChanged(call: Call, state: Int) {
super.onStateChanged(call, state)
callNotificationManager.setupNotification()
if (state == Call.STATE_ACTIVE) {
callDurationHelper.start()
}else if (state == Call.STATE_DISCONNECTED || state == Call.STATE_DISCONNECTING) {
callDurationHelper.cancel()
}
}
}
@ -35,5 +43,6 @@ class CallService : InCallService() {
super.onDestroy()
CallManager.registerCallback(callListener)
callNotificationManager.cancelNotification()
callDurationHelper.cancel()
}
}