mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-06-05 21:49:23 +02:00
fix: add CallDurationHelper to keep track of call duration
This commit is contained in:
@ -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()
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user