mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-2686 App | Tech | Update Jetpack Compose (#1566)
This commit is contained in:
parent
9b68f87a8f
commit
e680126dd1
20 changed files with 138 additions and 144 deletions
|
@ -23,6 +23,7 @@ import androidx.compose.foundation.layout.ime
|
|||
import androidx.compose.foundation.layout.navigationBars
|
||||
import androidx.compose.foundation.layout.systemBars
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.material.Scaffold
|
||||
import androidx.compose.runtime.Composable
|
||||
|
@ -45,8 +46,6 @@ import com.anytypeio.anytype.presentation.library.LibraryEvent
|
|||
import com.anytypeio.anytype.presentation.library.LibraryViewModel
|
||||
import com.anytypeio.anytype.ui.library.views.LibraryTabs
|
||||
import com.anytypeio.anytype.ui.library.views.LibraryTabsContent
|
||||
import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import com.google.accompanist.pager.rememberPagerState
|
||||
import kotlinx.coroutines.FlowPreview
|
||||
|
||||
|
||||
|
@ -54,7 +53,6 @@ import kotlinx.coroutines.FlowPreview
|
|||
@ExperimentalComposeUiApi
|
||||
@ExperimentalMaterialApi
|
||||
@FlowPreview
|
||||
@ExperimentalPagerApi
|
||||
@Composable
|
||||
fun LibraryScreen(
|
||||
configuration: LibraryConfiguration,
|
||||
|
@ -66,7 +64,10 @@ fun LibraryScreen(
|
|||
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
|
||||
val effects by viewModel.effects.collectAsStateWithLifecycle()
|
||||
|
||||
val pagerState = rememberPagerState(INITIAL_TAB)
|
||||
val pagerState = rememberPagerState(
|
||||
initialPage = INITIAL_TAB,
|
||||
pageCount = { 2 }
|
||||
)
|
||||
val modifier = Modifier
|
||||
.background(color = colorResource(id = R.color.background_primary))
|
||||
|
||||
|
|
|
@ -3,11 +3,15 @@ package com.anytypeio.anytype.ui.library.views
|
|||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.pager.PagerState
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.material.LocalRippleConfiguration
|
||||
import androidx.compose.material.RippleConfiguration
|
||||
import androidx.compose.material.Tab
|
||||
import androidx.compose.material.TabRow
|
||||
import androidx.compose.material.TabRowDefaults
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.ripple.LocalRippleTheme
|
||||
import androidx.compose.material.ripple.RippleAlpha
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.MutableState
|
||||
|
@ -15,6 +19,7 @@ import androidx.compose.runtime.mutableStateListOf
|
|||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.colorResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
|
@ -26,11 +31,9 @@ import com.anytypeio.anytype.ui.library.LibraryScreenConfig
|
|||
import com.anytypeio.anytype.ui.library.ScreenState
|
||||
import com.anytypeio.anytype.ui.library.WrapWithLibraryAnimation
|
||||
import com.anytypeio.anytype.ui.library.styles.TabTitleStyle
|
||||
import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import com.google.accompanist.pager.PagerState
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@ExperimentalPagerApi
|
||||
@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterialApi::class)
|
||||
@Composable
|
||||
fun LibraryTabs(
|
||||
modifier: Modifier,
|
||||
|
@ -62,7 +65,7 @@ fun LibraryTabs(
|
|||
)
|
||||
},
|
||||
tabs = {
|
||||
CompositionLocalProvider(LocalRippleTheme provides LibraryTabsTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides LibraryRippleTheme) {
|
||||
LibraryTab(
|
||||
modifier = modifier,
|
||||
config = configuration.types,
|
||||
|
@ -92,9 +95,11 @@ fun LibraryTabs(
|
|||
}
|
||||
}
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
private val LibraryRippleTheme = RippleConfiguration(color = Color.Unspecified, rippleAlpha = RippleAlpha(0f, 0f, 0f, 0f))
|
||||
|
||||
@Composable
|
||||
fun LibraryTab(
|
||||
modifier: Modifier,
|
||||
|
|
|
@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.PaddingValues
|
|||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.pager.HorizontalPager
|
||||
import androidx.compose.foundation.pager.PagerState
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.MutableState
|
||||
|
@ -29,14 +31,10 @@ import com.anytypeio.anytype.ui.library.LibraryScreenConfig
|
|||
import com.anytypeio.anytype.ui.library.ScreenState
|
||||
import com.anytypeio.anytype.ui.library.WrapWithLibraryAnimation
|
||||
import com.anytypeio.anytype.ui.library.views.list.LibraryListView
|
||||
import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import com.google.accompanist.pager.HorizontalPager
|
||||
import com.google.accompanist.pager.PagerState
|
||||
import kotlinx.coroutines.FlowPreview
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@FlowPreview
|
||||
@ExperimentalPagerApi
|
||||
@Composable
|
||||
fun LibraryTabsContent(
|
||||
modifier: Modifier,
|
||||
|
@ -48,7 +46,10 @@ fun LibraryTabsContent(
|
|||
screenState: MutableState<ScreenState>,
|
||||
effects: LibraryViewModel.Effect,
|
||||
) {
|
||||
HorizontalPager(modifier = modifier, state = pagerState, count = 2) { page ->
|
||||
HorizontalPager(
|
||||
modifier = modifier,
|
||||
state = pagerState
|
||||
) { page ->
|
||||
val dataTabs = when (configuration[page]) {
|
||||
is LibraryScreenConfig.Types -> {
|
||||
state.types
|
||||
|
@ -71,7 +72,6 @@ fun LibraryTabsContent(
|
|||
|
||||
@ExperimentalAnimationApi
|
||||
@FlowPreview
|
||||
@ExperimentalPagerApi
|
||||
@Composable
|
||||
fun TabContentScreen(
|
||||
modifier: Modifier,
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
package com.anytypeio.anytype.ui.library.views
|
||||
|
||||
import androidx.compose.material.ripple.RippleAlpha
|
||||
import androidx.compose.material.ripple.RippleTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
||||
object LibraryTabsTheme : RippleTheme {
|
||||
@Composable
|
||||
override fun defaultColor() = Color.Unspecified
|
||||
|
||||
@Composable
|
||||
override fun rippleAlpha(): RippleAlpha = RippleAlpha(0.0f, 0.0f, 0.0f, 0.0f)
|
||||
}
|
|
@ -3,6 +3,7 @@ package com.anytypeio.anytype.ui.library.views.list
|
|||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.pager.rememberPagerState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.ui.Modifier
|
||||
|
@ -14,11 +15,8 @@ import com.anytypeio.anytype.presentation.library.LibraryScreenState
|
|||
import com.anytypeio.anytype.presentation.library.LibraryViewModel
|
||||
import com.anytypeio.anytype.ui.library.LibraryListConfig
|
||||
import com.anytypeio.anytype.ui.library.ScreenState
|
||||
import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import com.google.accompanist.pager.rememberPagerState
|
||||
|
||||
@ExperimentalAnimationApi
|
||||
@ExperimentalPagerApi
|
||||
@Composable
|
||||
fun LibraryListView(
|
||||
libraryListConfig: List<LibraryListConfig>,
|
||||
|
@ -28,7 +26,10 @@ fun LibraryListView(
|
|||
screenState: MutableState<ScreenState>,
|
||||
effects: LibraryViewModel.Effect,
|
||||
) {
|
||||
val pagerState = rememberPagerState(INITIAL_TAB)
|
||||
val pagerState = rememberPagerState(
|
||||
initialPage = INITIAL_TAB,
|
||||
pageCount = { 2 }
|
||||
)
|
||||
val modifier = Modifier.background(
|
||||
color = colorResource(id = R.color.background_primary)
|
||||
)
|
||||
|
|
|
@ -4,10 +4,12 @@ import androidx.compose.animation.ExperimentalAnimationApi
|
|||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.wrapContentWidth
|
||||
import androidx.compose.foundation.pager.PagerState
|
||||
import androidx.compose.material.ScrollableTabRow
|
||||
import androidx.compose.material.Tab
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.ripple.LocalRippleTheme
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.LocalRippleConfiguration
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
|
@ -18,13 +20,10 @@ import androidx.compose.ui.unit.dp
|
|||
import com.anytypeio.anytype.R
|
||||
import com.anytypeio.anytype.core_ui.views.HeadlineSubheading
|
||||
import com.anytypeio.anytype.ui.library.LibraryListConfig
|
||||
import com.anytypeio.anytype.ui.library.views.LibraryTabsTheme
|
||||
import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import com.google.accompanist.pager.PagerState
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@ExperimentalAnimationApi
|
||||
@ExperimentalPagerApi
|
||||
@Composable
|
||||
fun LibraryListTabs(
|
||||
pagerState: PagerState,
|
||||
|
@ -40,7 +39,7 @@ fun LibraryListTabs(
|
|||
edgePadding = 0.dp,
|
||||
modifier = modifier.padding(start = 4.dp),
|
||||
tabs = {
|
||||
CompositionLocalProvider(LocalRippleTheme provides LibraryTabsTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
configuration.forEachIndexed { index, it ->
|
||||
LibraryListTab(
|
||||
config = it,
|
||||
|
|
|
@ -14,6 +14,8 @@ import androidx.compose.foundation.layout.padding
|
|||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.foundation.pager.HorizontalPager
|
||||
import androidx.compose.foundation.pager.PagerState
|
||||
import androidx.compose.material.Divider
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
|
@ -24,7 +26,6 @@ import androidx.compose.runtime.mutableStateOf
|
|||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
|
@ -53,13 +54,8 @@ import com.anytypeio.anytype.ui.library.views.list.items.LibTypeItem
|
|||
import com.anytypeio.anytype.ui.library.views.list.items.LibraryObjectEmptyItem
|
||||
import com.anytypeio.anytype.ui.library.views.list.items.MyRelationItem
|
||||
import com.anytypeio.anytype.ui.library.views.list.items.MyTypeItem
|
||||
import com.google.accompanist.pager.ExperimentalPagerApi
|
||||
import com.google.accompanist.pager.HorizontalPager
|
||||
import com.google.accompanist.pager.PagerState
|
||||
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
@ExperimentalAnimationApi
|
||||
@ExperimentalPagerApi
|
||||
@Composable
|
||||
fun LibraryListTabsContent(
|
||||
modifier: Modifier,
|
||||
|
@ -82,7 +78,6 @@ fun LibraryListTabsContent(
|
|||
HorizontalPager(
|
||||
modifier = modifier,
|
||||
state = pagerState,
|
||||
count = configuration.size,
|
||||
userScrollEnabled = screenState.value == ScreenState.CONTENT
|
||||
) { index ->
|
||||
val data = when (configuration[index]) {
|
||||
|
@ -145,7 +140,6 @@ fun LibraryListTabsContent(
|
|||
attachAnalytics(pagerState, configuration, vmAnalyticsStream)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalPagerApi::class)
|
||||
@Composable
|
||||
private fun attachAnalytics(
|
||||
pagerState: PagerState,
|
||||
|
|
|
@ -26,6 +26,7 @@ import androidx.compose.ui.Alignment.Companion.CenterHorizontally
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.blur
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
|
@ -129,7 +130,10 @@ fun MnemonicPhraseScreen(
|
|||
dragHandle = {
|
||||
// Do nothing
|
||||
},
|
||||
sheetState = SheetState(skipPartiallyExpanded = true)
|
||||
sheetState = SheetState(
|
||||
skipPartiallyExpanded = true,
|
||||
density = LocalDensity.current
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,7 +77,9 @@ fun VersionHistoryPreviewScreen(
|
|||
modifier = Modifier.fillMaxSize(),
|
||||
scrimColor = Color.Transparent,
|
||||
containerColor = colorResource(id = R.color.background_primary),
|
||||
windowInsets = WindowInsets(top = 60.dp),
|
||||
contentWindowInsets = {
|
||||
WindowInsets(top = 60.dp)
|
||||
}
|
||||
) {
|
||||
Box(modifier = Modifier.fillMaxSize()) {
|
||||
Column(
|
||||
|
|
|
@ -2,16 +2,12 @@ package com.anytypeio.anytype.core_ui.features.multiplayer
|
|||
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.slideInVertically
|
||||
import androidx.compose.animation.slideOutVertically
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.gestures.AnchoredDraggableState
|
||||
import androidx.compose.foundation.gestures.DraggableAnchors
|
||||
import androidx.compose.foundation.gestures.Orientation
|
||||
import androidx.compose.foundation.gestures.anchoredDraggable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
|
@ -20,11 +16,9 @@ import androidx.compose.foundation.layout.fillMaxHeight
|
|||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.offset
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.foundation.layout.wrapContentWidth
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
|
@ -35,7 +29,6 @@ import androidx.compose.material.DropdownMenuItem
|
|||
import androidx.compose.material3.DropdownMenu
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.SideEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
|
@ -56,7 +49,6 @@ import androidx.compose.ui.text.font.FontWeight
|
|||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.compose.ui.unit.TextUnit
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
|
@ -272,20 +264,21 @@ fun ShareSpaceScreen(
|
|||
DragValue.DRAGGED_DOWN at draggedDownAnchorTop
|
||||
DragValue.DRAGGED_UP at 0f
|
||||
}
|
||||
val anchoredDraggableState = remember {
|
||||
AnchoredDraggableState(
|
||||
initialValue = DragValue.DRAGGED_UP,
|
||||
anchors = anchors,
|
||||
positionalThreshold = { distance: Float -> distance * 0.5f },
|
||||
velocityThreshold = { with(density) { 100.dp.toPx() } },
|
||||
animationSpec = tween()
|
||||
)
|
||||
}
|
||||
val offset =
|
||||
if (anchoredDraggableState.offset.isNaN()) 0 else anchoredDraggableState.offset.toInt()
|
||||
SideEffect {
|
||||
anchoredDraggableState.updateAnchors(anchors)
|
||||
}
|
||||
// TODO https://linear.app/anytype/issue/DROID-2833/fix-anchoreddraggablestate-in-sharespacescreenkt
|
||||
// val anchoredDraggableState = remember {
|
||||
// AnchoredDraggableState(
|
||||
// initialValue = DragValue.DRAGGED_UP,
|
||||
// anchors = anchors,
|
||||
// positionalThreshold = { distance: Float -> distance * 0.5f },
|
||||
// velocityThreshold = { with(density) { 100.dp.toPx() } },
|
||||
// animationSpec = tween()
|
||||
// )
|
||||
// }
|
||||
// val offset =
|
||||
// if (anchoredDraggableState.offset.isNaN()) 0 else anchoredDraggableState.offset.toInt()
|
||||
// SideEffect {
|
||||
// anchoredDraggableState.updateAnchors(anchors)
|
||||
// }
|
||||
AnimatedVisibility(
|
||||
visible = shareLinkViewState is ShareLinkViewState.Shared,
|
||||
enter = slideInVertically { it },
|
||||
|
@ -294,10 +287,10 @@ fun ShareSpaceScreen(
|
|||
) {
|
||||
Box(modifier = Modifier
|
||||
.padding(16.dp)
|
||||
.offset {
|
||||
IntOffset(x = 0, y = offset)
|
||||
}
|
||||
.anchoredDraggable(anchoredDraggableState, Orientation.Vertical)
|
||||
// .offset {
|
||||
// IntOffset(x = 0, y = offset)
|
||||
// }
|
||||
// .anchoredDraggable(anchoredDraggableState, Orientation.Vertical)
|
||||
) {
|
||||
if (shareLinkViewState is ShareLinkViewState.Shared) {
|
||||
ShareInviteLinkCard(
|
||||
|
|
|
@ -21,9 +21,8 @@ import androidx.compose.foundation.shape.RoundedCornerShape
|
|||
import androidx.compose.material.Button
|
||||
import androidx.compose.material.ButtonDefaults
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.ripple.LocalRippleTheme
|
||||
import androidx.compose.material.ripple.RippleAlpha
|
||||
import androidx.compose.material.ripple.RippleTheme
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.LocalRippleConfiguration
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.getValue
|
||||
|
@ -119,6 +118,7 @@ class ButtonWarningLarge @JvmOverloads constructor(
|
|||
/**
|
||||
* Composable Buttons
|
||||
*/
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonPrimary(
|
||||
text: String = "",
|
||||
|
@ -133,7 +133,7 @@ fun ButtonPrimary(
|
|||
if (isPressed.value) colorResource(id = R.color.glyph_button).copy(alpha = 0.15f)
|
||||
else colorResource(id = R.color.glyph_button)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
interactionSource = interactionSource,
|
||||
|
@ -161,6 +161,7 @@ fun ButtonPrimary(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonPrimaryDarkTheme(
|
||||
text: String = "",
|
||||
|
@ -172,7 +173,7 @@ fun ButtonPrimaryDarkTheme(
|
|||
val interactionSource = remember { MutableInteractionSource() }
|
||||
val backgroundColor = Color(0xFFF3F2EC)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
interactionSource = interactionSource,
|
||||
|
@ -200,6 +201,7 @@ fun ButtonPrimaryDarkTheme(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonPrimaryLoading(
|
||||
text: String = "",
|
||||
|
@ -220,7 +222,7 @@ fun ButtonPrimaryLoading(
|
|||
if (isPressed.value) colorResource(id = R.color.glyph_button).copy(alpha = 0.15f)
|
||||
else colorResource(id = R.color.glyph_button)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Box(modifier = modifierBox, contentAlignment = Alignment.Center) {
|
||||
Button(
|
||||
onClick = { if (!loading) onClick() },
|
||||
|
@ -258,6 +260,7 @@ fun ButtonPrimaryLoading(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonSecondary(
|
||||
text: String = "",
|
||||
|
@ -274,7 +277,7 @@ fun ButtonSecondary(
|
|||
id = R.color.shape_secondary
|
||||
)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
interactionSource = interactionSource,
|
||||
|
@ -303,6 +306,7 @@ fun ButtonSecondary(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonSecondaryDarkTheme(
|
||||
text: String = "",
|
||||
|
@ -319,7 +323,7 @@ fun ButtonSecondaryDarkTheme(
|
|||
id = R.color.shape_secondary
|
||||
)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
interactionSource = interactionSource,
|
||||
|
@ -348,6 +352,7 @@ fun ButtonSecondaryDarkTheme(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonSecondaryLoading(
|
||||
text: String = "",
|
||||
|
@ -371,7 +376,7 @@ fun ButtonSecondaryLoading(
|
|||
id = R.color.shape_secondary
|
||||
)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Box(modifier = modifierBox, contentAlignment = Alignment.Center) {
|
||||
Button(
|
||||
onClick = {if (!loading) onClick()},
|
||||
|
@ -410,6 +415,7 @@ fun ButtonSecondaryLoading(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonWarning(
|
||||
text: String = "",
|
||||
|
@ -425,7 +431,7 @@ fun ButtonWarning(
|
|||
)
|
||||
val borderColor = colorResource(id = R.color.shape_primary)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
interactionSource = interactionSource,
|
||||
|
@ -452,6 +458,7 @@ fun ButtonWarning(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonWarningLoading(
|
||||
text: String = "",
|
||||
|
@ -473,7 +480,7 @@ fun ButtonWarningLoading(
|
|||
)
|
||||
val borderColor = colorResource(id = R.color.shape_primary)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Box(modifier = modifierBox, contentAlignment = Alignment.Center) {
|
||||
Button(
|
||||
onClick = { if (!loading) onClick() },
|
||||
|
@ -558,14 +565,6 @@ enum class ButtonSize(
|
|||
|
||||
}
|
||||
|
||||
object NoRippleTheme : RippleTheme {
|
||||
@Composable
|
||||
override fun defaultColor() = Color.Unspecified
|
||||
|
||||
@Composable
|
||||
override fun rippleAlpha(): RippleAlpha = RippleAlpha(0.0f, 0.0f, 0.0f, 0.0f)
|
||||
}
|
||||
|
||||
@Composable
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_NO, name = "Light Mode")
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES, name = "Dark Mode")
|
||||
|
|
|
@ -12,7 +12,8 @@ import androidx.compose.foundation.layout.padding
|
|||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.ripple.LocalRippleTheme
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.LocalRippleConfiguration
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.remember
|
||||
|
@ -24,6 +25,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
|||
import androidx.compose.ui.unit.dp
|
||||
import com.anytypeio.anytype.core_ui.R
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ButtonUpgrade(
|
||||
text: String = "",
|
||||
|
@ -38,7 +40,7 @@ fun ButtonUpgrade(
|
|||
id = R.color.glyph_selected
|
||||
)
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Box(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
|
|
|
@ -10,7 +10,8 @@ import androidx.compose.foundation.shape.RoundedCornerShape
|
|||
import androidx.compose.material.Button
|
||||
import androidx.compose.material.ButtonDefaults
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.ripple.LocalRippleTheme
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.LocalRippleConfiguration
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.getValue
|
||||
|
@ -34,6 +35,7 @@ import com.anytypeio.anytype.core_ui.ColorButtonSecondaryText
|
|||
import com.anytypeio.anytype.core_ui.views.animations.DotsLoadingIndicator
|
||||
import com.anytypeio.anytype.core_ui.views.animations.FadeAnimationSpecs
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun OnBoardingButtonPrimary(
|
||||
text: String = "",
|
||||
|
@ -51,7 +53,7 @@ fun OnBoardingButtonPrimary(
|
|||
ColorButtonPrimaryActive
|
||||
}
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
interactionSource = interactionSource,
|
||||
|
@ -94,6 +96,7 @@ fun OnBoardingButtonPrimary(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun OnBoardingButtonSecondary(
|
||||
text: String = "",
|
||||
|
@ -117,7 +120,7 @@ fun OnBoardingButtonSecondary(
|
|||
ColorButtonSecondaryBorder
|
||||
}
|
||||
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Button(
|
||||
onClick = onClick,
|
||||
interactionSource = interactionSource,
|
||||
|
|
|
@ -5,9 +5,9 @@ kspVersion = "2.0.0-1.0.22"
|
|||
|
||||
androidxCoreVersion = "1.13.1"
|
||||
|
||||
androidxComposeVersion = '1.6.8'
|
||||
composeMaterial3Version = '1.2.1'
|
||||
composeMaterialVersion = '1.6.8'
|
||||
androidxComposeVersion = '1.7.1'
|
||||
composeMaterial3Version = '1.3.0'
|
||||
composeMaterialVersion = '1.7.1'
|
||||
composeConstraintLayoutVersion = '1.0.1'
|
||||
|
||||
dokkaVersion = '1.9.20'
|
||||
|
@ -41,8 +41,8 @@ emojiCompatVersion = '1.1.0'
|
|||
viewPager2Version = '1.1.0'
|
||||
lifecycleVersion = '2.8.5'
|
||||
lifecycleRuntimeComposeVersion = '2.8.5'
|
||||
navigationVersion = '2.7.7'
|
||||
navigationComposeVersion = '2.7.7'
|
||||
navigationVersion = '2.8.0'
|
||||
navigationComposeVersion = '2.8.0'
|
||||
shimmerLayoutVersion = '0.5.0'
|
||||
photoViewVersion = '2.3.0'
|
||||
daggerVersion = '2.51'
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.anytypeio.anytype.payments.screens
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.Box
|
||||
|
@ -12,11 +11,10 @@ import androidx.compose.foundation.layout.height
|
|||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.foundation.text2.BasicTextField2
|
||||
import androidx.compose.foundation.text2.input.TextFieldLineLimits
|
||||
import androidx.compose.foundation.text2.input.TextFieldState
|
||||
import androidx.compose.foundation.text.input.TextFieldLineLimits
|
||||
import androidx.compose.foundation.text.input.TextFieldState
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
|
@ -43,7 +41,6 @@ import com.anytypeio.anytype.core_ui.views.Relations2
|
|||
import com.anytypeio.anytype.payments.R
|
||||
import com.anytypeio.anytype.payments.models.TierAnyName
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
fun AnyNameView(
|
||||
anyNameState: TierAnyName,
|
||||
|
@ -111,7 +108,7 @@ fun AnyNameView(
|
|||
color = colorResource(id = R.color.text_tertiary)
|
||||
)
|
||||
} else {
|
||||
BasicTextField2(
|
||||
BasicTextField(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.wrapContentHeight()
|
||||
|
@ -126,7 +123,7 @@ fun AnyNameView(
|
|||
keyboardOptions = KeyboardOptions.Default.copy(
|
||||
imeAction = ImeAction.Done,
|
||||
),
|
||||
keyboardActions = KeyboardActions {
|
||||
onKeyboardAction = {
|
||||
keyboardController?.hide()
|
||||
focusManager.clearFocus()
|
||||
},
|
||||
|
|
|
@ -11,11 +11,10 @@ import androidx.compose.foundation.layout.height
|
|||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.foundation.text2.BasicTextField2
|
||||
import androidx.compose.foundation.text2.input.TextFieldLineLimits
|
||||
import androidx.compose.foundation.text2.input.TextFieldState
|
||||
import androidx.compose.foundation.text.input.TextFieldLineLimits
|
||||
import androidx.compose.foundation.text.input.TextFieldState
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
|
@ -91,7 +90,7 @@ fun MembershipEmailScreen(
|
|||
)
|
||||
Spacer(modifier = Modifier.height(26.dp))
|
||||
Box(modifier = Modifier) {
|
||||
BasicTextField2(
|
||||
BasicTextField(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.wrapContentHeight()
|
||||
|
@ -106,7 +105,7 @@ fun MembershipEmailScreen(
|
|||
keyboardOptions = KeyboardOptions.Default.copy(
|
||||
imeAction = ImeAction.Done,
|
||||
),
|
||||
keyboardActions = KeyboardActions {
|
||||
onKeyboardAction = {
|
||||
keyboardController?.hide()
|
||||
focusManager.clearFocus()
|
||||
},
|
||||
|
|
|
@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.wrapContentSize
|
|||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.ClickableText
|
||||
import androidx.compose.foundation.text2.input.TextFieldState
|
||||
import androidx.compose.foundation.text.input.TextFieldState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
|
@ -36,7 +36,11 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.text.withStyle
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.EXPLORER_ID
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.PRIVACY_POLICY
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.TERMS_OF_SERVICE
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipPaymentMethod
|
||||
import com.anytypeio.anytype.core_models.membership.TierId
|
||||
import com.anytypeio.anytype.core_ui.views.BodyCallout
|
||||
import com.anytypeio.anytype.core_ui.views.ButtonPrimary
|
||||
import com.anytypeio.anytype.core_ui.views.ButtonSecondary
|
||||
|
@ -44,18 +48,14 @@ import com.anytypeio.anytype.core_ui.views.ButtonSize
|
|||
import com.anytypeio.anytype.core_ui.views.HeadlineTitle
|
||||
import com.anytypeio.anytype.core_ui.views.Relations2
|
||||
import com.anytypeio.anytype.payments.R
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.EXPLORER_ID
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.PRIVACY_POLICY
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.TERMS_OF_SERVICE
|
||||
import com.anytypeio.anytype.payments.models.Tier
|
||||
import com.anytypeio.anytype.payments.models.TierAnyName
|
||||
import com.anytypeio.anytype.payments.models.TierButton
|
||||
import com.anytypeio.anytype.payments.models.TierConditionInfo
|
||||
import com.anytypeio.anytype.payments.models.TierEmail
|
||||
import com.anytypeio.anytype.payments.models.TierPeriod
|
||||
import com.anytypeio.anytype.payments.models.Tier
|
||||
import com.anytypeio.anytype.payments.viewmodel.MembershipTierState
|
||||
import com.anytypeio.anytype.payments.viewmodel.TierAction
|
||||
import com.anytypeio.anytype.core_models.membership.TierId
|
||||
import timber.log.Timber
|
||||
|
||||
|
||||
|
|
|
@ -30,19 +30,19 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipPaymentMethod
|
||||
import com.anytypeio.anytype.core_models.membership.TierId
|
||||
import com.anytypeio.anytype.core_ui.views.BodyRegular
|
||||
import com.anytypeio.anytype.core_ui.views.ButtonSecondary
|
||||
import com.anytypeio.anytype.core_ui.views.ButtonSize
|
||||
import com.anytypeio.anytype.core_ui.views.HeadlineHeading
|
||||
import com.anytypeio.anytype.payments.R
|
||||
import com.anytypeio.anytype.payments.models.Tier
|
||||
import com.anytypeio.anytype.payments.models.TierAnyName
|
||||
import com.anytypeio.anytype.payments.models.TierButton
|
||||
import com.anytypeio.anytype.payments.models.TierConditionInfo
|
||||
import com.anytypeio.anytype.payments.models.TierEmail
|
||||
import com.anytypeio.anytype.payments.models.TierPeriod
|
||||
import com.anytypeio.anytype.payments.models.Tier
|
||||
import com.anytypeio.anytype.payments.viewmodel.WelcomeState
|
||||
import com.anytypeio.anytype.core_models.membership.TierId
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
|
@ -68,7 +68,9 @@ fun WelcomeScreen(state: WelcomeState, onDismiss: () -> Unit) {
|
|||
},
|
||||
shape = RoundedCornerShape(16.dp),
|
||||
dragHandle = null,
|
||||
windowInsets = WindowInsets(0, 0, 0, 0)
|
||||
contentWindowInsets = {
|
||||
WindowInsets(0, 0, 0, 0)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package com.anytypeio.anytype.payments.viewmodel
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.text2.input.TextFieldState
|
||||
import androidx.compose.foundation.text2.input.clearText
|
||||
import androidx.compose.foundation.text2.input.textAsFlow
|
||||
import androidx.compose.foundation.text.input.TextFieldState
|
||||
import androidx.compose.foundation.text.input.clearText
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.android.billingclient.api.BillingFlowParams
|
||||
|
@ -11,8 +11,13 @@ import com.android.billingclient.api.ProductDetails
|
|||
import com.anytypeio.anytype.analytics.base.Analytics
|
||||
import com.anytypeio.anytype.analytics.base.EventsDictionary
|
||||
import com.anytypeio.anytype.core_models.membership.EmailVerificationStatus
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.EXPLORER_ID
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.MEMBERSHIP_NAME_MIN_LENGTH
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.NONE_ID
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipErrors
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipPaymentMethod
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipStatus
|
||||
import com.anytypeio.anytype.core_models.membership.TierId
|
||||
import com.anytypeio.anytype.domain.auth.interactor.GetAccount
|
||||
import com.anytypeio.anytype.domain.base.fold
|
||||
import com.anytypeio.anytype.domain.payments.GetMembershipEmailStatus
|
||||
|
@ -20,23 +25,18 @@ import com.anytypeio.anytype.domain.payments.GetMembershipPaymentUrl
|
|||
import com.anytypeio.anytype.domain.payments.IsMembershipNameValid
|
||||
import com.anytypeio.anytype.domain.payments.SetMembershipEmail
|
||||
import com.anytypeio.anytype.domain.payments.VerifyMembershipEmailCode
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.EXPLORER_ID
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.MEMBERSHIP_NAME_MIN_LENGTH
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipConstants.NONE_ID
|
||||
import com.anytypeio.anytype.payments.mapping.toMainView
|
||||
import com.anytypeio.anytype.payments.models.MembershipPurchase
|
||||
import com.anytypeio.anytype.payments.models.Tier
|
||||
import com.anytypeio.anytype.payments.models.TierAnyName
|
||||
import com.anytypeio.anytype.payments.models.TierButton
|
||||
import com.anytypeio.anytype.payments.models.TierEmail
|
||||
import com.anytypeio.anytype.payments.models.Tier
|
||||
import com.anytypeio.anytype.payments.playbilling.BillingClientLifecycle
|
||||
import com.anytypeio.anytype.payments.playbilling.BillingClientState
|
||||
import com.anytypeio.anytype.payments.playbilling.BillingPurchaseState
|
||||
import com.anytypeio.anytype.presentation.extension.sendAnalyticsMembershipClickEvent
|
||||
import com.anytypeio.anytype.presentation.extension.sendAnalyticsMembershipPurchaseEvent
|
||||
import com.anytypeio.anytype.presentation.extension.sendAnalyticsMembershipScreenEvent
|
||||
import com.anytypeio.anytype.core_models.membership.MembershipStatus
|
||||
import com.anytypeio.anytype.core_models.membership.TierId
|
||||
import com.anytypeio.anytype.presentation.membership.provider.MembershipProvider
|
||||
import kotlinx.coroutines.FlowPreview
|
||||
import kotlinx.coroutines.Job
|
||||
|
@ -91,10 +91,8 @@ class MembershipViewModel(
|
|||
|
||||
val initBillingClient = MutableStateFlow(false)
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
val anyNameState = TextFieldState(initialText = "")
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
val anyEmailState = TextFieldState(initialText = "")
|
||||
|
||||
init {
|
||||
|
@ -133,13 +131,15 @@ class MembershipViewModel(
|
|||
viewState.value = newState
|
||||
}
|
||||
}
|
||||
|
||||
viewModelScope.launch {
|
||||
anyNameState.textAsFlow()
|
||||
snapshotFlow { anyNameState.text }
|
||||
.debounce(NAME_VALIDATION_DELAY)
|
||||
.collectLatest {
|
||||
proceedWithValidatingName(it.toString())
|
||||
}
|
||||
}
|
||||
|
||||
viewModelScope.launch {
|
||||
billingPurchases.collectLatest { billingPurchaseState ->
|
||||
checkPurchaseStatus(billingPurchaseState)
|
||||
|
|
|
@ -1,10 +1,17 @@
|
|||
package com.anytypeio.anytype.ui_settings.space
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.CornerSize
|
||||
import androidx.compose.material.ExperimentalMaterialApi
|
||||
import androidx.compose.material.LocalRippleConfiguration
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.ripple.LocalRippleTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.getValue
|
||||
|
@ -20,10 +27,10 @@ import androidx.compose.ui.res.colorResource
|
|||
import androidx.compose.ui.unit.IntSize
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.times
|
||||
import com.anytypeio.anytype.core_ui.views.NoRippleTheme
|
||||
import com.anytypeio.anytype.presentation.settings.SpacesStorageViewModel
|
||||
import com.anytypeio.anytype.ui_settings.R
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
@Composable
|
||||
fun SegmentLine(items: List<SpacesStorageViewModel.SegmentLineItem>) {
|
||||
var size by remember { mutableStateOf(IntSize.Zero) }
|
||||
|
@ -33,7 +40,7 @@ fun SegmentLine(items: List<SpacesStorageViewModel.SegmentLineItem>) {
|
|||
.fillMaxWidth()
|
||||
.onSizeChanged { size = it }
|
||||
) {
|
||||
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
|
||||
CompositionLocalProvider(LocalRippleConfiguration provides null) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue