Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions ui/article-renderer/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ android {

buildFeatures {
dataBinding = true
viewBinding = true
}
}

Expand All @@ -25,20 +24,16 @@ dependencies {
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.fragment.ktx)
implementation(libs.androidx.lifecycle.livedata.ktx)
implementation(libs.androidx.constraintlayout)
implementation(libs.androidx.recyclerview)

implementation(libs.gtoSupport.androidx.fragment)
implementation(libs.gtoSupport.androidx.lifecycle)
implementation(libs.gtoSupport.androidx.recyclerview)
implementation(libs.gtoSupport.core)
implementation(libs.gtoSupport.kotlin.coroutines)
implementation(libs.gtoSupport.picasso)
implementation(libs.gtoSupport.sync)
implementation(libs.gtoSupport.util)

implementation(libs.colormath.jetpack.compose)
implementation(libs.dagger)
implementation(libs.godtoolsShared.renderer)
implementation(libs.hilt)
implementation(libs.splitties.fragmentargs)

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,56 +3,108 @@ package org.cru.godtools.article.ui.categories
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.lifecycle.map
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.unit.dp
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import dagger.hilt.android.AndroidEntryPoint
import java.util.Locale
import javax.inject.Inject
import javax.inject.Named
import okio.FileSystem
import org.ccci.gto.android.common.androidx.fragment.app.findListener
import org.ccci.gto.android.common.androidx.recyclerview.decorator.MarginItemDecoration
import org.cru.godtools.base.tool.BaseToolRendererModule.Companion.TOOL_RESOURCE_FILE_SYSTEM
import org.cru.godtools.base.tool.analytics.model.SCREEN_CATEGORIES
import org.cru.godtools.base.tool.analytics.model.ToolAnalyticsScreenEvent
import org.cru.godtools.base.tool.fragment.BaseToolFragment
import org.cru.godtools.base.tool.viewmodel.LatestPublishedManifestDataModel
import org.cru.godtools.base.ui.theme.GodToolsTheme
import org.cru.godtools.shared.renderer.article.RenderArticleCategory
import org.cru.godtools.shared.renderer.util.ProvideRendererServices
import org.cru.godtools.shared.tool.parser.model.Category
import org.cru.godtools.tool.article.R
import org.cru.godtools.tool.article.databinding.ArticleCategoriesFragmentBinding
import org.greenrobot.eventbus.EventBus
import splitties.fragmentargs.arg

@AndroidEntryPoint
class CategoriesFragment :
BaseToolFragment<ArticleCategoriesFragmentBinding>,
CategorySelectedListener {
constructor() : super(R.layout.article_categories_fragment)
constructor(code: String, locale: Locale) : super(R.layout.article_categories_fragment, code, locale)
class CategoriesFragment() : Fragment() {
constructor(code: String, locale: Locale) : this() {
tool = code
this.locale = locale
}

private var tool by arg<String>()
private var locale by arg<Locale>()

@Inject
internal lateinit var eventBus: EventBus

@Inject
@Named(TOOL_RESOURCE_FILE_SYSTEM)
internal lateinit var resourceFileSystem: FileSystem

// region Lifecycle
override fun onCreateBinding(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) =
ArticleCategoriesFragmentBinding.inflate(inflater, container, false).apply { setupCategoriesView() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupDataModel()
}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) =
ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
GodToolsTheme {
ProvideRendererServices(resourceFileSystem) {
CategoriesContent()
}
}
}
}

override fun onResume() {
super.onResume()
eventBus.post(ToolAnalyticsScreenEvent(SCREEN_CATEGORIES, tool, locale))
}

override fun onCategorySelected(category: Category?) {
private fun onCategorySelected(category: Category?) {
findListener<CategorySelectedListener>()?.onCategorySelected(category)
}
// endregion Lifecycle

// region Categories View
private fun ArticleCategoriesFragmentBinding.setupCategoriesView() {
categories.apply {
setHasFixedSize(true)
addItemDecoration(
MarginItemDecoration(bottomMargin = resources.getDimensionPixelSize(R.dimen.categories_list_gap))
)
adapter = CategoriesAdapter(viewLifecycleOwner).apply {
callbacks.set(this@CategoriesFragment)
toolDataModel.manifest.map { it?.categories }.observe(viewLifecycleOwner, this)
// region Data Model
private val toolDataModel: LatestPublishedManifestDataModel by viewModels()

private fun setupDataModel() {
toolDataModel.toolCode.value = tool
toolDataModel.locale.value = locale
}
// endregion Data Model

@Composable
private fun CategoriesContent(modifier: Modifier = Modifier) {
val manifest by toolDataModel.manifestFlow.collectAsState(null)
val categories by remember { derivedStateOf { manifest?.categories.orEmpty() } }

LazyColumn(
verticalArrangement = Arrangement.spacedBy(1.dp),
modifier = modifier.fillMaxSize(),
) {
items(categories, key = { it.id ?: it }) { category ->
RenderArticleCategory(
category,
modifier = Modifier.clickable { onCategorySelected(category) }
)
}
}
}
// endregion Categories View
}

This file was deleted.

This file was deleted.

42 changes: 0 additions & 42 deletions ui/article-renderer/src/main/res/layout/list_item_category.xml

This file was deleted.

12 changes: 0 additions & 12 deletions ui/article-renderer/src/main/res/values/styles_article.xml

This file was deleted.