From e8b83801f439b38956c217c0bca8e7f05e4ac1ab Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 18 May 2020 20:19:57 +0200 Subject: [PATCH] allow sharing private contacts with Simple Dialer and SMS Messenger --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 5 ++ .../contacts/pro/activities/MainActivity.kt | 1 - .../pro/activities/SettingsActivity.kt | 9 +++ .../MyContactsContentProvider.kt | 47 +++++++++++++++ .../contacts/pro/helpers/Config.kt | 4 ++ .../contacts/pro/helpers/Constants.kt | 1 + .../pro/helpers/LocalContactsHelper.kt | 12 +++- app/src/main/res/layout/activity_settings.xml | 60 +++++++++++++------ 9 files changed, 119 insertions(+), 22 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/contacts/pro/contentproviders/MyContactsContentProvider.kt diff --git a/app/build.gradle b/app/build.gradle index 6eb98b50..a6030711 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.28.2' + implementation 'com.simplemobiletools:commons:5.28.10' implementation 'joda-time:joda-time:2.10.1' implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5' implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9d3a040a..5e6d20a1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -299,6 +299,11 @@ android:resource="@xml/provider_paths"/> + + ?, selection: String?, selectionArgs: Array?, sortOrder: String?): Cursor? { + if (context == null || !context!!.config.showPrivateContacts) { + return null + } else { + val matrixCursor = MatrixCursor(arrayOf( + MyContactsContentProvider.COL_RAW_ID, + MyContactsContentProvider.COL_CONTACT_ID, + MyContactsContentProvider.COL_NAME, + MyContactsContentProvider.COL_PHOTO_URI, + MyContactsContentProvider.COL_PHONE_NUMBER) + ) + + LocalContactsHelper(context!!).getPrivateSimpleContactsSync().forEach { + matrixCursor.newRow() + .add(MyContactsContentProvider.COL_RAW_ID, it.rawId) + .add(MyContactsContentProvider.COL_CONTACT_ID, it.contactId) + .add(MyContactsContentProvider.COL_NAME, it.name) + .add(MyContactsContentProvider.COL_PHOTO_URI, it.photoUri) + .add(MyContactsContentProvider.COL_PHONE_NUMBER, it.phoneNumber) + } + + return matrixCursor + } + } + + override fun onCreate() = true + + override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array?) = 1 + + override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int = 0 + + override fun getType(uri: Uri) = "" +} diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt index b931a9ee..097447b3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt @@ -73,6 +73,10 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getString(SPEED_DIAL, "")!! set(speedDial) = prefs.edit().putString(SPEED_DIAL, speedDial).apply() + var showPrivateContacts: Boolean + get() = prefs.getBoolean(SHOW_PRIVATE_CONTACTS, true) + set(showPrivateContacts) = prefs.edit().putBoolean(SHOW_PRIVATE_CONTACTS, showPrivateContacts).apply() + fun saveCustomSIM(number: String, SIMlabel: String) { prefs.edit().putString(REMEMBER_SIM_PREFIX + number, Uri.encode(SIMlabel)).apply() } 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 3fdf1044..b1ff52cc 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 @@ -21,6 +21,7 @@ const val SPEED_DIAL = "speed_dial" const val LAST_EXPORT_PATH = "last_export_path" const val WAS_LOCAL_ACCOUNT_INITIALIZED = "was_local_account_initialized" const val REMEMBER_SIM_PREFIX = "remember_sim_" +const val SHOW_PRIVATE_CONTACTS = "show_private_contacts" const val CONTACT_ID = "contact_id" const val SMT_PRIVATE = "smt_private" // used at the contact source of local contacts hidden from other apps diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt index d4bf5d95..977c82ce 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/LocalContactsHelper.kt @@ -6,6 +6,7 @@ import android.graphics.BitmapFactory import android.net.Uri import android.provider.MediaStore import com.simplemobiletools.commons.extensions.getChoppedList +import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.contacts.pro.extensions.contactsDB import com.simplemobiletools.contacts.pro.extensions.getByteArray import com.simplemobiletools.contacts.pro.extensions.getEmptyContact @@ -104,7 +105,6 @@ class LocalContactsHelper(val context: Context) { surname = localContact.surname suffix = localContact.suffix nickname = localContact.nickname - photoUri = "" phoneNumbers = localContact.phoneNumbers emails = localContact.emails addresses = localContact.addresses @@ -152,4 +152,14 @@ class LocalContactsHelper(val context: Context) { IMs = contact.IMs } } + + private fun convertContactToSimpleContact(contact: Contact?): SimpleContact? { + return if (contact == null || contact.phoneNumbers.isEmpty()) { + null + } else { + SimpleContact(contact.id, 0, contact.getNameToDisplay(), contact.photoUri, contact.phoneNumbers.first().value) + } + } + + fun getPrivateSimpleContactsSync() = getAllContacts().mapNotNull { convertContactToSimpleContact(it) } } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index fbfd5d15..86855c88 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,6 +1,5 @@ - + android:text="@string/customize_colors" /> @@ -52,7 +51,7 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/use_english_language" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> @@ -73,7 +72,7 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:text="@string/manage_shown_contact_fields"/> + android:text="@string/manage_shown_contact_fields" /> @@ -94,7 +93,7 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:text="@string/manage_shown_tabs"/> + android:text="@string/manage_shown_tabs" /> @@ -115,7 +114,7 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:text="@string/manage_blocked_numbers"/> + android:text="@string/manage_blocked_numbers" /> @@ -136,7 +135,7 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingStart="@dimen/medium_margin" - android:text="@string/manage_speed_dial"/> + android:text="@string/manage_speed_dial" /> @@ -159,7 +158,7 @@ android:layout_toStartOf="@+id/settings_font_size" android:paddingLeft="@dimen/medium_margin" android:paddingRight="@dimen/medium_margin" - android:text="@string/font_size"/> + android:text="@string/font_size" /> + android:clickable="false" /> @@ -191,7 +190,7 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/show_contact_thumbnails" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> @@ -214,7 +213,7 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/show_phone_numbers" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> @@ -237,7 +236,7 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/show_only_contacts_with_numbers" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> @@ -260,7 +259,7 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/start_name_with_surname" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> @@ -283,7 +282,7 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/show_call_confirmation_dialog" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> @@ -306,7 +305,7 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/show_dialpad_button" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> @@ -329,7 +328,30 @@ android:clickable="false" android:paddingStart="@dimen/medium_margin" android:text="@string/show_dialpad_letters" - app:switchPadding="@dimen/medium_margin"/> + app:switchPadding="@dimen/medium_margin" /> + + + + + + @@ -352,7 +374,7 @@ android:layout_toStartOf="@+id/settings_on_contact_click" android:paddingStart="@dimen/medium_margin" android:paddingEnd="@dimen/medium_margin" - android:text="@string/on_contact_click"/> + android:text="@string/on_contact_click" /> + android:clickable="false" />