From 8678a7d1098d19f150d89d0dbd3922d856859cdf Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 10 Dec 2017 15:53:03 +0100 Subject: [PATCH] adding a ContactsAdapter --- app/build.gradle | 2 +- .../contacts/activities/MainActivity.kt | 46 ++++++++- .../contacts/activities/SettingsActivity.kt | 9 ++ .../contacts/adapters/ContactsAdapter.kt | 94 +++++++++++++++++++ .../contacts/helpers/Config.kt | 4 + .../contacts/helpers/Constants.kt | 2 + .../contacts/models/Contact.kt | 27 +++++- app/src/main/res/layout/activity_main.xml | 42 ++++++++- app/src/main/res/layout/activity_settings.xml | 20 ++++ app/src/main/res/menu/cab.xml | 14 +++ 10 files changed, 253 insertions(+), 7 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt create mode 100644 app/src/main/res/menu/cab.xml diff --git a/app/build.gradle b/app/build.gradle index 06bfed73..4abdf8ec 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,5 +32,5 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:3.2.5' + implementation 'com.simplemobiletools:commons:3.2.6' } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index efed2b46..eb0b1d84 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -10,18 +10,23 @@ import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.helpers.LICENSE_KOTLIN import com.simplemobiletools.commons.helpers.LICENSE_MULTISELECT import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS +import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener import com.simplemobiletools.contacts.BuildConfig import com.simplemobiletools.contacts.R +import com.simplemobiletools.contacts.adapters.ContactsAdapter import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.helpers.ContactsHelper +import com.simplemobiletools.contacts.models.Contact +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : SimpleActivity() { +class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { private var storedUseEnglish = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) appLaunched() + contacts_fab.setOnClickListener { addNewContact() } handlePermission(PERMISSION_WRITE_CONTACTS) { if (it) { @@ -70,7 +75,44 @@ class MainActivity : SimpleActivity() { private fun initContacts() { ContactsHelper(this).getContacts { - + Contact.sorting = config.sorting + it.sort() + runOnUiThread { + setupContacts(it) + } } } + + private fun setupContacts(contacts: ArrayList) { + val currAdapter = contacts_list.adapter + if (currAdapter == null) { + ContactsAdapter(this, contacts, this, contacts_list) { + itemClicked(it as Contact) + }.apply { + setupDragListener(true) + addVerticalDividers(true) + contacts_list.adapter = this + } + + contacts_fastscroller.allowBubbleDisplay = config.showInfoBubble + contacts_fastscroller.setViews(contacts_list) { + val item = contacts.getOrNull(it) + contacts_fastscroller.updateBubbleText(item?.getBubbleText() ?: "") + } + } else { + (currAdapter as ContactsAdapter).updateItems(contacts) + } + } + + private fun itemClicked(contact: Contact) { + + } + + private fun addNewContact() { + + } + + override fun refreshItems() { + + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SettingsActivity.kt index eebb0b28..dc945d7a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SettingsActivity.kt @@ -20,6 +20,7 @@ class SettingsActivity : SimpleActivity() { setupCustomizeColors() setupUseEnglish() + setupShowInfoBubble() updateTextColors(settings_holder) } @@ -38,4 +39,12 @@ class SettingsActivity : SimpleActivity() { useEnglishToggled() } } + + private fun setupShowInfoBubble() { + settings_show_info_bubble.isChecked = config.showInfoBubble + settings_show_info_bubble_holder.setOnClickListener { + settings_show_info_bubble.toggle() + config.showInfoBubble = settings_show_info_bubble.isChecked + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt new file mode 100644 index 00000000..bcdd3f94 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/ContactsAdapter.kt @@ -0,0 +1,94 @@ +package com.simplemobiletools.contacts.adapters + +import android.graphics.drawable.Drawable +import android.view.Menu +import android.view.View +import android.view.ViewGroup +import com.bumptech.glide.Glide +import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.dialogs.ConfirmationDialog +import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor +import com.simplemobiletools.commons.extensions.isActivityDestroyed +import com.simplemobiletools.commons.interfaces.RefreshRecyclerViewListener +import com.simplemobiletools.commons.views.MyRecyclerView +import com.simplemobiletools.contacts.R +import com.simplemobiletools.contacts.activities.SimpleActivity +import com.simplemobiletools.contacts.models.Contact +import kotlinx.android.synthetic.main.item_contact.view.* + +class ContactsAdapter(activity: SimpleActivity, var contactItems: MutableList, val listener: RefreshRecyclerViewListener?, + recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) { + + lateinit private var contactDrawable: Drawable + + init { + initDrawables() + } + + override fun getActionMenuId() = R.menu.cab + + override fun prepareActionMode(menu: Menu) {} + + override fun prepareItemSelection(view: View) {} + + override fun markItemSelection(select: Boolean, view: View?) { + view?.contact_frame?.isSelected = select + } + + override fun actionItemPressed(id: Int) { + when (id) { + R.id.cab_select_all -> selectAll() + R.id.cab_delete -> askConfirmDelete() + } + } + + override fun getSelectableItemCount() = contactItems.size + + override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = createViewHolder(R.layout.item_contact, parent) + + override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) { + val contact = contactItems[position] + val view = holder.bindView(contact, true) { itemView, layoutPosition -> + setupView(itemView, contact) + } + bindViewHolder(holder, position, view) + } + + override fun getItemCount() = contactItems.size + + fun initDrawables() { + contactDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.ic_person, textColor) + } + + fun updateItems(newItems: MutableList) { + contactItems = newItems + notifyDataSetChanged() + finishActMode() + } + + private fun askConfirmDelete() { + ConfirmationDialog(activity) { + deleteContacts() + } + } + + private fun deleteContacts() { + + } + + override fun onViewRecycled(holder: ViewHolder?) { + super.onViewRecycled(holder) + if (!activity.isActivityDestroyed()) { + Glide.with(activity).clear(holder?.itemView?.contact_tmb) + } + } + + private fun setupView(view: View, contact: Contact) { + view.apply { + contact_name.text = contact.name + contact_name.setTextColor(textColor) + contact_number.text = contact.number + contact_number.setTextColor(textColor) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt index 613d45a9..b9fc2391 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt @@ -2,10 +2,14 @@ package com.simplemobiletools.contacts.helpers import android.content.Context import com.simplemobiletools.commons.helpers.BaseConfig +import com.simplemobiletools.commons.helpers.SORT_BY_NAME class Config(context: Context) : BaseConfig(context) { companion object { fun newInstance(context: Context) = Config(context) } + var sorting: Int + get() = prefs.getInt(SORTING, SORT_BY_NAME) + set(sorting) = prefs.edit().putInt(SORTING, sorting).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt index a2c4049e..3180eb76 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Constants.kt @@ -1 +1,3 @@ package com.simplemobiletools.contacts.helpers + +val SORTING = "sorting" diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt index b1162d38..e2de78c3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt @@ -1,3 +1,28 @@ package com.simplemobiletools.contacts.models -data class Contact(val id: Int, var name: String, var number: String, var photoUri: String) +import com.simplemobiletools.commons.helpers.SORT_BY_NUMBER +import com.simplemobiletools.commons.helpers.SORT_DESCENDING + +data class Contact(val id: Int, var name: String, var number: String, var photoUri: String) : Comparable { + companion object { + var sorting: Int = 0 + } + + override fun compareTo(other: Contact): Int { + var result = when { + (sorting and SORT_BY_NUMBER != 0) -> number.toLowerCase().compareTo(other.number.toLowerCase()) + else -> name.toLowerCase().compareTo(other.name.toLowerCase()) + } + + if (sorting and SORT_DESCENDING != 0) { + result *= -1 + } + + return result + } + + fun getBubbleText() = when { + sorting and SORT_BY_NUMBER != 0 -> number + else -> name + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index fe1e620a..73bc3e89 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,44 @@ - - + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 9b9b39c4..9417c1de 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -49,5 +49,25 @@ android:text="@string/use_english_language"/> + + + + + + diff --git a/app/src/main/res/menu/cab.xml b/app/src/main/res/menu/cab.xml new file mode 100644 index 00000000..37f8fda1 --- /dev/null +++ b/app/src/main/res/menu/cab.xml @@ -0,0 +1,14 @@ + + + + +