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() }
- }
-}