diff --git a/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarksHeaderViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarksHeaderViewHolder.kt index 5c1212545..e05d06b09 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarksHeaderViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarksHeaderViewHolder.kt @@ -5,29 +5,39 @@ package org.mozilla.fenix.home.recentbookmarks.view import android.view.View +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.LifecycleOwner import androidx.navigation.findNavController import org.mozilla.fenix.R -import org.mozilla.fenix.databinding.RecentBookmarksHeaderBinding +import org.mozilla.fenix.compose.ComposeViewHolder +import org.mozilla.fenix.compose.home.HomeSectionHeader import org.mozilla.fenix.home.recentbookmarks.interactor.RecentBookmarksInteractor -import org.mozilla.fenix.utils.view.ViewHolder +import org.mozilla.fenix.theme.FirefoxTheme /** * View holder for the recent bookmarks header and "Show all" button. * - * @param view The container [View] for this view holder. + * @paramcomposeView [ComposeView] which will be populated with Jetpack Compose UI content. * @param interactor [RecentBookmarksInteractor] which will have delegated to all user interactions. */ class RecentBookmarksHeaderViewHolder( - view: View, + composeView: ComposeView, + viewLifecycleOwner: LifecycleOwner, private val interactor: RecentBookmarksInteractor -) : ViewHolder(view) { +) : ComposeViewHolder(composeView, viewLifecycleOwner) { init { - val binding = RecentBookmarksHeaderBinding.bind(view) - binding.showAllBookmarksButton.setOnClickListener { - dismissSearchDialogIfDisplayed() - interactor.onShowAllBookmarksClicked() - } + val horizontalPadding = + composeView.resources.getDimensionPixelSize(R.dimen.home_item_horizontal_margin) + composeView.setPadding(horizontalPadding, 0, horizontalPadding, 0) } private fun dismissSearchDialogIfDisplayed() { @@ -37,7 +47,26 @@ class RecentBookmarksHeaderViewHolder( } } + @Composable + override fun Content() { + Column { + Spacer(modifier = Modifier.height(40.dp)) + + HomeSectionHeader( + text = stringResource(R.string.recent_bookmarks_title), + description = stringResource(id = R.string.recently_saved_show_all_content_description_2), + onShowAllClick = { + dismissSearchDialogIfDisplayed() + interactor.onShowAllBookmarksClicked() + } + ) + + Spacer(Modifier.height(16.dp)) + } + } + companion object { - const val LAYOUT_ID = R.layout.recent_bookmarks_header + val LAYOUT_ID = View.generateViewId() } } + diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt index dde0f7a56..405876629 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt @@ -256,6 +256,11 @@ class SessionControlAdapter( viewLifecycleOwner, interactor ) + RecentBookmarksHeaderViewHolder.LAYOUT_ID -> return RecentBookmarksHeaderViewHolder( + composeView = ComposeView(parent.context), + viewLifecycleOwner, + interactor + ) } val view = LayoutInflater.from(parent.context).inflate(viewType, parent, false) @@ -296,7 +301,6 @@ class SessionControlAdapter( ) MessageCardViewHolder.LAYOUT_ID -> MessageCardViewHolder(view, interactor) RecentTabsHeaderViewHolder.LAYOUT_ID -> RecentTabsHeaderViewHolder(view, interactor) - RecentBookmarksHeaderViewHolder.LAYOUT_ID -> RecentBookmarksHeaderViewHolder(view, interactor) BottomSpacerViewHolder.LAYOUT_ID -> BottomSpacerViewHolder(view) else -> throw IllegalStateException() } @@ -308,6 +312,7 @@ class SessionControlAdapter( is RecentlyVisitedViewHolder, is RecentVisitsHeaderViewHolder, is RecentBookmarksViewHolder, + is RecentBookmarksHeaderViewHolder, is RecentTabViewHolder, is PocketCategoriesViewHolder, is PocketRecommendationsHeaderViewHolder, diff --git a/app/src/main/res/layout/recent_bookmarks_header.xml b/app/src/main/res/layout/recent_bookmarks_header.xml deleted file mode 100644 index 1f3c6c0bd..000000000 --- a/app/src/main/res/layout/recent_bookmarks_header.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dcf355f73..041d7d135 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,7 +39,7 @@ Recent bookmarks - Recently saved bookmarks + Recently saved bookmarks Show all diff --git a/app/src/test/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarksHeaderViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarksHeaderViewHolderTest.kt deleted file mode 100644 index 792cf3e8a..000000000 --- a/app/src/test/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarksHeaderViewHolderTest.kt +++ /dev/null @@ -1,40 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.home.recentbookmarks.view - -import android.view.LayoutInflater -import androidx.navigation.Navigation -import io.mockk.mockk -import io.mockk.verify -import mozilla.components.support.test.robolectric.testContext -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mozilla.fenix.databinding.RecentBookmarksHeaderBinding -import org.mozilla.fenix.helpers.FenixRobolectricTestRunner -import org.mozilla.fenix.home.recentbookmarks.interactor.RecentBookmarksInteractor - -@RunWith(FenixRobolectricTestRunner::class) -class RecentBookmarksHeaderViewHolderTest { - - private lateinit var binding: RecentBookmarksHeaderBinding - private lateinit var interactor: RecentBookmarksInteractor - - @Before - fun setup() { - binding = RecentBookmarksHeaderBinding.inflate(LayoutInflater.from(testContext)) - Navigation.setViewNavController(binding.root, mockk(relaxed = true)) - interactor = mockk(relaxed = true) - } - - @Test - fun `WHEN show all button is clicked THEN interactor is called`() { - RecentBookmarksHeaderViewHolder(binding.root, interactor) - - binding.showAllBookmarksButton.performClick() - - verify { interactor.onShowAllBookmarksClicked() } - } -}