diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/RecentsAdapter.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/RecentsAdapter.kt index 3ad39f889..9072a0741 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/RecentsAdapter.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/adapter/RecentsAdapter.kt @@ -23,10 +23,19 @@ class RecentsAdapter @Inject constructor( private val preferences: PreferencesInteractor ) : ListAdapter(animations) { + private var _showHistory: Boolean = false + + var showHistory: Boolean + get() = _showHistory + set(value) { + _showHistory = value + } + override fun onBindListItem(listItem: ListItem, item: RecentAccount) { listItem.apply { isCompact = preferences.isCompact - captionText = if (item.date != null) context.getHoursString(item.date) else null + val date = if (item.date != null) context.getHoursString(item.date) else "" + captionText = if (item.callCount > 1) "(${item.callCount}) $date" else date phones.lookupAccount(item.number) { titleText = it?.name ?: item.number it?.let { @@ -42,5 +51,6 @@ class RecentsAdapter @Inject constructor( } } - override fun convertDataToListData(data: List) = ListData.fromRecents(data) + override fun convertDataToListData(data: List) = + ListData.fromRecents(data, !showHistory) } \ No newline at end of file diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/ListData.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/ListData.kt index ee875d9ea..497269a7d 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/ListData.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/ListData.kt @@ -24,10 +24,45 @@ data class ListData( return ListData(contacts, headersToCounts) } - fun fromRecents(recents: List) = ListData( - recents, - recents.groupingBy { getRelativeDateString(it.date) }.eachCount() - ) + fun fromRecents(recents: List, isGrouped: Boolean) = + if (isGrouped && recents.size > 1) getGroupedRecents(recents) + else ListData( + recents, + recents.groupingBy { getRelativeDateString(it.date) }.eachCount() + ) + + private fun getGroupedRecents(recents: List): ListData { + var prevItem: RecentAccount = recents[0] + var prevDate = getRelativeDateString(prevItem.date) + var count = 1 + val groupedRecents: MutableList = ArrayList() + recents.drop(1).forEach { + val date = getRelativeDateString(it.date) + if (prevItem.number == it.number && prevDate == date) { + count++ + } else { + groupedRecents.add( + RecentAccount( + prevItem.number, prevItem.type, prevItem.id, + prevItem.duration, prevItem.date, prevItem.cachedName, count + ) + ) + count = 1 + prevItem = it + } + prevDate = date + } + groupedRecents.add( + RecentAccount( + prevItem.number, prevItem.type, prevItem.id, + prevItem.duration, prevItem.date, prevItem.cachedName, count + ) + ) + return ListData( + groupedRecents, + groupedRecents.groupingBy { getRelativeDateString(it.date) }.eachCount() + ) + } fun fromPhones(phones: List): ListData { val phones = phones.toList().distinctBy { it.normalizedNumber } diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/RecentAccount.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/RecentAccount.kt index 7d780a926..e0534ed61 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/RecentAccount.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/model/RecentAccount.kt @@ -13,6 +13,7 @@ data class RecentAccount( val duration: Long = 0, val date: Date? = null, val cachedName: String? = null, + val callCount: Int = 1, ) : Serializable { @kotlin.annotation.Retention(AnnotationRetention.SOURCE) diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recents/RecentsHistoryFragment.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recents/RecentsHistoryFragment.kt index b4c6e9d46..c5e17477c 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recents/RecentsHistoryFragment.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/recents/RecentsHistoryFragment.kt @@ -2,12 +2,23 @@ package com.chooloo.www.chooloolib.ui.recents import android.os.Bundle import androidx.fragment.app.activityViewModels +import com.chooloo.www.chooloolib.adapter.RecentsAdapter import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject @AndroidEntryPoint class RecentsHistoryFragment : RecentsFragment() { override val viewState: RecentsHistoryViewState by activityViewModels() + @Inject + override lateinit var adapter: RecentsAdapter + + override fun onSetup() { + super.onSetup() + + adapter.showHistory = true + } + companion object { fun newInstance(filter: String? = null) = RecentsHistoryFragment().apply { arguments = Bundle().apply { diff --git a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/widgets/listitem/ListItem.kt b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/widgets/listitem/ListItem.kt index 75a5cc49c..f5f097340 100644 --- a/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/widgets/listitem/ListItem.kt +++ b/chooloolib/src/main/java/com/chooloo/www/chooloolib/ui/widgets/listitem/ListItem.kt @@ -297,13 +297,13 @@ open class ListItem : LinearLayout { caption.id.also { connect(it, TOP, title.id, BOTTOM) - connect(it, START, title.id, START) + connect(it, START, captionImage.id, END) connect(it, BOTTOM, PARENT_ID, BOTTOM) } captionImage.id.also { connect(it, TOP, caption.id, TOP) - connect(it, START, caption.id, END) + connect(it, START, title.id, START) connect(it, BOTTOM, caption.id, BOTTOM) }