From acacc97012932751bafd8347424734549a064814 Mon Sep 17 00:00:00 2001 From: Paul-Louis NECH Date: Sat, 2 Nov 2019 18:19:47 +0100 Subject: [PATCH] feat(Friends): Call/Text shortcuts --- app/src/main/java/fr/plnech/dunbar/Extensions.kt | 19 +++++++++++++++++++ app/src/main/java/fr/plnech/dunbar/model/Friend.kt | 5 ++++- app/src/main/java/fr/plnech/dunbar/notif/FriendReminder.kt | 9 +++------ app/src/main/java/fr/plnech/dunbar/ui/FriendsActivity.kt | 4 ++-- app/src/main/java/fr/plnech/dunbar/ui/FriendsAdapter.kt | 11 +++++++++++ app/src/main/res/layout/contact.xml | 8 ++++++-- app/src/main/res/values/colors.xml | 3 ++- 7 files changed, 47 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/fr/plnech/dunbar/Extensions.kt b/app/src/main/java/fr/plnech/dunbar/Extensions.kt index 6e5731b..627e2d3 100644 --- a/app/src/main/java/fr/plnech/dunbar/Extensions.kt +++ b/app/src/main/java/fr/plnech/dunbar/Extensions.kt @@ -1,8 +1,27 @@ package fr.plnech.dunbar +import android.content.Intent +import android.net.Uri +import fr.plnech.dunbar.model.Friend + fun String.plural(count: Int = 1): String { return when { count > 1 -> this + "s" else -> this } +} + +fun Friend.smsIntent(): Intent? { + return phone?.let { + val uri = Uri.parse("smsto:${it}") + Intent(Intent.ACTION_SENDTO, uri).apply { + putExtra("sms_body", "Hey ${this@smsIntent.firstName}, how are you?") + } + } +} + +fun Friend.callIntent(): Intent? { + return phone?.let { + Intent(Intent.ACTION_DIAL, Uri.parse("tel:${it}")) + } } \ No newline at end of file diff --git a/app/src/main/java/fr/plnech/dunbar/model/Friend.kt b/app/src/main/java/fr/plnech/dunbar/model/Friend.kt index f740365..f2d4af5 100644 --- a/app/src/main/java/fr/plnech/dunbar/model/Friend.kt +++ b/app/src/main/java/fr/plnech/dunbar/model/Friend.kt @@ -12,11 +12,14 @@ data class Friend(val map: MutableMap, val photo: Bitmap?) { val name: String? get() = map[Contacts.DISPLAY_NAME] + val firstName: String? + get() = name?.split(Regex("\\s"))?.firstOrNull() + val id: Int get() = map[Contacts._ID]!!.toInt() val phone: String? - get() = map["data1"] + get() = if(map[Contacts.HAS_PHONE_NUMBER] == "1") map["data1"] else null val lastTimeStamp = map[Contacts.LAST_TIME_CONTACTED]!!.toLong() diff --git a/app/src/main/java/fr/plnech/dunbar/notif/FriendReminder.kt b/app/src/main/java/fr/plnech/dunbar/notif/FriendReminder.kt index c989bd6..6a6a33f 100644 --- a/app/src/main/java/fr/plnech/dunbar/notif/FriendReminder.kt +++ b/app/src/main/java/fr/plnech/dunbar/notif/FriendReminder.kt @@ -2,11 +2,10 @@ package fr.plnech.dunbar.notif import android.app.* import android.content.Context -import android.content.Intent -import android.net.Uri import android.os.Build import androidx.core.app.NotificationCompat import fr.plnech.dunbar.model.Friend +import fr.plnech.dunbar.smsIntent val CHANNEL_ID = "dunbar" @@ -34,10 +33,8 @@ class FriendReminder(val ctx: Context) { fun createNotification(friend: Friend, activity: Activity): Notification? { if (!channelCreated) createNotificationChannel() - val uriSms = Uri.parse("smsto:1234567899") - val intentSMS = Intent(Intent.ACTION_SENDTO, uriSms) - intentSMS.putExtra("sms_body", "The SMS text") - val pendingIntent: PendingIntent = PendingIntent.getActivity(activity, 0, intentSMS, 0) + val pendingIntent: PendingIntent = + PendingIntent.getActivity(activity, 0, friend.smsIntent(), 0) return NotificationCompat.Builder(ctx, CHANNEL_ID) .setContentTitle("What is ${friend.name} up to?") diff --git a/app/src/main/java/fr/plnech/dunbar/ui/FriendsActivity.kt b/app/src/main/java/fr/plnech/dunbar/ui/FriendsActivity.kt index 6f10af2..2d6097b 100644 --- a/app/src/main/java/fr/plnech/dunbar/ui/FriendsActivity.kt +++ b/app/src/main/java/fr/plnech/dunbar/ui/FriendsActivity.kt @@ -86,7 +86,7 @@ class FriendsActivity : AppCompatActivity() { val newFriends = mutableListOf() contentResolver.query( - ContactsContract.CommonDataKinds.Phone.CONTENT_URI, + ContactsContract.CommonDataKinds.Contactables.CONTENT_URI, null, null, null, @@ -111,7 +111,7 @@ class FriendsActivity : AppCompatActivity() { friends.addAll(newFriends) } - friends.sortByDescending { it.timesContacted } + friends.sortBy { it.timesContacted } } private fun displayFriends() { diff --git a/app/src/main/java/fr/plnech/dunbar/ui/FriendsAdapter.kt b/app/src/main/java/fr/plnech/dunbar/ui/FriendsAdapter.kt index 8c71792..beafb05 100644 --- a/app/src/main/java/fr/plnech/dunbar/ui/FriendsAdapter.kt +++ b/app/src/main/java/fr/plnech/dunbar/ui/FriendsAdapter.kt @@ -7,7 +7,9 @@ import android.view.ViewGroup import android.widget.Toast import androidx.recyclerview.widget.RecyclerView import fr.plnech.dunbar.R +import fr.plnech.dunbar.callIntent import fr.plnech.dunbar.model.Friend +import fr.plnech.dunbar.smsIntent import kotlinx.android.synthetic.main.contact.view.* @@ -48,6 +50,15 @@ class FriendsViewHolder(private val view: View) : RecyclerView.ViewHolder(view) append("Never interacted") } friend.phone?.let { + view.contactCall.visibility = View.VISIBLE + view.contactCall.setOnClickListener { + view.context.startActivity(friend.callIntent()) + } + view.contactText.visibility = View.VISIBLE + view.contactText.setOnClickListener { + view.context.startActivity(friend.smsIntent()) + } + append("\n$it") } friend.photo?.let { diff --git a/app/src/main/res/layout/contact.xml b/app/src/main/res/layout/contact.xml index c39bbde..00741e1 100644 --- a/app/src/main/res/layout/contact.xml +++ b/app/src/main/res/layout/contact.xml @@ -64,12 +64,14 @@ #008577 #00574B - #FF5900 + #FF9800 + #FF5900 -- libgit2 0.27.0