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 android.app.Application
|
||||||
import com.simplemobiletools.commons.extensions.checkUseEnglish
|
import com.simplemobiletools.commons.extensions.checkUseEnglish
|
||||||
|
import com.simplemobiletools.dialer.helpers.CallDurationHelper
|
||||||
|
|
||||||
class App : Application() {
|
class App : Application() {
|
||||||
|
val callDurationHelper by lazy { CallDurationHelper() }
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
checkUseEnglish()
|
checkUseEnglish()
|
||||||
|
@ -16,6 +16,7 @@ import com.simplemobiletools.commons.extensions.*
|
|||||||
import com.simplemobiletools.commons.helpers.MINUTE_SECONDS
|
import com.simplemobiletools.commons.helpers.MINUTE_SECONDS
|
||||||
import com.simplemobiletools.commons.helpers.isOreoMr1Plus
|
import com.simplemobiletools.commons.helpers.isOreoMr1Plus
|
||||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||||
|
import com.simplemobiletools.dialer.App
|
||||||
import com.simplemobiletools.dialer.R
|
import com.simplemobiletools.dialer.R
|
||||||
import com.simplemobiletools.dialer.extensions.addCharacter
|
import com.simplemobiletools.dialer.extensions.addCharacter
|
||||||
import com.simplemobiletools.dialer.extensions.audioManager
|
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.CallContactAvatarHelper
|
||||||
import com.simplemobiletools.dialer.helpers.CallManager
|
import com.simplemobiletools.dialer.helpers.CallManager
|
||||||
import com.simplemobiletools.dialer.models.CallContact
|
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.activity_call.*
|
||||||
import kotlinx.android.synthetic.main.dialpad.*
|
import kotlinx.android.synthetic.main.dialpad.*
|
||||||
|
|
||||||
@ -41,11 +40,11 @@ class CallActivity : SimpleActivity() {
|
|||||||
private var isSpeakerOn = false
|
private var isSpeakerOn = false
|
||||||
private var isMicrophoneOn = true
|
private var isMicrophoneOn = true
|
||||||
private var isCallEnded = false
|
private var isCallEnded = false
|
||||||
private var callDuration = 0
|
|
||||||
private var callContact: CallContact? = null
|
private var callContact: CallContact? = null
|
||||||
private var proximityWakeLock: PowerManager.WakeLock? = null
|
private var proximityWakeLock: PowerManager.WakeLock? = null
|
||||||
private var callTimer = Timer()
|
private var callDuration = 0
|
||||||
private val callContactAvatarHelper by lazy { CallContactAvatarHelper(this) }
|
private val callContactAvatarHelper by lazy { CallContactAvatarHelper(this) }
|
||||||
|
private val callDurationHelper by lazy { (application as App).callDurationHelper }
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
supportActionBar?.hide()
|
supportActionBar?.hide()
|
||||||
@ -75,7 +74,6 @@ class CallActivity : SimpleActivity() {
|
|||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
CallManager.unregisterCallback(callCallback)
|
CallManager.unregisterCallback(callCallback)
|
||||||
callTimer.cancel()
|
|
||||||
if (proximityWakeLock?.isHeld == true) {
|
if (proximityWakeLock?.isHeld == true) {
|
||||||
proximityWakeLock!!.release()
|
proximityWakeLock!!.release()
|
||||||
}
|
}
|
||||||
@ -221,10 +219,6 @@ class CallActivity : SimpleActivity() {
|
|||||||
Call.STATE_SELECT_PHONE_ACCOUNT -> showPhoneAccountPicker()
|
Call.STATE_SELECT_PHONE_ACCOUNT -> showPhoneAccountPicker()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state == Call.STATE_DISCONNECTED || state == Call.STATE_DISCONNECTING) {
|
|
||||||
callTimer.cancel()
|
|
||||||
}
|
|
||||||
|
|
||||||
val statusTextId = when (state) {
|
val statusTextId = when (state) {
|
||||||
Call.STATE_RINGING -> R.string.is_calling
|
Call.STATE_RINGING -> R.string.is_calling
|
||||||
Call.STATE_DIALING -> R.string.dialing
|
Call.STATE_DIALING -> R.string.dialing
|
||||||
@ -254,9 +248,13 @@ class CallActivity : SimpleActivity() {
|
|||||||
initProximitySensor()
|
initProximitySensor()
|
||||||
incoming_call_holder.beGone()
|
incoming_call_holder.beGone()
|
||||||
ongoing_call_holder.beVisible()
|
ongoing_call_holder.beVisible()
|
||||||
try {
|
callDurationHelper.onDurationChange {
|
||||||
callTimer.scheduleAtFixedRate(getCallTimerUpdateTask(), 1000, 1000)
|
callDuration = it
|
||||||
} catch (ignored: Exception) {
|
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() {
|
private val callCallback = object : Call.Callback() {
|
||||||
override fun onStateChanged(call: Call, state: Int) {
|
override fun onStateChanged(call: Call, state: Int) {
|
||||||
super.onStateChanged(call, state)
|
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.Call
|
||||||
import android.telecom.InCallService
|
import android.telecom.InCallService
|
||||||
|
import com.simplemobiletools.dialer.App
|
||||||
import com.simplemobiletools.dialer.activities.CallActivity
|
import com.simplemobiletools.dialer.activities.CallActivity
|
||||||
import com.simplemobiletools.dialer.helpers.CallManager
|
import com.simplemobiletools.dialer.helpers.CallManager
|
||||||
import com.simplemobiletools.dialer.helpers.CallNotificationManager
|
import com.simplemobiletools.dialer.helpers.CallNotificationManager
|
||||||
|
|
||||||
class CallService : InCallService() {
|
class CallService : InCallService() {
|
||||||
private val callNotificationManager by lazy { CallNotificationManager(this) }
|
private val callNotificationManager by lazy { CallNotificationManager(this) }
|
||||||
|
private val callDurationHelper by lazy { (application as App).callDurationHelper }
|
||||||
|
|
||||||
private val callListener = object : Call.Callback() {
|
private val callListener = object : Call.Callback() {
|
||||||
override fun onStateChanged(call: Call, state: Int) {
|
override fun onStateChanged(call: Call, state: Int) {
|
||||||
super.onStateChanged(call, state)
|
super.onStateChanged(call, state)
|
||||||
callNotificationManager.setupNotification()
|
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()
|
super.onDestroy()
|
||||||
CallManager.registerCallback(callListener)
|
CallManager.registerCallback(callListener)
|
||||||
callNotificationManager.cancelNotification()
|
callNotificationManager.cancelNotification()
|
||||||
|
callDurationHelper.cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user