mirror of
				https://github.com/SimpleMobileTools/Simple-Contacts.git
				synced 2025-06-05 21:59:27 +02:00 
			
		
		
		
	show the callers name, number and photo, if available
This commit is contained in:
		| @@ -57,7 +57,7 @@ android { | |||||||
| } | } | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     implementation 'com.simplemobiletools:commons:5.26.33' |     implementation 'com.simplemobiletools:commons:5.27.0' | ||||||
|     implementation 'joda-time:joda-time:2.10.1' |     implementation 'joda-time:joda-time:2.10.1' | ||||||
|     implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' |     implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' | ||||||
|     implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5' |     implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5' | ||||||
|   | |||||||
| @@ -10,6 +10,10 @@ import android.os.Bundle | |||||||
| import android.telecom.Call | import android.telecom.Call | ||||||
| import android.widget.RemoteViews | import android.widget.RemoteViews | ||||||
| import androidx.core.app.NotificationCompat | import androidx.core.app.NotificationCompat | ||||||
|  | import com.bumptech.glide.Glide | ||||||
|  | import com.bumptech.glide.load.engine.DiskCacheStrategy | ||||||
|  | import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions | ||||||
|  | import com.bumptech.glide.request.RequestOptions | ||||||
| import com.simplemobiletools.commons.extensions.* | import com.simplemobiletools.commons.extensions.* | ||||||
| import com.simplemobiletools.commons.helpers.isOreoPlus | import com.simplemobiletools.commons.helpers.isOreoPlus | ||||||
| import com.simplemobiletools.contacts.pro.R | import com.simplemobiletools.contacts.pro.R | ||||||
| @@ -33,8 +37,10 @@ class CallActivity : SimpleActivity() { | |||||||
|         updateTextColors(call_holder) |         updateTextColors(call_holder) | ||||||
|         initButtons() |         initButtons() | ||||||
|         showNotification() |         showNotification() | ||||||
|  |  | ||||||
|         CallManager.registerCallback(getCallCallback()) |         CallManager.registerCallback(getCallCallback()) | ||||||
|         updateCallState(CallManager.getState()) |         updateCallState(CallManager.getState()) | ||||||
|  |         updateOtherPersonsInfo() | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     override fun onDestroy() { |     override fun onDestroy() { | ||||||
| @@ -77,6 +83,24 @@ class CallActivity : SimpleActivity() { | |||||||
|         call_toggle_microphone.setImageDrawable(getDrawable(drawable)) |         call_toggle_microphone.setImageDrawable(getDrawable(drawable)) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private fun updateOtherPersonsInfo() { | ||||||
|  |         val callContact = CallManager.getCallContact(applicationContext) ?: return | ||||||
|  |         caller_name_label.text = callContact.name | ||||||
|  |         caller_number_label.text = callContact.number | ||||||
|  |         caller_number_label.beVisibleIf(callContact.number.isNotEmpty()) | ||||||
|  |  | ||||||
|  |         val options = RequestOptions() | ||||||
|  |             .diskCacheStrategy(DiskCacheStrategy.RESOURCE) | ||||||
|  |             .centerCrop() | ||||||
|  |  | ||||||
|  |         Glide.with(this) | ||||||
|  |             .load(callContact.photoUri) | ||||||
|  |             .transition(DrawableTransitionOptions.withCrossFade()) | ||||||
|  |             .apply(options) | ||||||
|  |             .apply(RequestOptions.circleCropTransform()) | ||||||
|  |             .into(caller_avatar) | ||||||
|  |     } | ||||||
|  |  | ||||||
|     private fun updateCallState(state: Int) { |     private fun updateCallState(state: Int) { | ||||||
|         when (state) { |         when (state) { | ||||||
|             Call.STATE_ACTIVE -> callStarted() |             Call.STATE_ACTIVE -> callStarted() | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ fun Context.getEmptyContact(): Contact { | |||||||
|     val originalContactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE |     val originalContactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE | ||||||
|     val organization = Organization("", "") |     val organization = Organization("", "") | ||||||
|     return Contact(0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "", |     return Contact(0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "", | ||||||
|             null, "", ArrayList(), organization, ArrayList(), ArrayList()) |         null, "", ArrayList(), organization, ArrayList(), ArrayList()) | ||||||
| } | } | ||||||
|  |  | ||||||
| fun Context.viewContact(contact: Contact) { | fun Context.viewContact(contact: Contact) { | ||||||
| @@ -226,7 +226,7 @@ fun Context.sendSMSToContacts(contacts: ArrayList<Contact>) { | |||||||
|     val numbers = StringBuilder() |     val numbers = StringBuilder() | ||||||
|     contacts.forEach { |     contacts.forEach { | ||||||
|         val number = it.phoneNumbers.firstOrNull { it.type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE } |         val number = it.phoneNumbers.firstOrNull { it.type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE } | ||||||
|                 ?: it.phoneNumbers.firstOrNull() |             ?: it.phoneNumbers.firstOrNull() | ||||||
|         if (number != null) { |         if (number != null) { | ||||||
|             numbers.append("${number.value};") |             numbers.append("${number.value};") | ||||||
|         } |         } | ||||||
| @@ -312,7 +312,7 @@ fun Context.getVisibleContactSources(): ArrayList<String> { | |||||||
|     val sources = getAllContactSources() |     val sources = getAllContactSources() | ||||||
|     val ignoredContactSources = config.ignoredContactSources |     val ignoredContactSources = config.ignoredContactSources | ||||||
|     return ArrayList(sources).filter { !ignoredContactSources.contains(it.getFullIdentifier()) } |     return ArrayList(sources).filter { !ignoredContactSources.contains(it.getFullIdentifier()) } | ||||||
|             .map { it.name }.toMutableList() as ArrayList<String> |         .map { it.name }.toMutableList() as ArrayList<String> | ||||||
| } | } | ||||||
|  |  | ||||||
| fun Context.getAllContactSources(): ArrayList<ContactSource> { | fun Context.getAllContactSources(): ArrayList<ContactSource> { | ||||||
|   | |||||||
| @@ -1,8 +1,13 @@ | |||||||
| package com.simplemobiletools.contacts.pro.helpers | package com.simplemobiletools.contacts.pro.helpers | ||||||
|  |  | ||||||
| import android.annotation.SuppressLint | import android.annotation.SuppressLint | ||||||
|  | import android.content.Context | ||||||
|  | import android.net.Uri | ||||||
| import android.telecom.Call | import android.telecom.Call | ||||||
| import android.telecom.VideoProfile | import android.telecom.VideoProfile | ||||||
|  | import com.simplemobiletools.commons.extensions.getNameFromPhoneNumber | ||||||
|  | import com.simplemobiletools.commons.extensions.getPhotoUriFromPhoneNumber | ||||||
|  | import com.simplemobiletools.contacts.pro.models.CallContact | ||||||
|  |  | ||||||
| // inspired by https://github.com/Chooloo/call_manage | // inspired by https://github.com/Chooloo/call_manage | ||||||
| @SuppressLint("NewApi") | @SuppressLint("NewApi") | ||||||
| @@ -35,5 +40,27 @@ class CallManager { | |||||||
|         } else { |         } else { | ||||||
|             call!!.state |             call!!.state | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         fun getCallContact(context: Context): CallContact? { | ||||||
|  |             val callContact = CallContact("", "", "") | ||||||
|  |             if (call == null) { | ||||||
|  |                 return callContact | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             val uri = Uri.decode(call!!.details.handle.toString()) | ||||||
|  |             if (uri.startsWith("tel:")) { | ||||||
|  |                 val number = uri.substringAfter("tel:") | ||||||
|  |                 callContact.number = number | ||||||
|  |                 callContact.name = context.getNameFromPhoneNumber(number) | ||||||
|  |                 callContact.photoUri = context.getPhotoUriFromPhoneNumber(number) | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (callContact.name.isEmpty() && callContact.number.isNotEmpty()) { | ||||||
|  |                 callContact.name = callContact.number | ||||||
|  |                 callContact.number = "" | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return callContact | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,4 @@ | |||||||
|  | package com.simplemobiletools.contacts.pro.models | ||||||
|  |  | ||||||
|  | // a simpler Contact model containing just info needed at the call screen | ||||||
|  | data class CallContact(var name: String, var number: String, var photoUri: String) | ||||||
		Reference in New Issue
	
	Block a user