From 38c77c815409b814c56288ea4930fa06a3373b56 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 10 May 2020 21:44:32 +0200 Subject: [PATCH] implementing Speed Dialing --- app/src/main/AndroidManifest.xml | 7 +- .../activities/ManageSpeedDialActivity.kt | 67 ++++++++++++++++ .../dialer/activities/SettingsActivity.kt | 9 +++ .../dialer/adapters/SpeedDialAdapter.kt | 80 +++++++++++++++++++ .../dialer/dialogs/SelectContactDialog.kt | 27 +++++++ .../interfaces/RemoveSpeedDialListener.kt | 5 ++ .../res/layout/activity_manage_speed_dial.xml | 33 ++++++++ app/src/main/res/layout/activity_settings.xml | 23 +++++- app/src/main/res/layout/item_speed_dial.xml | 14 ++++ .../main/res/layout/layout_select_contact.xml | 16 ++++ app/src/main/res/values-pt/strings.xml | 5 ++ app/src/main/res/values/strings.xml | 5 ++ 12 files changed, 289 insertions(+), 2 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/activities/ManageSpeedDialActivity.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/interfaces/RemoveSpeedDialListener.kt create mode 100644 app/src/main/res/layout/activity_manage_speed_dial.xml create mode 100644 app/src/main/res/layout/item_speed_dial.xml create mode 100644 app/src/main/res/layout/layout_select_contact.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ac2fe7ac..d8a83138 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -56,7 +56,12 @@ + android:parentActivityName=".activities.SettingsActivity" /> + + () + private var speedDialValues = ArrayList() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_manage_speed_dial) + + speedDialValues = config.getSpeedDialValues() + updateAdapter() + SimpleContactsHelper(this).getAvailableContacts { contacts -> + allContacts = contacts + } + + updateTextColors(manage_speed_dial_scrollview) + } + + override fun onStop() { + super.onStop() + config.speedDial = Gson().toJson(speedDialValues) + } + + private fun updateAdapter() { + SpeedDialAdapter(this, speedDialValues, this, speed_dial_list) { + val clickedContact = it as SpeedDial + if (allContacts.isEmpty()) { + return@SpeedDialAdapter + } + + SelectContactDialog(this, allContacts) { selectedContact -> + speedDialValues.first { it.id == clickedContact.id }.apply { + displayName = selectedContact.name + number = selectedContact.phoneNumber + } + updateAdapter() + } + }.apply { + speed_dial_list.adapter = this + } + } + + override fun removeSpeedDial(ids: ArrayList) { + ids.forEach { + val dialId = it + speedDialValues.first { it.id == dialId }.apply { + displayName = "" + number = "" + } + } + updateAdapter() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt index 9c76eda0..959dbf9f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/SettingsActivity.kt @@ -27,6 +27,7 @@ class SettingsActivity : SimpleActivity() { setupCustomizeColors() setupUseEnglish() setupManageBlockedNumbers() + setupManageSpeedDial() setupChangeDateTimeFormat() updateTextColors(settings_holder) invalidateOptionsMenu() @@ -64,6 +65,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupManageSpeedDial() { + settings_manage_speed_dial_holder.setOnClickListener { + Intent(this, ManageSpeedDialActivity::class.java).apply { + startActivity(this) + } + } + } + private fun setupChangeDateTimeFormat() { settings_change_date_time_format_holder.setOnClickListener { ChangeDateTimeFormatDialog(this) {} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt new file mode 100644 index 00000000..f19f84bd --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/SpeedDialAdapter.kt @@ -0,0 +1,80 @@ +package com.simplemobiletools.dialer.adapters + +import android.view.Menu +import android.view.View +import android.view.ViewGroup +import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.views.MyRecyclerView +import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.SimpleActivity +import com.simplemobiletools.dialer.interfaces.RemoveSpeedDialListener +import com.simplemobiletools.dialer.models.SpeedDial +import kotlinx.android.synthetic.main.item_speed_dial.view.* +import java.util.* + +class SpeedDialAdapter(activity: SimpleActivity, var speedDialValues: ArrayList, private val removeListener: RemoveSpeedDialListener, + recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) { + + init { + setupDragListener(true) + } + + override fun getActionMenuId() = R.menu.cab_delete_only + + override fun prepareActionMode(menu: Menu) {} + + override fun actionItemPressed(id: Int) { + if (selectedKeys.isEmpty()) { + return + } + + when (id) { + R.id.cab_delete -> deleteSpeedDial() + } + } + + override fun getSelectableItemCount() = speedDialValues.size + + override fun getIsItemSelectable(position: Int) = speedDialValues[position].isValid() + + override fun getItemSelectionKey(position: Int) = speedDialValues.getOrNull(position)?.hashCode() + + override fun getItemKeyPosition(key: Int) = speedDialValues.indexOfFirst { it.hashCode() == key } + + override fun onActionModeCreated() {} + + override fun onActionModeDestroyed() {} + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_speed_dial, parent) + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val speedDial = speedDialValues[position] + holder.bindView(speedDial, true, true) { itemView, layoutPosition -> + setupView(itemView, speedDial) + } + bindViewHolder(holder) + } + + override fun getItemCount() = speedDialValues.size + + private fun getSelectedItems() = speedDialValues.filter { selectedKeys.contains(it.hashCode()) } as ArrayList + + private fun deleteSpeedDial() { + val ids = getSelectedItems().map { it.id }.toMutableList() as ArrayList + removeListener.removeSpeedDial(ids) + finishActMode() + } + + private fun setupView(view: View, speedDial: SpeedDial) { + view.apply { + var displayName = "${speedDial.id}. " + displayName += if (speedDial.isValid()) speedDial.displayName else "" + + speed_dial_label.apply { + text = displayName + isSelected = selectedKeys.contains(speedDial.hashCode()) + setTextColor(textColor) + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt new file mode 100644 index 00000000..2a5bb1bc --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/dialogs/SelectContactDialog.kt @@ -0,0 +1,27 @@ +package com.simplemobiletools.dialer.dialogs + +import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.commons.models.SimpleContact +import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.SimpleActivity +import com.simplemobiletools.dialer.adapters.ContactsAdapter +import kotlinx.android.synthetic.main.layout_select_contact.view.* + +class SelectContactDialog(val activity: SimpleActivity, allContacts: ArrayList, val callback: (selectedContact: SimpleContact) -> Unit) { + private var dialog: AlertDialog? = null + private var view = activity.layoutInflater.inflate(R.layout.layout_select_contact, null) + + init { + view.select_contact_list.adapter = ContactsAdapter(activity, allContacts, view.select_contact_list) { + callback(it as SimpleContact) + dialog?.dismiss() + } + + dialog = AlertDialog.Builder(activity) + .setNegativeButton(R.string.cancel, null) + .create().apply { + activity.setupDialogStuff(view, this) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/interfaces/RemoveSpeedDialListener.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/interfaces/RemoveSpeedDialListener.kt new file mode 100644 index 00000000..46b3d080 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/interfaces/RemoveSpeedDialListener.kt @@ -0,0 +1,5 @@ +package com.simplemobiletools.dialer.interfaces + +interface RemoveSpeedDialListener { + fun removeSpeedDial(ids: ArrayList) +} diff --git a/app/src/main/res/layout/activity_manage_speed_dial.xml b/app/src/main/res/layout/activity_manage_speed_dial.xml new file mode 100644 index 00000000..2c609f16 --- /dev/null +++ b/app/src/main/res/layout/activity_manage_speed_dial.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index adc3c166..fe0a018c 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -72,7 +72,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" /> @@ -96,5 +96,26 @@ android:text="@string/change_date_and_time_format" /> + + + + + + diff --git a/app/src/main/res/layout/item_speed_dial.xml b/app/src/main/res/layout/item_speed_dial.xml new file mode 100644 index 00000000..7a947e1b --- /dev/null +++ b/app/src/main/res/layout/item_speed_dial.xml @@ -0,0 +1,14 @@ + + diff --git a/app/src/main/res/layout/layout_select_contact.xml b/app/src/main/res/layout/layout_select_contact.xml new file mode 100644 index 00000000..55b855cf --- /dev/null +++ b/app/src/main/res/layout/layout_select_contact.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 90eb3a67..dec8e551 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -27,6 +27,11 @@ Selecione um SIM para esta chamada Utilizar sempre este SIM para ligar a este número + + Ligação rápida + Gerir ligações rápidas + Clique no número para atribuir um contacto a uma ligação rápida. Posteriormente, poderá ligar diretamente ao contacto através da tecla de ligação rápida. + Simple Dialer - Manage your phone calls easily diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c3e35cf..b92aa177 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -27,6 +27,11 @@ Select a SIM for this call Always use this SIM for this number + + Speed dial + Manage speed dial + Click on a number to assign a contact to it. You can then quickly call the given contact by long pressing the given number at the dialer. + Simple Dialer - Manage your phone calls easily