From 423085216352f986e06320491071adfbbe8a2096 Mon Sep 17 00:00:00 2001 From: Grafcube Date: Sat, 28 Sep 2024 17:57:33 +0530 Subject: [PATCH 1/4] Add dynamic shortcuts for starred contacts --- .../fossify/phone/activities/MainActivity.kt | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt index 7b30e375..e9096b25 100644 --- a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt @@ -8,6 +8,9 @@ import android.content.res.Configuration import android.graphics.drawable.Drawable import android.graphics.drawable.Icon import android.graphics.drawable.LayerDrawable +import android.net.Uri +import android.os.Build.VERSION +import android.os.Build.VERSION_CODES import android.os.Bundle import android.os.Handler import android.provider.Settings @@ -24,6 +27,7 @@ import org.fossify.commons.dialogs.RadioGroupDialog import org.fossify.commons.extensions.* import org.fossify.commons.helpers.* import org.fossify.commons.models.FAQItem +import org.fossify.commons.models.PhoneNumber import org.fossify.commons.models.RadioItem import org.fossify.commons.models.contacts.Contact import org.fossify.phone.BuildConfig @@ -289,6 +293,51 @@ class MainActivity : SimpleActivity() { } catch (ignored: Exception) { } } + pushStarredShortcuts() + } + + private fun pushStarredShortcuts() { + if (VERSION.SDK_INT >= VERSION_CODES.R) { + val starred = cachedContacts.filter { it.starred == 1 && it.phoneNumbers.isNotEmpty() } + this.config.favoritesContactsOrder.let { order -> + if (order.isEmpty()) { + starred + } else { + val orderList = Converters().jsonToStringList(order).withIndex().associate { it.value to it.index } + starred.sortedBy { orderList[it.contactId.toString()] } + } + }.take(3).forEachIndexed { index, contact -> + var number = if (contact.phoneNumbers.size == 1) { + contact.phoneNumbers[0].normalizedNumber + } else { + contact.phoneNumbers.firstOrNull { it.isPrimary }?.normalizedNumber + } + if (number == null) { + val radioItems = contact.phoneNumbers.mapIndexed { index, item -> + RadioItem(index, item.normalizedNumber, item) + } + RadioGroupDialog(this, ArrayList(radioItems)) { + number = (it as PhoneNumber).normalizedNumber + } + } + this.handlePermission(PERMISSION_CALL_PHONE) { hasPermission -> + val action = if (hasPermission) Intent.ACTION_CALL else Intent.ACTION_DIAL + val intent = Intent(action).apply { + data = Uri.fromParts("tel", number, null) + } + SimpleContactsHelper(this).getShortcutImage(contact.photoUri, contact.getNameToDisplay()) { image -> + this.runOnUiThread { + val shortcut = ShortcutInfo.Builder(this, "sd$index") + .setShortLabel(contact.getNameToDisplay()) + .setIcon(Icon.createWithAdaptiveBitmap(image)) + .setIntent(intent) + .build() + this.shortcutManager.pushDynamicShortcut(shortcut) + } + } + } + } + } } @SuppressLint("NewApi") From 61146c5e07646e628034a386015413794f05c318 Mon Sep 17 00:00:00 2001 From: Grafcube Date: Sat, 28 Sep 2024 18:56:21 +0530 Subject: [PATCH 2/4] Use preferred sorting from favourites screen --- .../main/kotlin/org/fossify/phone/activities/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt index e9096b25..f21e9b10 100644 --- a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt @@ -301,7 +301,7 @@ class MainActivity : SimpleActivity() { val starred = cachedContacts.filter { it.starred == 1 && it.phoneNumbers.isNotEmpty() } this.config.favoritesContactsOrder.let { order -> if (order.isEmpty()) { - starred + starred.sorted() } else { val orderList = Converters().jsonToStringList(order).withIndex().associate { it.value to it.index } starred.sortedBy { orderList[it.contactId.toString()] } From 4231da250527a4d644456a8ccb722e895b1a21f7 Mon Sep 17 00:00:00 2001 From: Grafcube Date: Tue, 1 Oct 2024 15:31:19 +0530 Subject: [PATCH 3/4] Refresh shortcuts with fragments --- app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt index f21e9b10..d3542f06 100644 --- a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt @@ -539,6 +539,7 @@ class MainActivity : SimpleActivity() { getContactsFragment()?.refreshItems() getFavoritesFragment()?.refreshItems() getRecentsFragment()?.refreshItems() + pushStarredShortcuts() } private fun getAllFragments(): ArrayList?> { From ea4fe332d3b311df4fc5954d97260469e5a2c55c Mon Sep 17 00:00:00 2001 From: Grafcube Date: Tue, 1 Oct 2024 16:10:48 +0530 Subject: [PATCH 4/4] Fix custom sorting condition --- .../main/kotlin/org/fossify/phone/activities/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt index d3542f06..8156688d 100644 --- a/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/phone/activities/MainActivity.kt @@ -300,7 +300,7 @@ class MainActivity : SimpleActivity() { if (VERSION.SDK_INT >= VERSION_CODES.R) { val starred = cachedContacts.filter { it.starred == 1 && it.phoneNumbers.isNotEmpty() } this.config.favoritesContactsOrder.let { order -> - if (order.isEmpty()) { + if (!config.isCustomOrderSelected) { starred.sorted() } else { val orderList = Converters().jsonToStringList(order).withIndex().associate { it.value to it.index }