From a74ffcf2eb3dd7363a14148d9cfb64b2fb863bf2 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 13 Jun 2025 12:51:52 +0200 Subject: [PATCH] add extra space at bottom of conversations list by adding a SpacerItem (legacy code...-> migrate to Compose!) Signed-off-by: Marcel Hibbe --- .../talk/adapters/items/SpacerItem.kt | 41 +++++++++++++++++++ .../ConversationsListActivity.kt | 12 +++++- app/src/main/res/layout/item_spacer.xml | 10 +++++ 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/nextcloud/talk/adapters/items/SpacerItem.kt create mode 100644 app/src/main/res/layout/item_spacer.xml diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/SpacerItem.kt b/app/src/main/java/com/nextcloud/talk/adapters/items/SpacerItem.kt new file mode 100644 index 000000000..243f8278c --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/SpacerItem.kt @@ -0,0 +1,41 @@ +/* + * Nextcloud Talk - Android Client + * + * SPDX-FileCopyrightText: 2025 Marcel Hibbe + * SPDX-License-Identifier: GPL-3.0-or-later + */ +package com.nextcloud.talk.adapters.items + +import android.view.View +import com.nextcloud.talk.R +import eu.davidea.flexibleadapter.FlexibleAdapter +import eu.davidea.flexibleadapter.items.AbstractFlexibleItem +import eu.davidea.flexibleadapter.items.IFlexible +import eu.davidea.viewholders.FlexibleViewHolder + +class SpacerItem(private val height: Int) : AbstractFlexibleItem() { + + override fun getLayoutRes(): Int = R.layout.item_spacer + + override fun createViewHolder(view: View?, adapter: FlexibleAdapter?>?): ViewHolder { + return ViewHolder(view!!, adapter!!) + } + + override fun bindViewHolder( + adapter: FlexibleAdapter?>?, + holder: ViewHolder, + position: Int, + payloads: MutableList? + ) { + holder.itemView.layoutParams.height = height + } + + override fun equals(other: Any?) = other is SpacerItem + + override fun hashCode(): Int { + return 0 + } + + class ViewHolder(view: View, adapter: FlexibleAdapter<*>) : + FlexibleViewHolder(view, adapter) +} diff --git a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt index f1a364c26..0a6bddf43 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt @@ -79,6 +79,7 @@ import com.nextcloud.talk.adapters.items.GenericTextHeaderItem import com.nextcloud.talk.adapters.items.LoadMoreResultsItem import com.nextcloud.talk.adapters.items.MessageResultItem import com.nextcloud.talk.adapters.items.MessagesTextHeaderItem +import com.nextcloud.talk.adapters.items.SpacerItem import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager @@ -291,10 +292,9 @@ class ConversationsListActivity : override fun onResume() { super.onResume() - - // actionBar?.show() if (adapter == null) { adapter = FlexibleAdapter(conversationItems, this, true) + addEmptyItemForEdgeToEdgeIfNecessary() } else { binding.loadingContent.visibility = View.GONE } @@ -340,6 +340,14 @@ class ConversationsListActivity : showSearchOrToolbar() } + // if edge to edge is used, add an empty item at the bottom of the list + @Suppress("MagicNumber") + private fun addEmptyItemForEdgeToEdgeIfNecessary() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) { + adapter?.addScrollableFooter(SpacerItem(200)) + } + } + @Suppress("LongMethod") private fun initObservers() { this.lifecycleScope.launch { diff --git a/app/src/main/res/layout/item_spacer.xml b/app/src/main/res/layout/item_spacer.xml new file mode 100644 index 000000000..d68a36408 --- /dev/null +++ b/app/src/main/res/layout/item_spacer.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file