From 71f3e8cb0ccf4b23b11622277c24d8a75218ce50 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 3 Aug 2018 16:36:17 +0200 Subject: [PATCH] list the last 100 calls at the Recent calls list --- .../contacts/activities/MainActivity.kt | 9 +-- .../contacts/adapters/RecentCallsAdapter.kt | 67 +++++++++++++++++++ .../contacts/fragments/MyViewPagerFragment.kt | 4 +- .../contacts/fragments/RecentsFragment.kt | 26 +++++++ .../contacts/helpers/ContactsHelper.kt | 4 +- .../contacts/models/RecentCall.kt | 2 +- app/src/main/res/layout/item_recent_call.xml | 31 +++++++++ 7 files changed, 134 insertions(+), 9 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt create mode 100644 app/src/main/res/layout/item_recent_call.xml 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 aaea9ac9..a3f57512 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -37,6 +37,7 @@ import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.fragment_contacts.* import kotlinx.android.synthetic.main.fragment_favorites.* import kotlinx.android.synthetic.main.fragment_groups.* +import kotlinx.android.synthetic.main.fragment_recents.* import java.io.FileOutputStream class MainActivity : SimpleActivity(), RefreshContactsListener { @@ -477,11 +478,11 @@ class MainActivity : SimpleActivity(), RefreshContactsListener { } groups_fragment?.refreshContacts(it) } - } - - if (refreshTabsMask and RECENTS_TAB_MASK != 0) { - ContactsHelper(this).getRecents { + if (refreshTabsMask and RECENTS_TAB_MASK != 0) { + ContactsHelper(this).getRecents { + recents_fragment?.updateRecentCalls(it) + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt new file mode 100644 index 00000000..e5e16914 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/RecentCallsAdapter.kt @@ -0,0 +1,67 @@ +package com.simplemobiletools.contacts.adapters + +import android.view.Menu +import android.view.View +import android.view.ViewGroup +import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.views.FastScroller +import com.simplemobiletools.commons.views.MyRecyclerView +import com.simplemobiletools.contacts.R +import com.simplemobiletools.contacts.activities.SimpleActivity +import com.simplemobiletools.contacts.models.RecentCall +import kotlinx.android.synthetic.main.item_recent_call.view.* +import java.util.* + +class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller, + itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { + + init { + setupDragListener(true) + } + + override fun getActionMenuId() = 0 + + override fun prepareActionMode(menu: Menu) {} + + override fun prepareItemSelection(viewHolder: ViewHolder) {} + + override fun markViewHolderSelection(select: Boolean, viewHolder: ViewHolder?) {} + + override fun actionItemPressed(id: Int) { + if (selectedPositions.isEmpty()) { + return + } + } + + override fun getSelectableItemCount() = recentCalls.size + + override fun getIsItemSelectable(position: Int) = true + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_recent_call, parent) + + override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) { + val recentCall = recentCalls[position] + val view = holder.bindView(recentCall, true, true) { itemView, layoutPosition -> + setupView(itemView, recentCall) + } + bindViewHolder(holder, position, view) + } + + override fun getItemCount() = recentCalls.size + + fun updateItems(newItems: ArrayList) { + recentCalls = newItems + notifyDataSetChanged() + finishActMode() + fastScroller?.measureRecyclerView() + } + + private fun setupView(view: View, recentCall: RecentCall) { + view.apply { + recent_call_name.apply { + text = recentCall.name ?: recentCall.number + setTextColor(textColor) + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt index 378e3640..9b37a550 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt @@ -129,7 +129,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) private fun setupContacts(contacts: ArrayList) { if (this is GroupsFragment) { setupGroupsAdapter(contacts) - } else { + } else if (this !is RecentsFragment) { setupContactsFavoritesAdapter(contacts) } } @@ -176,7 +176,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) } private fun setupContactsFavoritesAdapter(contacts: ArrayList) { - fragment_placeholder_2.beVisibleIf(contacts.isEmpty() && this !is RecentsFragment) + fragment_placeholder_2.beVisibleIf(contacts.isEmpty()) fragment_placeholder.beVisibleIf(contacts.isEmpty()) fragment_list.beVisibleIf(contacts.isNotEmpty()) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt index 791d4db0..f4cd5ae6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/RecentsFragment.kt @@ -2,6 +2,11 @@ package com.simplemobiletools.contacts.fragments import android.content.Context import android.util.AttributeSet +import com.simplemobiletools.commons.extensions.beVisibleIf +import com.simplemobiletools.commons.extensions.isActivityDestroyed +import com.simplemobiletools.contacts.adapters.RecentCallsAdapter +import com.simplemobiletools.contacts.models.RecentCall +import kotlinx.android.synthetic.main.fragment_layout.view.* class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) { override fun fabClicked() { @@ -11,4 +16,25 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage override fun placeholderClicked() { } + + fun updateRecentCalls(recentCalls: ArrayList) { + if (activity == null || activity!!.isActivityDestroyed()) { + return + } + + fragment_placeholder.beVisibleIf(recentCalls.isEmpty()) + fragment_list.beVisibleIf(recentCalls.isNotEmpty()) + + val currAdapter = fragment_list.adapter + if (currAdapter == null) { + RecentCallsAdapter(activity!!, recentCalls, fragment_list, fragment_fastscroller) { + + }.apply { + addVerticalDividers(true) + fragment_list.adapter = this + } + } else { + (currAdapter as RecentCallsAdapter).updateItems(recentCalls) + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt index 84b04848..dc99ee92 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -1331,7 +1331,7 @@ class ContactsHelper(val activity: Activity) { CallLog.Calls.TYPE ) - val sorting = "${CallLog.Calls._ID} DESC LIMIT 50" + val sorting = "${CallLog.Calls._ID} DESC LIMIT 100" var cursor: Cursor? = null try { @@ -1342,7 +1342,7 @@ class ContactsHelper(val activity: Activity) { val number = cursor.getStringValue(CallLog.Calls.NUMBER) val date = cursor.getLongValue(CallLog.Calls.DATE) val duration = cursor.getIntValue(CallLog.Calls.DURATION) - val name = cursor.getStringValue(CallLog.Calls.CACHED_NAME) ?: "" + val name = cursor.getStringValue(CallLog.Calls.CACHED_NAME) val type = cursor.getIntValue(CallLog.Calls.TYPE) val recentCall = RecentCall(id, number, date, duration, name, type) calls.add(recentCall) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/models/RecentCall.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/models/RecentCall.kt index f2bbfdf5..1c82e451 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/models/RecentCall.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/models/RecentCall.kt @@ -1,3 +1,3 @@ package com.simplemobiletools.contacts.models -data class RecentCall(var id: Int, var number: String, var date: Long, var duration: Int, var name: String, var type: Int) +data class RecentCall(var id: Int, var number: String, var date: Long, var duration: Int, var name: String?, var type: Int) diff --git a/app/src/main/res/layout/item_recent_call.xml b/app/src/main/res/layout/item_recent_call.xml new file mode 100644 index 00000000..a272d6a7 --- /dev/null +++ b/app/src/main/res/layout/item_recent_call.xml @@ -0,0 +1,31 @@ + + + + + + + + +