diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt index f3fca781..c6d87d69 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialerActivity.kt @@ -27,7 +27,8 @@ class DialerActivity : SimpleActivity(), SensorEventListener { private val SENSOR_SENSITIVITY = 4 private val DISCONNECT_DELAY = 3000L - private var number = "" + private var callNumber = "" + private var callStatus = Call.STATE_NEW private var isIncomingCall = false private var isCallActive = false private var callDuration = 0 @@ -43,17 +44,15 @@ class DialerActivity : SimpleActivity(), SensorEventListener { LocalBroadcastManager.getInstance(applicationContext).registerReceiver(messageReceiver, IntentFilter(DIALER_INTENT_FILTER)) if (intent.action == Intent.ACTION_CALL && intent.data != null && intent.dataString?.contains("tel:") == true) { - number = Uri.decode(intent.dataString).substringAfter("tel:") + callNumber = Uri.decode(intent.dataString).substringAfter("tel:") initViews() tryFillingOtherEndsName() - startNotificationService() - } else if (intent.action == INCOMING_CALL && intent.extras?.containsKey(CALLER_NUMBER) == true && intent.extras?.containsKey(CALL_STATUS) == true) { + } else if (intent.action == INCOMING_CALL && intent.extras?.containsKey(CALL_NUMBER) == true && intent.extras?.containsKey(CALL_STATUS) == true) { isIncomingCall = true - number = intent.getStringExtra(CALLER_NUMBER) + callNumber = intent.getStringExtra(CALL_NUMBER) initViews() - updateUI(intent.getIntExtra(CALL_STATUS, 0)) + updateUI(intent.getIntExtra(CALL_STATUS, Call.STATE_NEW)) tryFillingOtherEndsName() - startNotificationService() } else { toast(R.string.unknown_error_occurred) finish() @@ -69,6 +68,9 @@ class DialerActivity : SimpleActivity(), SensorEventListener { override fun onPause() { super.onPause() sensorManager!!.unregisterListener(this) + if (!isCallActive && callStatus != Call.STATE_DISCONNECTED) { + startNotificationService() + } } override fun onDestroy() { @@ -79,7 +81,7 @@ class DialerActivity : SimpleActivity(), SensorEventListener { private val messageReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.extras?.containsKey(CALL_STATUS) == true) { - updateUI(intent.getIntExtra(CALL_STATUS, 0)) + updateUI(intent.getIntExtra(CALL_STATUS, Call.STATE_NEW)) } } } @@ -109,7 +111,9 @@ class DialerActivity : SimpleActivity(), SensorEventListener { private fun startNotificationService() { Intent(this, DialerCallService::class.java).apply { - putExtra(CALLER_NUMBER, number) + putExtra(CALL_NUMBER, callNumber) + putExtra(CALL_STATUS, callStatus) + putExtra(IS_INCOMING_CALL, isIncomingCall) startService(this) } } @@ -121,13 +125,14 @@ class DialerActivity : SimpleActivity(), SensorEventListener { } private fun hangUp() { + callStatus = Call.STATE_DISCONNECTED stopNotificationService() CallManager.declineCall() finish() } private fun tryFillingOtherEndsName() { - ContactsHelper(this).getContactWithNumber(number) { + ContactsHelper(this).getContactWithNumber(callNumber) { runOnUiThread { updateOtherParticipant(it) } @@ -135,6 +140,7 @@ class DialerActivity : SimpleActivity(), SensorEventListener { } private fun updateUI(status: Int) { + callStatus = status when (status) { Call.STATE_ACTIVE -> statusActive() Call.STATE_DISCONNECTED -> statusDisconnected() @@ -142,11 +148,12 @@ class DialerActivity : SimpleActivity(), SensorEventListener { } private fun statusActive() { + startNotificationService() isCallActive = true dialer_call_duration.beVisible() updateCallDuration() - dialer_label.text = "" + dialer_label.setText(R.string.ongoing_call) dialer_hangup_button.beVisible() dialer_incoming_accept.beGone() dialer_incoming_decline.beGone() @@ -166,6 +173,7 @@ class DialerActivity : SimpleActivity(), SensorEventListener { stopNotificationService() timerHandler.removeCallbacksAndMessages(null) dialer_hangup_button.beGone() + dialer_label.setText(R.string.disconnected) if (isCallActive) { dialer_hangup_button.postDelayed({ finish() @@ -179,9 +187,9 @@ class DialerActivity : SimpleActivity(), SensorEventListener { private fun updateOtherParticipant(contact: Contact?) { if (contact != null) { dialer_big_name_number.text = contact.getNameToDisplay() - dialer_number.text = number + dialer_number.text = callNumber } else { - dialer_big_name_number.text = number + dialer_big_name_number.text = callNumber dialer_number.beGone() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt index fbe43487..10ce4d3e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt @@ -34,8 +34,9 @@ const val KEY_NAME = "name" // Dialer const val INCOMING_CALL = "incoming_call" -const val CALLER_NUMBER = "caller_number" +const val CALL_NUMBER = "call_number" const val CALL_STATUS = "call_status" +const val IS_INCOMING_CALL = "is_incoming_call" const val DIALER_INTENT_FILTER = "dialer_intent_filter" const val LOCATION_CONTACTS_TAB = 0 diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/DialerCallService.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/DialerCallService.kt index 1db8a797..d9ebd241 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/DialerCallService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/DialerCallService.kt @@ -8,21 +8,29 @@ import android.app.Service import android.content.Context import android.content.Intent import android.os.Build +import android.telecom.Call import androidx.core.app.NotificationCompat import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.DialerActivity -import com.simplemobiletools.contacts.pro.helpers.CALLER_NUMBER +import com.simplemobiletools.contacts.pro.helpers.CALL_NUMBER +import com.simplemobiletools.contacts.pro.helpers.CALL_STATUS +import com.simplemobiletools.contacts.pro.helpers.IS_INCOMING_CALL class DialerCallService : Service() { private val CALL_NOTIFICATION_ID = 1 - private var number = "" + private var callNumber = "" + private var callStatus = Call.STATE_NEW + private var isIncomingCall = false override fun onBind(intent: Intent?) = null override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { super.onStartCommand(intent, flags, startId) - number = intent.getStringExtra(CALLER_NUMBER) + callNumber = intent.getStringExtra(CALL_NUMBER) + callStatus = intent.getIntExtra(CALL_STATUS, Call.STATE_NEW) + isIncomingCall = intent.getBooleanExtra(IS_INCOMING_CALL, false) + setupNotification() return START_STICKY } @@ -38,7 +46,7 @@ class DialerCallService : Service() { if (isOreoPlus()) { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val name = resources.getString(R.string.app_name) - val importance = NotificationManager.IMPORTANCE_HIGH + val importance = NotificationManager.IMPORTANCE_DEFAULT NotificationChannel(channelId, name, importance).apply { enableLights(false) enableVibration(false) @@ -47,14 +55,15 @@ class DialerCallService : Service() { } val notification = NotificationCompat.Builder(applicationContext, channelId) - .setSmallIcon(R.drawable.ic_person) - .setContentTitle(number) - .setContentText(getString(R.string.calling)) + .setSmallIcon(R.drawable.ic_phone) + .setContentTitle(callNumber) + .setContentText(getCallStatusString()) .setContentIntent(getLaunchDialerIntent()) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setPriority(NotificationCompat.PRIORITY_MAX) .setOngoing(true) .setChannelId(channelId) + .setUsesChronometer(callStatus == Call.STATE_ACTIVE) startForeground(CALL_NOTIFICATION_ID, notification.build()) } @@ -65,4 +74,12 @@ class DialerCallService : Service() { intent.addCategory(Intent.CATEGORY_LAUNCHER) return PendingIntent.getActivity(this, 0, intent, 0) } + + private fun getCallStatusString(): String { + return when (callStatus) { + Call.STATE_NEW -> applicationContext.getString(if (isIncomingCall) R.string.incoming_call else R.string.calling) + Call.STATE_ACTIVE -> applicationContext.getString(R.string.ongoing_call) + else -> "" + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/MyCallService.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/MyCallService.kt index 71fa844d..dc94f9bc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/MyCallService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/services/MyCallService.kt @@ -7,7 +7,7 @@ import android.telecom.Call import android.telecom.InCallService import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.simplemobiletools.contacts.pro.activities.DialerActivity -import com.simplemobiletools.contacts.pro.helpers.CALLER_NUMBER +import com.simplemobiletools.contacts.pro.helpers.CALL_NUMBER import com.simplemobiletools.contacts.pro.helpers.CALL_STATUS import com.simplemobiletools.contacts.pro.helpers.DIALER_INTENT_FILTER import com.simplemobiletools.contacts.pro.helpers.INCOMING_CALL @@ -30,7 +30,7 @@ class MyCallService : InCallService() { Intent(this, DialerActivity::class.java).apply { action = INCOMING_CALL putExtra(CALL_STATUS, call.state) - putExtra(CALLER_NUMBER, callerNumber) + putExtra(CALL_NUMBER, callerNumber) startActivity(this) } CallManager.updateCall(call) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 7958fd38..9b1557ed 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Göstərmək üçün sahəni seç diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 08869b0c..edd90782 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Sichtbare Felder auswählen diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index d99f3629..24a7ff7e 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Επιλογή εμφάνισης πεδίων diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 49da5f48..37c847db 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Hautatu erakusteko eremuak diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index dbdee9fe..916bcfd2 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Sélectionner les champs à afficher diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 96a71cdf..e3a68ed6 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Odaberi polja za prikaz diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 98ee80f9..f5538f56 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -113,6 +113,8 @@ Compositore Chiamata in corso… Incoming call from… + Ongoing call + Disconnected Seleziona i campi da mostrare diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 9a321697..f744c070 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected 表示する項目を選択 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index c34cba44..4b92dc52 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Select fields to show diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 907d262e..ffa82445 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Pasirinkti rodomus laukelius diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index c01cfded..6955b055 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Selecione os campos a mostrar diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b673b8a9..58ed2acb 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Выберите отображаемые поля diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index bc15ab4a..3b5d5d52 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -113,6 +113,8 @@ Telefón Vytáča sa… Prichádzajúci hovor od… + Prebiehajúci hovor + Ukončený hovor Zvoľte polia na zobrazenie diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 6851d4f6..584a565c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Välj vilka fält som ska visas diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 32ca04e4..f592c335 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Görüntülenecek alanları seç diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 08af0c67..aef6a641 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected 選擇要顯示的欄位 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fa3ff8e6..0782d38f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -113,6 +113,8 @@ Dialer Calling… Incoming call from… + Ongoing call + Disconnected Select fields to show