diff --git a/app/build.gradle b/app/build.gradle index 0d04d991..a03cb525 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,6 +56,6 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.27.29' + implementation 'com.simplemobiletools:commons:5.28.1' implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a' } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt index 6532ebe9..2a3e9cfb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/DialpadActivity.kt @@ -75,7 +75,7 @@ class DialpadActivity : SimpleActivity() { dialpad_clear_char.setOnLongClickListener { clearInput(); true } dialpad_call_button.setOnClickListener { initCall() } dialpad_input.onTextChangeListener { dialpadValueChanged(it) } - SimpleContactsHelper(this).getAvailableContacts { gotContacts(it) } + SimpleContactsHelper(this).getAvailableContacts(false) { gotContacts(it) } disableKeyboardPopping() val callIcon = resources.getColoredDrawableWithColor(R.drawable.ic_phone_vector, if (isBlackAndWhiteTheme()) Color.BLACK else config.primaryColor.getContrastColor()) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt index 12b36c53..135d36e3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt @@ -5,7 +5,6 @@ import android.app.SearchManager import android.content.Context import android.content.Intent import android.content.pm.ShortcutInfo -import android.content.pm.ShortcutManager import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.Icon @@ -192,7 +191,7 @@ class MainActivity : SimpleActivity() { val launchDialpad = getLaunchDialpadShortcut(appIconColor) try { - getSystemService(ShortcutManager::class.java)!!.dynamicShortcuts = listOf(launchDialpad) + shortcutManager.dynamicShortcuts = listOf(launchDialpad) config.lastHandledShortcutColor = appIconColor } catch (ignored: Exception) { } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt index 5f9edc86..b26cc194 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt @@ -23,7 +23,7 @@ class ManageSpeedDialActivity : SimpleActivity(), RemoveSpeedDialListener { speedDialValues = config.getSpeedDialValues() updateAdapter() - SimpleContactsHelper(this).getAvailableContacts { contacts -> + SimpleContactsHelper(this).getAvailableContacts(false) { contacts -> allContacts = contacts } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt index 1ea51a35..a1d292a3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt @@ -3,9 +3,6 @@ package com.simplemobiletools.dialer.adapters import android.annotation.SuppressLint import android.content.Intent import android.content.pm.ShortcutInfo -import android.content.pm.ShortcutManager -import android.graphics.Bitmap -import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Icon import android.net.Uri import android.util.TypedValue @@ -16,16 +13,13 @@ import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView import com.bumptech.glide.Glide -import com.bumptech.glide.load.DecodeFormat -import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.bumptech.glide.request.RequestOptions import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.ConfirmationDialog -import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor -import com.simplemobiletools.commons.extensions.getTextSize -import com.simplemobiletools.commons.extensions.highlightTextFromNumbers -import com.simplemobiletools.commons.extensions.highlightTextPart -import com.simplemobiletools.commons.helpers.* +import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.PERMISSION_CALL_PHONE +import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS +import com.simplemobiletools.commons.helpers.SimpleContactsHelper +import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.dialer.R @@ -144,52 +138,24 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList - activity.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", contact.phoneNumber, null) + SimpleContactsHelper(activity).getShortcutImage(contact.photoUri, contact.name) { image -> + activity.runOnUiThread { + activity.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", contact.phoneNumber, null) + } + + val shortcut = ShortcutInfo.Builder(activity, contact.hashCode().toString()) + .setShortLabel(contact.name) + .setIcon(Icon.createWithBitmap(image)) + .setIntent(intent) + .build() + + manager.requestPinShortcut(shortcut, null) } - - val shortcut = ShortcutInfo.Builder(activity, contact.hashCode().toString()) - .setShortLabel(contact.name) - .setIcon(Icon.createWithBitmap(image)) - .setIntent(intent) - .build() - - manager.requestPinShortcut(shortcut, null) - } - } - } - } - - private fun getShortcutImage(path: String, placeholderName: String, callback: (image: Bitmap) -> Unit) { - ensureBackgroundThread { - val placeholder = BitmapDrawable(activity.resources, SimpleContactsHelper(activity).getContactLetterIcon(placeholderName)) - try { - val options = RequestOptions() - .format(DecodeFormat.PREFER_ARGB_8888) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .error(placeholder) - .centerCrop() - - val size = resources.getDimension(R.dimen.shortcut_size).toInt() - val bitmap = Glide.with(activity).asBitmap() - .load(path) - .placeholder(placeholder) - .apply(options) - .apply(RequestOptions.circleCropTransform()) - .into(size, size) - .get() - - activity.runOnUiThread { - callback(bitmap) - } - } catch (ignored: Exception) { - activity.runOnUiThread { - callback(placeholder.bitmap) } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt index 1e491b34..c39b5623 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt @@ -75,7 +75,7 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag } override fun refreshItems() { - SimpleContactsHelper(context).getAvailableContacts { contacts -> + SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> allContacts = contacts activity?.runOnUiThread { gotContacts(contacts) @@ -138,7 +138,7 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag fragment_placeholder.text = context.getString(R.string.no_contacts_found) fragment_placeholder_2.text = context.getString(R.string.create_new) - SimpleContactsHelper(context).getAvailableContacts { contacts -> + SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> activity?.runOnUiThread { gotContacts(contacts) }