From 4a02c4e47e2a63ead00bc02200f8b358e7e9e9d9 Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Thu, 14 Oct 2021 18:56:03 +0200 Subject: [PATCH 01/14] Fixed group count while changing name (#589) --- .../simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt index 2f81ec1c..6ba6e361 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/RenameGroupDialog.kt @@ -36,6 +36,7 @@ class RenameGroupDialog(val activity: BaseSimpleActivity, val group: Group, val } group.title = newTitle + group.contactsCount = 0 ensureBackgroundThread { if (group.isPrivateSecretGroup()) { activity.groupsDB.insertOrUpdate(group) From 1c30c3fdb3d1b6746c32801377e60a19a1abf881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Marques?= Date: Sun, 31 Oct 2021 16:15:21 +0000 Subject: [PATCH 02/14] Update strings.xml --- app/src/main/res/values-pt/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index eba1607f..f2383f88 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -102,7 +102,7 @@ Grupos Origem do contacto Mensagem instantânea (IM) - Ringtone + Toque de chamada O contacto será apagado de todas as origens. From 3dd37f74b2c5bb95a19bd6652db5016561902563 Mon Sep 17 00:00:00 2001 From: Tibor Kaputa Date: Mon, 8 Nov 2021 20:18:45 +0100 Subject: [PATCH 03/14] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7549c8af..bfc4c93d 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ Contains no ads or unnecessary permissions. It is fully opensource, provides cus This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com -Get it on Google Play -Get it on F-Droid +Get it on Google Play +Get it on F-Droid
App image From b8e6a6b6cb55c99821a32a2c72f27d6fb7d98542 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 12 Nov 2021 21:57:42 +0100 Subject: [PATCH 04/14] moving the galician strings --- app/src/main/res/{values-gl => values-gl/strings.xml} | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) rename app/src/main/res/{values-gl => values-gl/strings.xml} (98%) diff --git a/app/src/main/res/values-gl b/app/src/main/res/values-gl/strings.xml similarity index 98% rename from app/src/main/res/values-gl rename to app/src/main/res/values-gl/strings.xml index 5c5b73f7..ab458bec 100644 --- a/app/src/main/res/values-gl +++ b/app/src/main/res/values-gl/strings.xml @@ -12,7 +12,6 @@ Enviar e-mail aos contactos Enviar SMS para o grupo Enviar e-mail para o grupo - Ligar a %s Criar novo contacto Adicionar a um contacto existente @@ -74,7 +73,6 @@ Parece que aínda non engadiu contactos aos favoritos - Ten que estar na pantalla de edición para cambiar un contacto Buscar nos contactos @@ -106,6 +104,7 @@ Grupos Orixe do contacto Mensaxe instantánea (IM) + Ringtone O contacto será eliminado de todas as orixes. @@ -132,7 +131,7 @@ Podes amosar os teus contactos ou grupos favoritos nunha lista separada. Os grupos pódense usar para enviar correos electrónicos por lotes ou SMS. Para aforrar tempo, podes renomealos facilmente. Contén botóns para chamar ou enviar mensaxes de texto aos teus contactos. Todos os campos visibles pódense personalizar como queiras e podes ocultar facilmente os que non uses. A función de busca buscará a cadea dada en todos os campos de contacto visibles para que poida atopar facilmente o contacto desexado. - + Tamén hai un teclado de marcación lixeiro ao teu servizo e con suxestións de contactos intelixentes. Dá soporte a exportación / importación de contactos en formato vCard a ficheiros .vcf e para migracións sinxelas ou facer copias de seguridade dos teus datos. @@ -152,7 +151,7 @@ Vén cun deseño material e un tema escuro de xeito predeterminado, fornece unha excelente experiencia de usuario cun uso sinxelo. Como non necesita acceso a Internet, tes máis privacidade, seguridade e estabilidade. Non contén anuncios nin permisos innecesarios. Dispón dun tema escuro e é totalmente de código aberto. - + Visita a páxina a través desta ligazón: https://www.simplemobiletools.com From 8d9c000a08c978bee63ce170791e237697223a66 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 13 Nov 2021 17:22:52 +0100 Subject: [PATCH 05/14] removing an invalid Indonesian translation file --- app/src/main/res/values-in/strings.xml | 170 ------------------------- 1 file changed, 170 deletions(-) delete mode 100644 app/src/main/res/values-in/strings.xml diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml deleted file mode 100644 index 4a41e73a..00000000 --- a/app/src/main/res/values-in/strings.xml +++ /dev/null @@ -1,170 +0,0 @@ - - Simple Contacts - Kontak - Alamat - Menyimpan… - Memperbarui… - Penyimpanan telepon (tidak terlihat oleh aplikasi lain) - Perusahaan - Jabatan - Situs web - Kirim SMS ke kontak - Kirim surel ke kontak - Kirim SMS ke grup - Kirim surel ke grup - Buat kontak baru - Tambah ke kontak yang ada - - - Tidak ada kontak dengan alamat surel yang ditemukan - Tidak ada kontak dengan nomor telepon yang ditemukan - - Kontak baru - Sunting kontak - Pilih kontak - Nama panggilan - - - Tidak ada grup - Buat grup baru - Buang dari grup - Grup ini kosong - Tambah kontak - Tidak ada grup kontak di perangkat ini - Buat grup - Tambah ke grup - Buat grup di dalam akun - - - Ambil foto - Pilih foto - Buang foto - - - Tampilkan nomor telepon pada layar utama - Tampilkan foto kontak - Tampilkan tombol dial pada layar utama - Saat kontak diklik - Panggil kontak - Lihat detail kontak - Kelola ruas kontak yang ditampilkan - Kontak - Hanya tampilkan kontak dengan nomor telepon - Show private contacts to Simple Dialer, Simple SMS Messenger and Simple Calendar Pro - - - Rumah - Kerja - Lainnya - - - Ponsel - Utama - Faks Kerja - Faks Rumah - Pager - Tidak ada nomor telepon yang ditemukan - - - Ulang tahun - Hari jadi - - - Sepertinya anda belum menambahkan kontak favorit. - - - Cari kontak - Cari favorit - Cari grup - - - Impor kontak - Ekspor kontak - Impor kontak dari berkas .vcf - Ekspor kontak ke berkas .vcf - Target sumber kontak - Sertakan sumber kontak - Nama berkas (tanpa .vcf) - - - Telepon - Tambah nomor ke kontak - - - Awalan - Akhiran - Nomor telepon - Surel - Alamat - Acara (ulang tahun, hari jadi) - Organisasi - Situs web - Grup - Sumber kontak - Pesan singkat (IM) - Ringtone - - - Kontak akan dihapus dari semua sumber kontak. - - - %d grup - %d grup - - - - Saya ingin mengubah ruas yang ditampilkan pada kontak. Bisakah saya melakukannya? - Ya, yang perlu anda lakukan adalah kunjungi Pengaturan -> Kelola ruas kontak yang ditampilkan. Lalu anda bisa memilih ruas yang ingin ditampilkan. Beberapa ruas dinonaktifkan secara bawaan, jadi anda mungkin akan menemukan yang baru di sana. - - - - Simple Contacts Pro - Manage your contacts easily - - Easy and quick contact management with no ads, handles groups and favorites too. - - A lightweight app for managing your contacts loved by millions of people. The contacts can be stored on your device only, but also synchronized via Google, or other accounts. - - You can use it for managing user emails and events too. It has the ability to sort/filter by multiple parameters, optionally display surname as the first name. - - You can display your favorite contacts or groups on a separate list. Groups can be used for sending out batch emails or SMS, to save you some time, you can rename them easily. - - It contains handy buttons for calling, or texting your contacts. All visible fields can be customized as you wish, you can easily hide the unused ones. The search function will search the given string at every visible contact field, to make you find your desired contact easily. - - There is a lightweight dialpad at your service too, with smart contact suggestions. - - It supports exporting/importing contacts in vCard format to .vcf files, for easy migrations or backing up your data. - - With this modern and stable contacts manager you can protect your contacts by not sharing them with other apps, so you can keep your contacts private. - - Like the contact source, you can also easily change the contact name, email, phone number, address, organization, groups and many other customizable fields. You can use it for storing contact events too, like birthdays, anniversaries, or any other custom ones. - - This simple contact editor has many handy settings like showing phone numbers on the main screen, toggle contact thumbnail visibility, showing only contacts with phone numbers, showing a call confirmation dialog before initiating a call. It comes with a quick dialer that also makes use of letters. - - To further improve the user experience, you can customize what happens at clicking on a contact. You can either initiate a call, go to the View Details screen, or edit the selected contact. - - You can easily block phone numbers to avoid unwanted incoming calls. - - To avoid showing potentially unwanted contacts, it has a powerful built in duplicate contact merger. - - It comes with material design and dark theme by default, provides great user experience for easy usage. The lack of internet access gives you more privacy, security and stability than other apps. - - Tanpa iklan dan perizinan yang tidak perlu. Sepenuhnya sumber terbuka, dengan warna yang bisa disesuaikan. - - Check out the full suite of Simple Tools here: - https://www.simplemobiletools.com - - Standalone website of Simple Contacts Pro: - https://www.simplemobiletools.com/contacts - - Facebook: - https://www.facebook.com/simplemobiletools - - Reddit: - https://www.reddit.com/r/SimpleMobileTools - - - - From 87076840130d8ae7e8cde7e4b8108414387f6f19 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 09:54:44 +0100 Subject: [PATCH 06/14] use layout animations only if they arent disabled by the system --- .../contacts/pro/activities/GroupContactsActivity.kt | 5 ++++- .../contacts/pro/activities/SelectContactActivity.kt | 5 ++++- .../contacts/pro/dialogs/SelectContactsDialog.kt | 6 +++++- .../contacts/pro/fragments/MyViewPagerFragment.kt | 10 ++++++++-- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt index a98d7c39..2f803349 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt @@ -139,7 +139,10 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh group_contacts_list.adapter = this } - group_contacts_list.scheduleLayoutAnimation() + if (areSystemAnimationsEnabled) { + group_contacts_list.scheduleLayoutAnimation() + } + group_contacts_fastscroller.setScrollToY(0) group_contacts_fastscroller.setViews(group_contacts_list) { val item = (group_contacts_list.adapter as ContactsAdapter).contactItems.getOrNull(it) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt index bd877bc8..c094bc5c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt @@ -201,7 +201,10 @@ class SelectContactActivity : SimpleActivity() { select_contact_list.adapter = this } - select_contact_list.scheduleLayoutAnimation() + if (areSystemAnimationsEnabled) { + select_contact_list.scheduleLayoutAnimation() + } + select_contact_fastscroller.setViews(select_contact_list) { select_contact_fastscroller.updateBubbleText(contacts[it].getBubbleText()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt index 0a014cb7..9ec82e84 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.contacts.pro.dialogs import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.extensions.areSystemAnimationsEnabled import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R @@ -42,7 +43,10 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, initiallySelectedContacts, allowSelectMultiple, select_contact_list, select_contact_fastscroller, contactClickCallback) - select_contact_list.scheduleLayoutAnimation() + if (context.areSystemAnimationsEnabled) { + select_contact_list.scheduleLayoutAnimation() + } + select_contact_fastscroller.setViews(select_contact_list) { select_contact_fastscroller.updateBubbleText(allContacts[it].getBubbleText()) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt index b6f0294c..2da9f23e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt @@ -178,7 +178,10 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) fragment_list.adapter = this } - fragment_list.scheduleLayoutAnimation() + if (context.areSystemAnimationsEnabled) { + fragment_list.scheduleLayoutAnimation() + } + fragment_fastscroller.setScrollToY(0) fragment_fastscroller.setViews(fragment_list) { val item = (fragment_list.adapter as GroupsAdapter).groups.getOrNull(it) @@ -211,7 +214,10 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) }.apply { fragment_list.adapter = this } - fragment_list.scheduleLayoutAnimation() + + if (context.areSystemAnimationsEnabled) { + fragment_list.scheduleLayoutAnimation() + } } else { (currAdapter as ContactsAdapter).apply { startNameWithSurname = config.startNameWithSurname From 390084a71952bb6882d926c23900546ace274840 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 10:03:35 +0100 Subject: [PATCH 07/14] updating commons, gradle, kotlin, icons --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 10 ---------- .../pro/activities/EditContactActivity.kt | 20 ++++++++++++------- .../contacts/pro/activities/SimpleActivity.kt | 2 +- .../pro/activities/ViewContactActivity.kt | 2 +- .../res/drawable/ic_account_box_vector.xml | 10 ++-------- app/src/main/res/drawable/ic_cake_vector.xml | 10 ++-------- .../main/res/drawable/ic_group_add_vector.xml | 10 ++-------- app/src/main/res/drawable/ic_link_vector.xml | 10 ++-------- .../main/res/layout/activity_edit_contact.xml | 4 ++-- .../main/res/layout/activity_view_contact.xml | 6 +++--- app/src/main/res/menu/cab.xml | 4 ++-- app/src/main/res/menu/cab_groups.xml | 10 +++++----- app/src/main/res/menu/menu_group.xml | 2 +- build.gradle | 4 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- 16 files changed, 40 insertions(+), 68 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a707d080..2e1d40a7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,7 +56,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:c1388a0721' + implementation 'com.github.SimpleMobileTools:Simple-Commons:df457fe86a' implementation 'joda-time:joda-time:2.10.3' implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5' implementation 'com.github.tibbi:IndicatorFastScroll:c3de1d040a' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1cde8a1e..bc9514d1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -199,21 +199,11 @@ android:label="@string/about" android:parentActivityName=".activities.MainActivity"/> - - - - R.drawable.ic_person_vector - LOCATION_FAVORITES_TAB -> R.drawable.ic_star_on_vector + LOCATION_FAVORITES_TAB -> R.drawable.ic_star_vector else -> R.drawable.ic_people_vector } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt index e0d02a37..d0161872 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt @@ -757,7 +757,7 @@ class ViewContactActivity : ContactActivity() { } } - private fun getStarDrawable(on: Boolean) = resources.getDrawable(if (on) R.drawable.ic_star_on_vector else R.drawable.ic_star_off_vector) + private fun getStarDrawable(on: Boolean) = resources.getDrawable(if (on) R.drawable.ic_star_vector else R.drawable.ic_star_outline_vector) private fun hideBigContactPhoto() { contact_photo_big.animate().alpha(0f).withEndAction { contact_photo_big.beGone() }.start() diff --git a/app/src/main/res/drawable/ic_account_box_vector.xml b/app/src/main/res/drawable/ic_account_box_vector.xml index 751db47d..5c7ea5f8 100644 --- a/app/src/main/res/drawable/ic_account_box_vector.xml +++ b/app/src/main/res/drawable/ic_account_box_vector.xml @@ -1,9 +1,3 @@ - - + + diff --git a/app/src/main/res/drawable/ic_cake_vector.xml b/app/src/main/res/drawable/ic_cake_vector.xml index acceada8..440a2c4d 100644 --- a/app/src/main/res/drawable/ic_cake_vector.xml +++ b/app/src/main/res/drawable/ic_cake_vector.xml @@ -1,9 +1,3 @@ - - + + diff --git a/app/src/main/res/drawable/ic_group_add_vector.xml b/app/src/main/res/drawable/ic_group_add_vector.xml index 6d4dab73..6722c4e4 100644 --- a/app/src/main/res/drawable/ic_group_add_vector.xml +++ b/app/src/main/res/drawable/ic_group_add_vector.xml @@ -1,9 +1,3 @@ - - + + diff --git a/app/src/main/res/drawable/ic_link_vector.xml b/app/src/main/res/drawable/ic_link_vector.xml index 8e04bd9e..51aa75eb 100644 --- a/app/src/main/res/drawable/ic_link_vector.xml +++ b/app/src/main/res/drawable/ic_link_vector.xml @@ -1,9 +1,3 @@ - - + + diff --git a/app/src/main/res/layout/activity_edit_contact.xml b/app/src/main/res/layout/activity_edit_contact.xml index a0fe6bc2..6cd78135 100644 --- a/app/src/main/res/layout/activity_edit_contact.xml +++ b/app/src/main/res/layout/activity_edit_contact.xml @@ -43,7 +43,7 @@ android:layout_marginBottom="@dimen/medium_margin" android:background="?attr/selectableItemBackgroundBorderless" android:padding="@dimen/tiny_margin" - android:src="@drawable/ic_star_off_vector" /> + android:src="@drawable/ic_star_outline_vector" /> + android:src="@drawable/ic_mail_vector" /> + android:src="@drawable/ic_mail_vector" /> + xmlns:app="http://schemas.android.com/apk/res-auto"> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> diff --git a/app/src/main/res/menu/menu_group.xml b/app/src/main/res/menu/menu_group.xml index 24ef4864..bdc6b6a2 100644 --- a/app/src/main/res/menu/menu_group.xml +++ b/app/src/main/res/menu/menu_group.xml @@ -13,7 +13,7 @@ app:showAsAction="ifRoom"/> diff --git a/build.gradle b/build.gradle index 5166e667..187851b8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.5.30' + ext.kotlin_version = '1.5.31' repositories { google() @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.0.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 78b02040..bc0757c0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip From e436073156119f978b82e97fa1ccad2836168b61 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 10:47:21 +0100 Subject: [PATCH 08/14] use the letter fastscroller at SelectContact activity and dialog --- .../pro/activities/SelectContactActivity.kt | 46 ++++++---- .../pro/adapters/SelectContactsAdapter.kt | 13 +-- .../pro/dialogs/SelectContactsDialog.kt | 83 ++++++++++++------- .../pro/fragments/MyViewPagerFragment.kt | 7 +- .../res/layout/activity_select_contact.xml | 23 +++-- .../main/res/layout/layout_select_contact.xml | 24 ++++-- 6 files changed, 126 insertions(+), 70 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt index c094bc5c..2bd5dd11 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SelectContactActivity.kt @@ -12,9 +12,9 @@ import android.view.Menu import android.view.MenuItem import androidx.appcompat.widget.SearchView import androidx.core.view.MenuItemCompat +import com.reddit.indicatorfastscroll.FastScrollItemIndicator import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS -import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS +import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.adapters.SelectContactsAdapter import com.simplemobiletools.contacts.pro.dialogs.ChangeSortingDialog @@ -26,6 +26,8 @@ import com.simplemobiletools.contacts.pro.helpers.ContactsHelper import com.simplemobiletools.contacts.pro.helpers.getProperText import com.simplemobiletools.contacts.pro.models.Contact import kotlinx.android.synthetic.main.activity_select_contact.* +import java.util.* +import kotlin.collections.ArrayList class SelectContactActivity : SimpleActivity() { private var specialMimeType: String? = null @@ -41,7 +43,7 @@ class SelectContactActivity : SimpleActivity() { return } - setupPlaceholders() + setupViews() handlePermission(PERMISSION_READ_CONTACTS) { if (it) { @@ -195,7 +197,7 @@ class SelectContactActivity : SimpleActivity() { runOnUiThread { updatePlaceholderVisibility(contacts) - SelectContactsAdapter(this, contacts, ArrayList(), false, select_contact_list, select_contact_fastscroller) { + SelectContactsAdapter(this, contacts, ArrayList(), false, select_contact_list) { confirmSelection(it) }.apply { select_contact_list.adapter = this @@ -205,9 +207,15 @@ class SelectContactActivity : SimpleActivity() { select_contact_list.scheduleLayoutAnimation() } - select_contact_fastscroller.setViews(select_contact_list) { - select_contact_fastscroller.updateBubbleText(contacts[it].getBubbleText()) - } + letter_fastscroller.setupWithRecyclerView(select_contact_list, { position -> + try { + val name = contacts[position].getNameToDisplay() + val character = if (name.isNotEmpty()) name.substring(0, 1) else "" + FastScrollItemIndicator.Text(character.normalizeString().toUpperCase(Locale.getDefault())) + } catch (e: Exception) { + FastScrollItemIndicator.Text("") + } + }) } } } @@ -231,25 +239,35 @@ class SelectContactActivity : SimpleActivity() { } } - private fun setupPlaceholders() { + private fun setupViews() { + val adjustedPrimaryColor = getAdjustedPrimaryColor() select_contact_placeholder.setTextColor(config.textColor) - select_contact_placeholder_2.setTextColor(getAdjustedPrimaryColor()) + select_contact_placeholder_2.setTextColor(adjustedPrimaryColor) select_contact_placeholder_2.underlineText() select_contact_placeholder_2.setOnClickListener { FilterContactSourcesDialog(this) { initContacts() } } + + letter_fastscroller?.textColor = config.textColor.getColorStateList() + letter_fastscroller?.pressedTextColor = adjustedPrimaryColor + letter_fastscroller_thumb?.fontSize = getTextSize() + letter_fastscroller_thumb?.textColor = adjustedPrimaryColor.getContrastColor() + letter_fastscroller_thumb?.thumbColor = adjustedPrimaryColor.getColorStateList() + letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller) } private fun updatePlaceholderVisibility(contacts: ArrayList) { select_contact_list.beVisibleIf(contacts.isNotEmpty()) select_contact_placeholder_2.beVisibleIf(contacts.isEmpty()) select_contact_placeholder.beVisibleIf(contacts.isEmpty()) - select_contact_placeholder.setText(when (specialMimeType) { - Email.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_emails - Phone.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_phone_numbers - else -> R.string.no_contacts_found - }) + select_contact_placeholder.setText( + when (specialMimeType) { + Email.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_emails + Phone.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_phone_numbers + else -> R.string.no_contacts_found + } + ) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/SelectContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/SelectContactsAdapter.kt index 451cdb68..64caebb5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/SelectContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/SelectContactsAdapter.kt @@ -12,7 +12,6 @@ import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.signature.ObjectKey import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.SimpleContactsHelper -import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.SimpleActivity @@ -21,9 +20,11 @@ import com.simplemobiletools.contacts.pro.models.Contact import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.* import java.util.* -class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayList, private val selectedContacts: ArrayList, private val allowPickMultiple: Boolean, - recyclerView: MyRecyclerView, val fastScroller: FastScroller, private val itemClick: ((Contact) -> Unit)? = null) : - RecyclerView.Adapter() { +class SelectContactsAdapter( + val activity: SimpleActivity, var contacts: ArrayList, private val selectedContacts: ArrayList, private val allowPickMultiple: Boolean, + recyclerView: MyRecyclerView, private val itemClick: ((Contact) -> Unit)? = null +) : + RecyclerView.Adapter() { private val itemViews = SparseArray() private val selectedPositions = HashSet() private val config = activity.config @@ -87,7 +88,6 @@ class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayLis textToHighlight = highlightText notifyDataSetChanged() } - fastScroller.measureRecyclerView() } override fun onViewRecycled(holder: ViewHolder) { @@ -124,7 +124,8 @@ class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayLis } val numberText = phoneNumberToUse?.value ?: "" - contact_number.text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor, false, true) + contact_number.text = + if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor, false, true) contact_number.setTextColor(textColor) contact_number.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt index 9ec82e84..914d6175 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/dialogs/SelectContactsDialog.kt @@ -1,18 +1,23 @@ package com.simplemobiletools.contacts.pro.dialogs import androidx.appcompat.app.AlertDialog -import com.simplemobiletools.commons.extensions.areSystemAnimationsEnabled -import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.reddit.indicatorfastscroll.FastScrollItemIndicator +import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.SimpleActivity import com.simplemobiletools.contacts.pro.adapters.SelectContactsAdapter +import com.simplemobiletools.contacts.pro.extensions.config import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources import com.simplemobiletools.contacts.pro.models.Contact import kotlinx.android.synthetic.main.layout_select_contact.view.* +import java.util.* +import kotlin.collections.ArrayList -class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayList, val allowSelectMultiple: Boolean, val showOnlyContactsWithNumber: Boolean, - selectContacts: ArrayList? = null, val callback: (addedContacts: ArrayList, removedContacts: ArrayList) -> Unit) { +class SelectContactsDialog( + val activity: SimpleActivity, initialContacts: ArrayList, val allowSelectMultiple: Boolean, val showOnlyContactsWithNumber: Boolean, + selectContacts: ArrayList? = null, val callback: (addedContacts: ArrayList, removedContacts: ArrayList) -> Unit +) { private var dialog: AlertDialog? = null private var view = activity.layoutInflater.inflate(R.layout.layout_select_contact, null) private var initiallySelectedContacts = ArrayList() @@ -32,35 +37,33 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL initiallySelectedContacts = selectContacts } - activity.runOnUiThread { - // if selecting multiple contacts is disabled, react on first contact click and dismiss the dialog - val contactClickCallback: ((Contact) -> Unit)? = if (allowSelectMultiple) null else { contact -> - callback(arrayListOf(contact), arrayListOf()) - dialog!!.dismiss() + // if selecting multiple contacts is disabled, react on first contact click and dismiss the dialog + val contactClickCallback: ((Contact) -> Unit)? = if (allowSelectMultiple) null else { contact -> + callback(arrayListOf(contact), arrayListOf()) + dialog!!.dismiss() + } + + view.apply { + select_contact_list.adapter = SelectContactsAdapter( + activity, allContacts, initiallySelectedContacts, allowSelectMultiple, + select_contact_list, contactClickCallback + ) + + if (context.areSystemAnimationsEnabled) { + select_contact_list.scheduleLayoutAnimation() } + } - view.apply { - select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, initiallySelectedContacts, allowSelectMultiple, - select_contact_list, select_contact_fastscroller, contactClickCallback) + setupFastscroller(allContacts) - if (context.areSystemAnimationsEnabled) { - select_contact_list.scheduleLayoutAnimation() - } + val builder = AlertDialog.Builder(activity) + if (allowSelectMultiple) { + builder.setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() } + } + builder.setNegativeButton(R.string.cancel, null) - select_contact_fastscroller.setViews(select_contact_list) { - select_contact_fastscroller.updateBubbleText(allContacts[it].getBubbleText()) - } - } - - val builder = AlertDialog.Builder(activity) - if (allowSelectMultiple) { - builder.setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() } - } - builder.setNegativeButton(R.string.cancel, null) - - dialog = builder.create().apply { - activity.setupDialogStuff(view, this) - } + dialog = builder.create().apply { + activity.setupDialogStuff(view, this) } } @@ -74,4 +77,26 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL callback(newlySelectedContacts, unselectedContacts) } } + + private fun setupFastscroller(allContacts: ArrayList) { + val adjustedPrimaryColor = activity.getAdjustedPrimaryColor() + view.apply { + letter_fastscroller?.textColor = context.config.textColor.getColorStateList() + letter_fastscroller?.pressedTextColor = adjustedPrimaryColor + letter_fastscroller_thumb?.fontSize = context.getTextSize() + letter_fastscroller_thumb?.textColor = adjustedPrimaryColor.getContrastColor() + letter_fastscroller_thumb?.thumbColor = adjustedPrimaryColor.getColorStateList() + letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller) + } + + view.letter_fastscroller.setupWithRecyclerView(view.select_contact_list, { position -> + try { + val name = allContacts[position].getNameToDisplay() + val character = if (name.isNotEmpty()) name.substring(0, 1) else "" + FastScrollItemIndicator.Text(character.normalizeString().toUpperCase(Locale.getDefault())) + } catch (e: Exception) { + FastScrollItemIndicator.Text("") + } + }) + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt index 2da9f23e..9d6e2abe 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt @@ -243,14 +243,15 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } private fun setupLetterFastscroller(contacts: ArrayList) { + val sorting = context.config.sorting letter_fastscroller.setupWithRecyclerView(fragment_list, { position -> try { val contact = contacts[position] var name = when { contact.isABusinessContact() -> contact.getFullCompany() - context.config.sorting and SORT_BY_SURNAME != 0 && contact.surname.isNotEmpty() -> contact.surname - context.config.sorting and SORT_BY_MIDDLE_NAME != 0 && contact.middleName.isNotEmpty() -> contact.middleName - context.config.sorting and SORT_BY_FIRST_NAME != 0 && contact.firstName.isNotEmpty() -> contact.firstName + sorting and SORT_BY_SURNAME != 0 && contact.surname.isNotEmpty() -> contact.surname + sorting and SORT_BY_MIDDLE_NAME != 0 && contact.middleName.isNotEmpty() -> contact.middleName + sorting and SORT_BY_FIRST_NAME != 0 && contact.firstName.isNotEmpty() -> contact.firstName context.config.startNameWithSurname -> contact.surname else -> contact.firstName } diff --git a/app/src/main/res/layout/activity_select_contact.xml b/app/src/main/res/layout/activity_select_contact.xml index a0cad591..b122536a 100644 --- a/app/src/main/res/layout/activity_select_contact.xml +++ b/app/src/main/res/layout/activity_select_contact.xml @@ -42,16 +42,21 @@ android:scrollbars="none" app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" /> - + android:paddingTop="@dimen/big_margin" + android:paddingBottom="@dimen/big_margin" /> - + - diff --git a/app/src/main/res/layout/layout_select_contact.xml b/app/src/main/res/layout/layout_select_contact.xml index c0b20909..166ecd1d 100644 --- a/app/src/main/res/layout/layout_select_contact.xml +++ b/app/src/main/res/layout/layout_select_contact.xml @@ -11,19 +11,25 @@ android:layout_height="wrap_content" android:clipToPadding="false" android:layoutAnimation="@anim/layout_animation" + android:paddingEnd="@dimen/big_margin" android:scrollbars="none" app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" /> - + android:paddingTop="@dimen/big_margin" + android:paddingBottom="@dimen/big_margin" /> - + - From fceeca441a2671bd6a1b01d6283b00fe43504cc9 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 11:06:55 +0100 Subject: [PATCH 09/14] use the new fastscroller at groups --- .../pro/activities/GroupContactsActivity.kt | 16 ++++------- .../contacts/pro/adapters/ContactsAdapter.kt | 26 ++++++++++------- .../contacts/pro/adapters/GroupsAdapter.kt | 10 +++++-- .../pro/fragments/MyViewPagerFragment.kt | 13 ++------- .../contacts/pro/helpers/ContactsHelper.kt | 22 +++++++++++---- .../res/layout/activity_group_contacts.xml | 28 ++++++++----------- app/src/main/res/layout/fragment_layout.xml | 28 ++++++++----------- 7 files changed, 72 insertions(+), 71 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt index 2f803349..c0e76908 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt @@ -65,8 +65,10 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh fabClicked() } + val adjustedPrimaryColor = getAdjustedPrimaryColor() + group_contacts_fastscroller?.updateColors(adjustedPrimaryColor, adjustedPrimaryColor.getContrastColor()) group_contacts_placeholder_2.underlineText() - group_contacts_placeholder_2.setTextColor(getAdjustedPrimaryColor()) + group_contacts_placeholder_2.setTextColor(adjustedPrimaryColor) } override fun onResume() { @@ -133,7 +135,7 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh private fun updateContacts(contacts: ArrayList) { val currAdapter = group_contacts_list.adapter if (currAdapter == null) { - ContactsAdapter(this, contacts, this, LOCATION_GROUP_CONTACTS, this, group_contacts_list, group_contacts_fastscroller) { + ContactsAdapter(this, contacts, this, LOCATION_GROUP_CONTACTS, this, group_contacts_list) { contactClicked(it as Contact) }.apply { group_contacts_list.adapter = this @@ -142,12 +144,6 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh if (areSystemAnimationsEnabled) { group_contacts_list.scheduleLayoutAnimation() } - - group_contacts_fastscroller.setScrollToY(0) - group_contacts_fastscroller.setViews(group_contacts_list) { - val item = (group_contacts_list.adapter as ContactsAdapter).contactItems.getOrNull(it) - group_contacts_fastscroller.updateBubbleText(item?.getBubbleText() ?: "") - } } else { (currAdapter as ContactsAdapter).updateItems(contacts) } @@ -183,9 +179,9 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, defaultRingtoneUri) } } - + private fun setRingtoneOnSelected(uri: Uri) { - groupContacts.forEach{ + groupContacts.forEach { ContactsHelper(this).updateRingtone(it.contactId.toString(), uri.toString()) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt index 7465d5cc..207cd67a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/adapters/ContactsAdapter.kt @@ -19,13 +19,13 @@ import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.signature.ObjectKey +import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem -import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.activities.SimpleActivity @@ -38,10 +38,11 @@ import com.simplemobiletools.contacts.pro.interfaces.RemoveFromGroupListener import com.simplemobiletools.contacts.pro.models.Contact import java.util.* -class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList, private val refreshListener: RefreshContactsListener?, - private val location: Int, private val removeListener: RemoveFromGroupListener?, recyclerView: MyRecyclerView, - fastScroller: FastScroller?, highlightText: String = "", itemClick: (Any) -> Unit) : - MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { +class ContactsAdapter( + activity: SimpleActivity, var contactItems: ArrayList, private val refreshListener: RefreshContactsListener?, + private val location: Int, private val removeListener: RemoveFromGroupListener?, recyclerView: MyRecyclerView, + highlightText: String = "", itemClick: (Any) -> Unit +) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate { private val NEW_GROUP_ID = -1 private var config = activity.config @@ -66,10 +67,13 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList + val duplicates = allContacts.filter { it.id != contactToRemove.id && it.getHashToCompare() == contactToRemove.getHashToCompare() } + .toMutableList() as ArrayList duplicates.add(contactToRemove) ContactsHelper(activity).deleteContacts(duplicates) } @@ -392,4 +396,6 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList, val refreshListener: RefreshContactsListener?, recyclerView: MyRecyclerView, - fastScroller: FastScroller, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { +class GroupsAdapter( + activity: SimpleActivity, var groups: ArrayList, val refreshListener: RefreshContactsListener?, recyclerView: MyRecyclerView, + itemClick: (Any) -> Unit +) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate { private var textToHighlight = "" var showContactThumbnails = activity.config.showContactThumbnails @@ -172,4 +174,6 @@ class GroupsAdapter(activity: SimpleActivity, var groups: ArrayList, val } } } + + override fun onChange(position: Int) = groups.getOrNull(position)?.getBubbleText() ?: "" } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt index 9d6e2abe..c1e17e92 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt @@ -84,8 +84,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } context.updateTextColors(fragment_wrapper.parent as ViewGroup) - fragment_fastscroller?.updatePrimaryColor() - fragment_fastscroller?.updateBubblePrimaryColor() + fragment_fastscroller?.updateColors(adjustedPrimaryColor, adjustedPrimaryColor.getContrastColor()) fragment_placeholder_2?.setTextColor(adjustedPrimaryColor) letter_fastscroller?.textColor = textColor.getColorStateList() @@ -169,7 +168,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) val currAdapter = fragment_list.adapter if (currAdapter == null) { - GroupsAdapter(activity as SimpleActivity, storedGroups, activity as RefreshContactsListener, fragment_list, fragment_fastscroller) { + GroupsAdapter(activity as SimpleActivity, storedGroups, activity as RefreshContactsListener, fragment_list) { Intent(activity, GroupContactsActivity::class.java).apply { putExtra(GROUP, it as Group) activity!!.startActivity(this) @@ -181,12 +180,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) if (context.areSystemAnimationsEnabled) { fragment_list.scheduleLayoutAnimation() } - - fragment_fastscroller.setScrollToY(0) - fragment_fastscroller.setViews(fragment_list) { - val item = (fragment_list.adapter as GroupsAdapter).groups.getOrNull(it) - fragment_fastscroller.updateBubbleText(item?.getBubbleText() ?: "") - } } else { (currAdapter as GroupsAdapter).apply { showContactThumbnails = activity.config.showContactThumbnails @@ -209,7 +202,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) else -> LOCATION_CONTACTS_TAB } - ContactsAdapter(activity as SimpleActivity, contacts, activity as RefreshContactsListener, location, null, fragment_list, null) { + ContactsAdapter(activity as SimpleActivity, contacts, activity as RefreshContactsListener, location, null, fragment_list) { (activity as RefreshContactsListener).contactClicked(it as Contact) }.apply { fragment_list.adapter = this diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt index d87d92de..c45eaffa 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/ContactsHelper.kt @@ -28,7 +28,12 @@ class ContactsHelper(val context: Context) { private val BATCH_SIZE = 50 private var displayContactSources = ArrayList() - fun getContacts(getAll: Boolean = false, gettingDuplicates: Boolean = false, ignoredContactSources: HashSet = HashSet(), callback: (ArrayList) -> Unit) { + fun getContacts( + getAll: Boolean = false, + gettingDuplicates: Boolean = false, + ignoredContactSources: HashSet = HashSet(), + callback: (ArrayList) -> Unit + ) { ensureBackgroundThread { val contacts = SparseArray() displayContactSources = context.getVisibleContactSources() @@ -187,8 +192,10 @@ class ContactsHelper(val context: Context) { val organization = Organization("", "") val websites = ArrayList() val ims = ArrayList() - val contact = Contact(id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, numbers, emails, addresses, - events, accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone) + val contact = Contact( + id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, numbers, emails, addresses, + events, accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone + ) contacts.put(id, contact) } @@ -733,8 +740,10 @@ class ContactsHelper(val context: Context) { val organization = getOrganizations(id)[id] ?: Organization("", "") val websites = getWebsites(id)[id] ?: ArrayList() val ims = getIMs(id)[id] ?: ArrayList() - return Contact(id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, number, emails, addresses, events, - accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone) + return Contact( + id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, number, emails, addresses, events, + accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone + ) } } @@ -1499,7 +1508,8 @@ class ContactsHelper(val context: Context) { fun getDuplicatesOfContact(contact: Contact, addOriginal: Boolean, callback: (ArrayList) -> Unit) { ensureBackgroundThread { getContacts(true, true) { contacts -> - val duplicates = contacts.filter { it.id != contact.id && it.getHashToCompare() == contact.getHashToCompare() }.toMutableList() as ArrayList + val duplicates = + contacts.filter { it.id != contact.id && it.getHashToCompare() == contact.getHashToCompare() }.toMutableList() as ArrayList if (addOriginal) { duplicates.add(contact) } diff --git a/app/src/main/res/layout/activity_group_contacts.xml b/app/src/main/res/layout/activity_group_contacts.xml index ebccff66..1727fa49 100644 --- a/app/src/main/res/layout/activity_group_contacts.xml +++ b/app/src/main/res/layout/activity_group_contacts.xml @@ -38,25 +38,21 @@ android:textSize="@dimen/bigger_text_size" android:visibility="gone" /> - - - + android:layout_width="match_parent" + android:layout_height="wrap_content"> - + - + - - - + android:layout_width="match_parent" + android:layout_height="wrap_content"> - + - + Date: Wed, 17 Nov 2021 11:10:52 +0100 Subject: [PATCH 10/14] hide the proper views if no content is found --- .../contacts/pro/activities/GroupContactsActivity.kt | 2 +- .../contacts/pro/fragments/MyViewPagerFragment.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt index c0e76908..481888b6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/GroupContactsActivity.kt @@ -110,7 +110,7 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh groupContacts = it.filter { it.groups.map { it.id }.contains(group.id) } as ArrayList group_contacts_placeholder_2.beVisibleIf(groupContacts.isEmpty()) group_contacts_placeholder.beVisibleIf(groupContacts.isEmpty()) - group_contacts_list.beVisibleIf(groupContacts.isNotEmpty()) + group_contacts_fastscroller.beVisibleIf(groupContacts.isNotEmpty()) updateContacts(groupContacts) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt index c1e17e92..fd5415f4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt @@ -164,7 +164,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) fragment_placeholder_2.beVisibleIf(storedGroups.isEmpty()) fragment_placeholder.beVisibleIf(storedGroups.isEmpty()) - fragment_list.beVisibleIf(storedGroups.isNotEmpty()) + fragment_fastscroller.beVisibleIf(storedGroups.isNotEmpty()) val currAdapter = fragment_list.adapter if (currAdapter == null) { From b786b862ecab95bb75545e84cf57e203de86d246 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 17:27:40 +0100 Subject: [PATCH 11/14] shortening some strings --- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-hi-rIN/strings.xml | 2 +- app/src/main/res/values-hr/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1f0239a5..1bec459d 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -41,7 +41,7 @@ Odstranit fotku - Zobrazit telefonní čísla na hlavní obrazovce + Zobrazit telefonní čísla Zobrazit obrázky kontaktů Zobrazit tlačítko číselníku na hlavní obrazovce Po klepnutí na kontakt diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index f120ff97..ec5182a3 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -41,7 +41,7 @@ Remove photo - Show phone numbers on the main screen + Show phone numbers Show contact thumbnails Show a dialpad button on the main screen On contact click diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index bb780071..a931ac75 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -41,7 +41,7 @@ Ukloni fotografiju - Prikaži telefonske brojeve na glavnom zaslonu + Prikaži telefonske brojeve Prikaži sličice kontakata Show a dialpad button on the main screen Prilikom dodira kontakta diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 187439fa..cecbed4b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -41,7 +41,7 @@ Usuń zdjęcie - Pokazuj numery telefonów na ekranie głównym + Pokazuj numery telefonów Pokazuj miniaturki kontaktów Pokazuj przycisk panelu wybierania numeru na ekranie głównym Przy naciśnięciu kontaktu diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 2fcb8b28..885a9083 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -41,7 +41,7 @@ Odstrániť foto - Zobraziť telefónne čísla na hlavnej obrazovke + Zobraziť telefónne čísla Zobraziť obrázky kontaktov Zobraziť tlačidlo pre číselník na hlavnej obrazovke Po kliknutí na kontakt diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f120ff97..ec5182a3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,7 +41,7 @@ Remove photo - Show phone numbers on the main screen + Show phone numbers Show contact thumbnails Show a dialpad button on the main screen On contact click From 3e23f9d8ecd78bdeadb976f3c56c5c3c623da241 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 17:38:07 +0100 Subject: [PATCH 12/14] redesigning the app settings --- app/build.gradle | 2 +- .../pro/activities/SettingsActivity.kt | 68 ++- app/src/main/res/layout/activity_settings.xml | 551 +++++++++--------- app/src/main/res/menu/menu.xml | 20 +- 4 files changed, 317 insertions(+), 324 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2e1d40a7..e7da8848 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,7 +56,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:df457fe86a' + implementation 'com.github.SimpleMobileTools:Simple-Commons:f86699e092' implementation 'joda-time:joda-time:2.10.3' implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5' implementation 'com.github.tibbi:IndicatorFastScroll:c3de1d040a' diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt index 24c2c69d..dc20665d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt @@ -3,10 +3,7 @@ package com.simplemobiletools.contacts.pro.activities import android.os.Bundle import android.view.Menu import com.simplemobiletools.commons.dialogs.RadioGroupDialog -import com.simplemobiletools.commons.extensions.baseConfig -import com.simplemobiletools.commons.extensions.beVisibleIf -import com.simplemobiletools.commons.extensions.getFontSizeText -import com.simplemobiletools.commons.extensions.updateTextColors +import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.contacts.pro.R @@ -44,6 +41,19 @@ class SettingsActivity : SimpleActivity() { setupDefaultTab() updateTextColors(settings_holder) invalidateOptionsMenu() + + arrayOf(settings_color_customization_label, settings_general_settings_label, settings_main_screen_label, settings_list_view_label).forEach { + it.setTextColor(getAdjustedPrimaryColor()) + } + + arrayOf( + settings_color_customization_holder, + settings_general_settings_holder, + settings_main_screen_holder, + settings_list_view_holder + ).forEach { + it.background.applyColorFilter(baseConfig.backgroundColor.getContrastColor()) + } } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -64,7 +74,7 @@ class SettingsActivity : SimpleActivity() { } private fun setupManageShownTabs() { - settings_manage_tabs_holder.setOnClickListener { + settings_manage_shown_tabs_holder.setOnClickListener { ManageVisibleTabsDialog(this) } } @@ -76,7 +86,8 @@ class SettingsActivity : SimpleActivity() { RadioItem(TAB_CONTACTS, getString(R.string.contacts_tab)), RadioItem(TAB_FAVORITES, getString(R.string.favorites_tab)), RadioItem(TAB_GROUPS, getString(R.string.groups_tab)), - RadioItem(TAB_LAST_USED, getString(R.string.last_used_tab))) + RadioItem(TAB_LAST_USED, getString(R.string.last_used_tab)) + ) RadioGroupDialog(this@SettingsActivity, items, config.defaultTab) { config.defaultTab = it as Int @@ -85,12 +96,14 @@ class SettingsActivity : SimpleActivity() { } } - private fun getDefaultTabText() = getString(when (baseConfig.defaultTab) { - TAB_CONTACTS -> R.string.contacts_tab - TAB_FAVORITES -> R.string.favorites_tab - TAB_GROUPS -> R.string.groups_tab - else -> R.string.last_used_tab - }) + private fun getDefaultTabText() = getString( + when (baseConfig.defaultTab) { + TAB_CONTACTS -> R.string.contacts_tab + TAB_FAVORITES -> R.string.favorites_tab + TAB_GROUPS -> R.string.groups_tab + else -> R.string.last_used_tab + } + ) private fun setupFontSize() { settings_font_size.text = getFontSizeText() @@ -99,7 +112,8 @@ class SettingsActivity : SimpleActivity() { RadioItem(FONT_SIZE_SMALL, getString(R.string.small)), RadioItem(FONT_SIZE_MEDIUM, getString(R.string.medium)), RadioItem(FONT_SIZE_LARGE, getString(R.string.large)), - RadioItem(FONT_SIZE_EXTRA_LARGE, getString(R.string.extra_large))) + RadioItem(FONT_SIZE_EXTRA_LARGE, getString(R.string.extra_large)) + ) RadioGroupDialog(this@SettingsActivity, items, config.fontSize) { config.fontSize = it as Int @@ -111,6 +125,11 @@ class SettingsActivity : SimpleActivity() { private fun setupUseEnglish() { settings_use_english_holder.beVisibleIf(config.wasUseEnglishToggled || Locale.getDefault().language != "en") settings_use_english.isChecked = config.useEnglish + + if (settings_use_english_holder.isGone()) { + settings_font_size_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) + } + settings_use_english_holder.setOnClickListener { settings_use_english.toggle() config.useEnglish = settings_use_english.isChecked @@ -143,10 +162,10 @@ class SettingsActivity : SimpleActivity() { } private fun setupStartNameWithSurname() { - settings_start_with_surname.isChecked = config.startNameWithSurname - settings_start_with_surname_holder.setOnClickListener { - settings_start_with_surname.toggle() - config.startNameWithSurname = settings_start_with_surname.isChecked + settings_start_name_with_surname.isChecked = config.startNameWithSurname + settings_start_name_with_surname_holder.setOnClickListener { + settings_start_name_with_surname.toggle() + config.startNameWithSurname = settings_start_name_with_surname.isChecked } } @@ -172,7 +191,8 @@ class SettingsActivity : SimpleActivity() { val items = arrayListOf( RadioItem(ON_CLICK_CALL_CONTACT, getString(R.string.call_contact)), RadioItem(ON_CLICK_VIEW_CONTACT, getString(R.string.view_contact)), - RadioItem(ON_CLICK_EDIT_CONTACT, getString(R.string.edit_contact))) + RadioItem(ON_CLICK_EDIT_CONTACT, getString(R.string.edit_contact)) + ) RadioGroupDialog(this@SettingsActivity, items, config.onContactClick) { config.onContactClick = it as Int @@ -181,11 +201,13 @@ class SettingsActivity : SimpleActivity() { } } - private fun getOnContactClickText() = getString(when (config.onContactClick) { - ON_CLICK_CALL_CONTACT -> R.string.call_contact - ON_CLICK_VIEW_CONTACT -> R.string.view_contact - else -> R.string.edit_contact - }) + private fun getOnContactClickText() = getString( + when (config.onContactClick) { + ON_CLICK_CALL_CONTACT -> R.string.call_contact + ON_CLICK_VIEW_CONTACT -> R.string.view_contact + else -> R.string.edit_contact + } + ) private fun setupShowCallConfirmation() { settings_show_call_confirmation.isChecked = config.showCallConfirmation diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index a75ed952..5ff9a0de 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,6 +1,6 @@ @@ -11,348 +11,317 @@ android:layout_height="wrap_content" android:orientation="vertical"> - + android:text="@string/color_customization" /> - - - - - + android:layout_margin="@dimen/medium_margin" + android:background="@drawable/section_holder_stroke" + android:orientation="vertical"> - + android:background="@drawable/ripple_all_corners"> - + - + + + + android:text="@string/general_settings" /> - - - - - + android:layout_margin="@dimen/medium_margin" + android:background="@drawable/section_holder_stroke" + android:orientation="vertical"> - + android:background="@drawable/ripple_top_corners"> - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:text="@string/main_screen" /> - - - - - - - + android:layout_margin="@dimen/medium_margin" + android:background="@drawable/section_holder_stroke" + android:orientation="vertical"> - + android:background="@drawable/ripple_top_corners"> - + + + + + android:background="@drawable/ripple_background"> - + + - + + + + + + + + + + + + + + + + + + + + + + + + android:text="@string/list_view" /> - - - - - - - + android:layout_margin="@dimen/medium_margin" + android:background="@drawable/section_holder_stroke" + android:orientation="vertical"> - + android:background="@drawable/ripple_top_corners"> - + - + - + android:background="@drawable/ripple_background"> - + - + - + android:background="@drawable/ripple_bottom_corners"> - + - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml index ac7e1b82..077b741a 100644 --- a/app/src/main/res/menu/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -1,41 +1,43 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + app:showAsAction="collapseActionView|always" /> + app:showAsAction="always" /> + app:showAsAction="always" /> + app:showAsAction="ifRoom" /> + app:showAsAction="never" /> + app:showAsAction="never" /> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> From 06e55b62187cd67b4a046f11b332b637f745459b Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 19:43:03 +0100 Subject: [PATCH 13/14] use our own icons for messaging apps, we cannot scan the system anymore --- .../contacts/pro/extensions/Context.kt | 39 +++++++++---------- .../main/res/drawable/ic_signal_vector.xml | 4 ++ .../main/res/drawable/ic_telegram_vector.xml | 4 ++ .../main/res/drawable/ic_threema_vector.xml | 5 +++ app/src/main/res/drawable/ic_viber_vector.xml | 9 +++++ .../main/res/drawable/ic_whatsapp_vector.xml | 5 +++ .../main/res/layout/item_choose_social.xml | 9 +++-- .../res/layout/item_view_contact_source.xml | 8 ++-- app/src/main/res/values/styles.xml | 5 +++ 9 files changed, 61 insertions(+), 27 deletions(-) create mode 100644 app/src/main/res/drawable/ic_signal_vector.xml create mode 100644 app/src/main/res/drawable/ic_telegram_vector.xml create mode 100644 app/src/main/res/drawable/ic_threema_vector.xml create mode 100644 app/src/main/res/drawable/ic_viber_vector.xml create mode 100644 app/src/main/res/drawable/ic_whatsapp_vector.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt index 05ca1913..d9294ff9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/extensions/Context.kt @@ -1,9 +1,10 @@ package com.simplemobiletools.contacts.pro.extensions +import android.annotation.SuppressLint import android.content.Context import android.content.Intent -import android.content.pm.LauncherApps import android.database.Cursor +import android.graphics.* import android.graphics.drawable.Drawable import android.net.Uri import android.os.Handler @@ -26,6 +27,7 @@ import com.simplemobiletools.contacts.pro.models.Organization import com.simplemobiletools.contacts.pro.models.SocialAction import java.io.File + val Context.config: Config get() = Config.newInstance(applicationContext) val Context.contactsDB: ContactsDao get() = ContactsDatabase.getInstance(applicationContext).ContactsDao() @@ -35,8 +37,10 @@ val Context.groupsDB: GroupsDao get() = ContactsDatabase.getInstance(application fun Context.getEmptyContact(): Contact { val originalContactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE val organization = Organization("", "") - return Contact(0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "", - null, "", ArrayList(), organization, ArrayList(), ArrayList(), DEFAULT_MIMETYPE, null) + return Contact( + 0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "", + null, "", ArrayList(), organization, ArrayList(), ArrayList(), DEFAULT_MIMETYPE, null + ) } fun Context.viewContact(contact: Contact) { @@ -355,22 +359,15 @@ fun Context.getSocialActions(id: Int): ArrayList { return socialActions } -fun Context.getPackageDrawable(packageName: String): Drawable? { - var drawable: Drawable? = null - try { - // try getting the properly colored launcher icons - val launcher = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps - val activityList = launcher.getActivityList(packageName, android.os.Process.myUserHandle())[0] - drawable = activityList.getBadgedIcon(0) - } catch (ignored: Exception) { - } - - if (drawable == null) { - try { - drawable = packageManager.getApplicationIcon(packageName) - } catch (ignored: Exception) { - } - } - - return drawable +@SuppressLint("UseCompatLoadingForDrawables") +fun Context.getPackageDrawable(packageName: String): Drawable { + return resources.getDrawable( + when (packageName) { + TELEGRAM_PACKAGE -> R.drawable.ic_telegram_vector + SIGNAL_PACKAGE -> R.drawable.ic_signal_vector + WHATSAPP_PACKAGE -> R.drawable.ic_whatsapp_vector + VIBER_PACKAGE -> R.drawable.ic_viber_vector + else -> R.drawable.ic_threema_vector + }, theme + ) } diff --git a/app/src/main/res/drawable/ic_signal_vector.xml b/app/src/main/res/drawable/ic_signal_vector.xml new file mode 100644 index 00000000..08658680 --- /dev/null +++ b/app/src/main/res/drawable/ic_signal_vector.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_telegram_vector.xml b/app/src/main/res/drawable/ic_telegram_vector.xml new file mode 100644 index 00000000..1262e68f --- /dev/null +++ b/app/src/main/res/drawable/ic_telegram_vector.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/drawable/ic_threema_vector.xml b/app/src/main/res/drawable/ic_threema_vector.xml new file mode 100644 index 00000000..4e806b25 --- /dev/null +++ b/app/src/main/res/drawable/ic_threema_vector.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_viber_vector.xml b/app/src/main/res/drawable/ic_viber_vector.xml new file mode 100644 index 00000000..52baa287 --- /dev/null +++ b/app/src/main/res/drawable/ic_viber_vector.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_whatsapp_vector.xml b/app/src/main/res/drawable/ic_whatsapp_vector.xml new file mode 100644 index 00000000..55577cae --- /dev/null +++ b/app/src/main/res/drawable/ic_whatsapp_vector.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/item_choose_social.xml b/app/src/main/res/layout/item_choose_social.xml index 36799a59..58fbf402 100644 --- a/app/src/main/res/layout/item_choose_social.xml +++ b/app/src/main/res/layout/item_choose_social.xml @@ -1,5 +1,6 @@ - + android:padding="@dimen/small_margin" + android:scaleType="centerCrop" + app:shapeAppearanceOverlay="@style/roundedImageView" + tools:src="@drawable/ic_whatsapp_vector" /> - + android:scaleType="centerCrop" + app:shapeAppearanceOverlay="@style/roundedImageView" + tools:src="@drawable/ic_whatsapp_vector" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9c3b80f3..7c4d1a23 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -2,4 +2,9 @@ + From 5036876fabe3170e2374e72ae219c976780aeaa8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Nov 2021 20:22:53 +0100 Subject: [PATCH 14/14] add content descriptions to dynamically created tabs --- .../contacts/pro/activities/MainActivity.kt | 1 + .../contacts/pro/activities/SimpleActivity.kt | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt index 416ed2de..1c0a69eb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt @@ -386,6 +386,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { skippedTabs++ } else { val tab = main_tabs_holder.newTab().setIcon(getTabIcon(index)) + tab.contentDescription = getTabContentDescription(index) main_tabs_holder.addTab(tab, index - skippedTabs, getDefaultTab() == index - skippedTabs) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SimpleActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SimpleActivity.kt index a01111e3..7d48248f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SimpleActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SimpleActivity.kt @@ -72,4 +72,14 @@ open class SimpleActivity : BaseSimpleActivity() { return resources.getColoredDrawableWithColor(drawableId, config.textColor) } + + protected fun getTabContentDescription(position: Int): String { + val stringId = when (position) { + LOCATION_CONTACTS_TAB -> R.string.contacts_tab + LOCATION_FAVORITES_TAB -> R.string.favorites_tab + else -> R.string.groups_tab + } + + return resources.getString(stringId) + } }