diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt index e1a923dbdc..2e83f19dbf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt @@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.database.MessageTypes import org.thoughtcrime.securesms.databinding.CallLogAdapterItemBinding import org.thoughtcrime.securesms.databinding.CallLogCreateCallLinkItemBinding import org.thoughtcrime.securesms.databinding.ConversationListItemClearFilterBinding +import org.thoughtcrime.securesms.databinding.ConversationListItemClearFilterEmptyBinding import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.DateUtils @@ -61,6 +62,13 @@ class CallLogAdapter( inflater = ConversationListItemClearFilterBinding::inflate ) ) + registerFactory( + ClearFilterEmptyModel::class.java, + BindingFactory( + creator = { ClearFilterEmptyViewHolder(it, callbacks::onClearFilterClicked) }, + inflater = ConversationListItemClearFilterEmptyBinding::inflate + ) + ) registerFactory( CreateCallLinkModel::class.java, BindingFactory( @@ -68,7 +76,6 @@ class CallLogAdapter( inflater = CallLogCreateCallLinkItemBinding::inflate ) ) - registerFactory( CallLinkModel::class.java, BindingFactory( @@ -95,6 +102,7 @@ class CallLogAdapter( is CallLogRow.Call -> CallModel(it, selectionState, itemCount, it.peer.id == localCallRecipientId) is CallLogRow.CallLink -> CallLinkModel(it, selectionState, itemCount, it.recipient.id == localCallRecipientId) is CallLogRow.ClearFilter -> ClearFilterModel() + is CallLogRow.ClearFilterEmpty -> ClearFilterEmptyModel() is CallLogRow.CreateCallLink -> CreateCallLinkModel() } } @@ -178,6 +186,11 @@ class CallLogAdapter( override fun areContentsTheSame(newItem: ClearFilterModel): Boolean = true } + private class ClearFilterEmptyModel : MappingModel { + override fun areItemsTheSame(newItem: ClearFilterEmptyModel): Boolean = true + override fun areContentsTheSame(newItem: ClearFilterEmptyModel): Boolean = true + } + private class CreateCallLinkModel : MappingModel { override fun areItemsTheSame(newItem: CreateCallLinkModel): Boolean = true @@ -463,6 +476,19 @@ class CallLogAdapter( override fun bind(model: ClearFilterModel) = Unit } + private class ClearFilterEmptyViewHolder( + binding: ConversationListItemClearFilterEmptyBinding, + onClearFilterClicked: () -> Unit + ) : BindingViewHolder(binding) { + + init { + binding.clearFilter.setOnClickListener { onClearFilterClicked() } + binding.clearFilterTitle.setText(R.string.CallLogAdapter__no_missed_calls) + } + + override fun bind(model: ClearFilterEmptyModel) = Unit + } + private class CreateCallLinkViewHolder( binding: CallLogCreateCallLinkItemBinding, onClick: () -> Unit diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogPagedDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogPagedDataSource.kt index 07ac84802c..d7edcc5a22 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogPagedDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogPagedDataSource.kt @@ -82,7 +82,11 @@ class CallLogPagedDataSource( stopwatch.split("calls") if (hasFilter && start <= clearFilterStart && remaining > 0) { - callLogRows.add(CallLogRow.ClearFilter) + if (callLogRows.isNotEmpty()) { + callLogRows.add(CallLogRow.ClearFilter) + } else { + callLogRows.add(CallLogRow.ClearFilterEmpty) + } } repository.onCallTabPageLoaded(callLogRows) diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRow.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRow.kt index e57acbeac4..82268f5d9d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRow.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRow.kt @@ -52,6 +52,10 @@ sealed class CallLogRow { override val id: Id = Id.ClearFilter } + data object ClearFilterEmpty : CallLogRow() { + override val id: Id = Id.ClearFilterEmpty + } + data object CreateCallLink : CallLogRow() { override val id: Id = Id.CreateCallLink } @@ -60,6 +64,7 @@ sealed class CallLogRow { data class Call(val children: Set) : Id() data class CallLink(val roomId: CallLinkRoomId) : Id() data object ClearFilter : Id() + data object ClearFilterEmpty : Id() data object CreateCallLink : Id() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java index c4647fa59b..48bc6529bc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListAdapter.java @@ -129,6 +129,8 @@ class ConversationListAdapter extends ListAdapter diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fa71092484..b15b5e651e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7405,6 +7405,8 @@ Start a video call Start a voice call + + No missed calls