diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/App.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/App.kt index 4f23dada..410409f2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/App.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/App.kt @@ -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() diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt index 5d8b4a21..4d6b3657 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt @@ -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) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallDurationHelper.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallDurationHelper.kt new file mode 100644 index 00000000..6f8e1559 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallDurationHelper.kt @@ -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) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt index 0896ae28..e72d8c41 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt @@ -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() } }