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 c293b676..1ea51a35 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/ContactsAdapter.kt @@ -1,5 +1,13 @@ 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 import android.view.Menu import android.view.View @@ -8,14 +16,16 @@ 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.PERMISSION_WRITE_CONTACTS -import com.simplemobiletools.commons.helpers.SimpleContactsHelper +import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.dialer.R @@ -33,9 +43,13 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList askConfirmDelete() + R.id.cab_create_shortcut -> createShortcut() } } @@ -126,6 +141,60 @@ class ContactsAdapter(activity: SimpleActivity, var contacts: ArrayList + @SuppressLint("NewApi") + private fun createShortcut() { + val contact = contacts.firstOrNull { selectedKeys.contains(it.rawId) } ?: return + val manager = activity.getSystemService(ShortcutManager::class.java)!! + if (manager.isRequestPinShortcutSupported) { + getShortcutImage(contact.photoUri, contact.name) { image -> + 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) + } + } + } + } + + 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) + } + } + } + } + override fun onViewRecycled(holder: ViewHolder) { super.onViewRecycled(holder) if (!activity.isDestroyed && !activity.isFinishing) { diff --git a/app/src/main/res/drawable/shortcut_image.xml b/app/src/main/res/drawable/shortcut_image.xml new file mode 100644 index 00000000..526eab5c --- /dev/null +++ b/app/src/main/res/drawable/shortcut_image.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/menu/cab_contacts.xml b/app/src/main/res/menu/cab_contacts.xml new file mode 100644 index 00000000..6617a186 --- /dev/null +++ b/app/src/main/res/menu/cab_contacts.xml @@ -0,0 +1,13 @@ + + + + +