You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.6 KiB
Kotlin
65 lines
2.6 KiB
Kotlin
/* 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.topsites
|
|
|
|
import android.view.View
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.platform.ComposeView
|
|
import androidx.lifecycle.LifecycleOwner
|
|
import mozilla.components.lib.state.ext.observeAsComposableState
|
|
import org.mozilla.fenix.HomeActivity
|
|
import org.mozilla.fenix.components.components
|
|
import org.mozilla.fenix.compose.ComposeViewHolder
|
|
import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor
|
|
import org.mozilla.fenix.perf.StartupTimeline
|
|
import org.mozilla.fenix.wallpapers.WallpaperState
|
|
|
|
/**
|
|
* View holder for top sites.
|
|
*
|
|
* @param composeView [ComposeView] which will be populated with Jetpack Compose UI content.
|
|
* @param viewLifecycleOwner [LifecycleOwner] to which this Composable will be tied to.
|
|
* @property interactor [TopSiteInteractor] which will have delegated to all user top sites
|
|
* interactions.
|
|
*/
|
|
class TopSitesViewHolder(
|
|
composeView: ComposeView,
|
|
viewLifecycleOwner: LifecycleOwner,
|
|
private val interactor: TopSiteInteractor,
|
|
) : ComposeViewHolder(composeView, viewLifecycleOwner) {
|
|
|
|
@Composable
|
|
override fun Content() {
|
|
val topSites =
|
|
components.appStore.observeAsComposableState { state -> state.topSites }.value
|
|
val wallpaperState = components.appStore
|
|
.observeAsComposableState { state -> state.wallpaperState }.value
|
|
?: WallpaperState.default
|
|
|
|
topSites?.let {
|
|
TopSites(
|
|
topSites = it,
|
|
topSiteColors = TopSiteColors.colors(wallpaperState = wallpaperState),
|
|
onTopSiteClick = { topSite ->
|
|
interactor.onSelectTopSite(topSite, it.indexOf(topSite))
|
|
},
|
|
onTopSiteLongClick = interactor::onTopSiteLongClicked,
|
|
onOpenInPrivateTabClicked = interactor::onOpenInPrivateTabClicked,
|
|
onRenameTopSiteClicked = interactor::onRenameTopSiteClicked,
|
|
onRemoveTopSiteClicked = interactor::onRemoveTopSiteClicked,
|
|
onSettingsClicked = interactor::onSettingsClicked,
|
|
onSponsorPrivacyClicked = interactor::onSponsorPrivacyClicked,
|
|
onTopSitesItemBound = {
|
|
StartupTimeline.onTopSitesItemBound(activity = composeView.context as HomeActivity)
|
|
},
|
|
)
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
val LAYOUT_ID = View.generateViewId()
|
|
}
|
|
}
|