Skip to content
Open
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
4 changes: 1 addition & 3 deletions features/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ dependencies {
implementation("androidx.compose.material3:material3:1.4.0-alpha10")
implementation(libs.accompanist.swiperefresh)
implementation(libs.bundles.coil)
implementation(libs.compose.material.adaptive)

// DI
implementation(libs.koin)
Expand Down Expand Up @@ -88,9 +89,6 @@ dependencies {
// Image Cropping
implementation(libs.android.image.cropper)

// Work Manager
implementation(libs.work.ktx)

// DivKit
implementation(libs.bundles.divkit.client)
implementation(libs.bundles.divkit.server)
Expand Down
28 changes: 26 additions & 2 deletions features/module_graph/modules.dot
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,67 @@ calendar
charts
chat
collapsing_toolbar
divkit
document
form
image
map
menu
multipane_menu
navigation
otp
photo
pin_code
qr_code
remote_transfer
root
settings
shared_element_transitions
tutorial
uploader
video
work_manager
multipane_menu -> calendar
multipane_menu -> charts
multipane_menu -> chat
multipane_menu -> collapsing_toolbar
multipane_menu -> divkit
multipane_menu -> document
multipane_menu -> form
multipane_menu -> image
multipane_menu -> map
multipane_menu -> menu
multipane_menu -> navigation
multipane_menu -> otp
multipane_menu -> photo
multipane_menu -> pin_code
multipane_menu -> qr_code
multipane_menu -> remote_transfer
multipane_menu -> shared_element_transitions
multipane_menu -> tutorial
multipane_menu -> video
multipane_menu -> work_manager
photo -> image
photo -> video
root -> calendar
root -> charts
root -> chat
root -> collapsing_toolbar
root -> divkit
root -> document
root -> form
root -> image
root -> map
root -> menu
root -> multipane_menu
root -> navigation
root -> otp
root -> photo
root -> pin_code
root -> qr_code
root -> remote_transfer
root -> settings
root -> shared_element_transitions
root -> tutorial
root -> uploader
root -> video
root -> work_manager
}
508 changes: 326 additions & 182 deletions features/module_graph/modules.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
Expand All @@ -48,6 +49,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.window.core.layout.WindowWidthSizeClass
import ru.mobileup.kmm_form_validation.control.InputControl
import ru.mobileup.samples.core.dialog.standard.StandardDialog
import ru.mobileup.samples.core.theme.AppTheme
Expand Down Expand Up @@ -78,12 +80,16 @@ fun ChatUi(
component: ChatComponent,
modifier: Modifier = Modifier,
) {
SystemBars(
statusBarColor = CustomTheme.colors.chat.primary,
navigationBarColor = CustomTheme.colors.chat.primary,
statusBarIconsColor = SystemBarIconsColor.Light,
navigationBarIconsColor = SystemBarIconsColor.Light
)
val changeSystemBarColor = currentWindowAdaptiveInfo().windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT

if (changeSystemBarColor) {
SystemBars(
statusBarColor = CustomTheme.colors.chat.primary,
navigationBarColor = CustomTheme.colors.chat.primary,
statusBarIconsColor = SystemBarIconsColor.Light,
navigationBarIconsColor = SystemBarIconsColor.Light
)
}

Scaffold(
modifier = modifier,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import androidx.compose.material3.Slider
import androidx.compose.material3.Surface
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
Expand All @@ -41,10 +42,11 @@ import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Popup
import androidx.window.core.layout.WindowWidthSizeClass
import ru.mobileup.samples.core.theme.custom.CustomTheme
import ru.mobileup.samples.core.utils.clickableNoRipple
import ru.mobileup.samples.core.utils.SystemBarIconsColor
import ru.mobileup.samples.core.utils.SystemBars
import ru.mobileup.samples.core.utils.clickableNoRipple
import ru.mobileup.samples.features.collapsing_toolbar.presentation.common.widget.CustomToolbarDefaults
import ru.mobileup.samples.features.collapsing_toolbar.presentation.specific.widget.SpecificToolbar

Expand All @@ -65,10 +67,14 @@ fun CollapsingToolbarSpecificUi(
convergenceCoefficient = { convergenceCoefficient }
)

SystemBars(
statusBarColor = Color.Transparent,
statusBarIconsColor = SystemBarIconsColor.Light,
)
val changeSystemBarColor = currentWindowAdaptiveInfo().windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT

if (changeSystemBarColor) {
SystemBars(
statusBarColor = Color.Transparent,
statusBarIconsColor = SystemBarIconsColor.Light,
)
}

// Don't copy ⚠️ For demonstration purposes, the ScrollState and ScrollBehavior positions are reset.
LaunchedEffect(canCollapse, convergenceCoefficient, itemsCount) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import com.yandex.div.json.ParsingErrorLogger
import org.koin.core.component.get
import org.koin.dsl.module
import ru.mobileup.samples.core.ComponentFactory
import ru.mobileup.samples.features.divkit.data.DivKitRepository
import ru.mobileup.samples.features.divkit.data.DivKitRepositoryImpl
import ru.mobileup.samples.features.divkit.data.api.DivKitApi
import ru.mobileup.samples.features.divkit.data.api.DivKitApiImpl
import ru.mobileup.samples.features.divkit.data.db.DivKitGoodsDb
import ru.mobileup.samples.features.divkit.data.db.DivKitGoodsDbImpl
import ru.mobileup.samples.features.divkit.data.DivKitRepository
import ru.mobileup.samples.features.divkit.data.DivKitRepositoryImpl
import ru.mobileup.samples.features.divkit.presentation.DivKitComponent
import ru.mobileup.samples.features.divkit.presentation.RealDivKitComponent
import ru.mobileup.samples.features.divkit.presentation.example_details.DivKitExampleDetailsComponent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ru.mobileup.samples.features.divkit.presentation.example_details

import android.net.Uri
import androidx.core.net.toUri
import com.arkivanov.decompose.ComponentContext
import com.yandex.div.core.Div2Context
import com.yandex.div.core.DivActionHandler
Expand All @@ -19,7 +20,6 @@ import ru.mobileup.samples.core.message.domain.Message
import ru.mobileup.samples.core.utils.componentScope
import ru.mobileup.samples.features.divkit.data.DivKitRepository
import ru.mobileup.samples.features.divkit.presentation.extension.tag
import androidx.core.net.toUri

class RealDivKitExampleDetailsComponent(
componentContext: ComponentContext,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.Icon
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
Expand All @@ -26,6 +27,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.window.core.layout.WindowWidthSizeClass
import dev.icerock.moko.resources.compose.localized
import ru.mobileup.samples.core.theme.AppTheme
import ru.mobileup.samples.core.theme.custom.CustomTheme
Expand All @@ -46,7 +48,13 @@ fun ImageUi(
Box(modifier = modifier) {
when (mode) {
ImageCarouselMode.Embedded -> {
Column(Modifier.statusBarsPadding()) {
Column(
Modifier
.statusBarsPadding()
.verticalScroll(
rememberScrollState()
)
) {
EmbeddedImageCarouselUi(component.imageCarouselComponent)
CatsTextContent(
title = title.localized(),
Expand All @@ -63,32 +71,37 @@ fun ImageUi(
}
}

ImageToolbar()
ImageToolbar(mode)
}
}

@Composable
private fun ImageToolbar(modifier: Modifier = Modifier) {
private fun ImageToolbar(mode: ImageCarouselMode, modifier: Modifier = Modifier) {
val context = LocalContext.current
val isCompact =
currentWindowAdaptiveInfo().windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT

Box(
modifier = modifier
.fillMaxHeight()
.statusBarsPadding()
) {
Surface(
modifier = Modifier
.padding(16.dp)
.clip(RoundedCornerShape(12.dp))
.size(40.dp)
.clickable { dispatchOnBackPressed(context) },
shape = RoundedCornerShape(12.dp),
color = CustomTheme.colors.background.screen
) {
Icon(
imageVector = Icons.AutoMirrored.Default.ArrowBack,
contentDescription = null,
modifier = Modifier.requiredSize(24.dp)
)
if (!isCompact && mode != ImageCarouselMode.Embedded) {
Surface(
modifier = Modifier
.padding(16.dp)
.clip(RoundedCornerShape(12.dp))
.size(40.dp)
.clickable { dispatchOnBackPressed(context) },
shape = RoundedCornerShape(12.dp),
color = CustomTheme.colors.background.screen
) {
Icon(
imageVector = Icons.AutoMirrored.Default.ArrowBack,
contentDescription = null,
modifier = Modifier.requiredSize(24.dp)
)
}
}
}
}
Expand All @@ -101,7 +114,6 @@ private fun CatsTextContent(
) {
Column(
modifier = modifier
.verticalScroll(rememberScrollState())
.navigationBarsPadding()
) {
Text(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import ru.mobileup.samples.features.R
enum class Sample(
override val displayName: StringDesc
) : DisplayedEnum {

MultiPaneMenu(R.string.menu_item_multi_pane_menu.strResDesc()),
Form(R.string.menu_item_form.strResDesc()),
Otp(R.string.menu_item_otp.strResDesc()),
Photo(R.string.menu_item_photo.strResDesc()),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ru.mobileup.samples.features.multipane_menu

import com.arkivanov.decompose.ComponentContext
import org.koin.core.component.get
import ru.mobileup.samples.core.ComponentFactory
import ru.mobileup.samples.features.menu.domain.Sample
import ru.mobileup.samples.features.multipane_menu.presentation.MultiPaneComponent
import ru.mobileup.samples.features.multipane_menu.presentation.RealMultiPaneComponent
import ru.mobileup.samples.features.multipane_menu.presentation.details.MultiPaneDetailsComponent
import ru.mobileup.samples.features.multipane_menu.presentation.details.RealMultiPaneDetailsComponent
import ru.mobileup.samples.features.multipane_menu.presentation.list.MultiPaneMenuComponent
import ru.mobileup.samples.features.multipane_menu.presentation.list.RealMultiPaneMenuComponent

fun ComponentFactory.createMultiPaneComponent(
componentContext: ComponentContext,
onOutput: (MultiPaneComponent.Output) -> Unit,
): MultiPaneComponent = RealMultiPaneComponent(componentContext, onOutput, get())

fun ComponentFactory.createMultiPaneMenuComponent(
componentContext: ComponentContext,
onOutput: (MultiPaneMenuComponent.Output) -> Unit,
): MultiPaneMenuComponent = RealMultiPaneMenuComponent(componentContext, onOutput)

fun ComponentFactory.createMultiPaneDetailsComponent(
componentContext: ComponentContext,
sample: Sample,
onOutput: (MultiPaneDetailsComponent.Output) -> Unit,
): MultiPaneDetailsComponent = RealMultiPaneDetailsComponent(componentContext, sample, onOutput, get())
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ru.mobileup.samples.features.multipane_menu.presentation

import com.arkivanov.decompose.ExperimentalDecomposeApi
import com.arkivanov.decompose.router.panels.ChildPanels
import com.arkivanov.decompose.router.panels.ChildPanelsMode
import kotlinx.coroutines.flow.StateFlow
import ru.mobileup.samples.core.utils.PredictiveBackComponent
import ru.mobileup.samples.features.multipane_menu.presentation.details.MultiPaneDetailsComponent
import ru.mobileup.samples.features.multipane_menu.presentation.list.MultiPaneMenuComponent

@OptIn(ExperimentalDecomposeApi::class)
interface MultiPaneComponent : PredictiveBackComponent {

val panels: StateFlow<ChildPanels<*, MultiPaneMenuComponent, *, MultiPaneDetailsComponent, Nothing, Nothing>>

fun setMode(mode: ChildPanelsMode)
fun onSettingsClick()

sealed interface Output {
object SettingsRequested : Output
}
}
Loading