diff --git a/app/src/main/java/com/anytypeio/anytype/ui/library/LibraryScreen.kt b/app/src/main/java/com/anytypeio/anytype/ui/library/LibraryScreen.kt index c24413cb43..cb8778bd96 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/library/LibraryScreen.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/library/LibraryScreen.kt @@ -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)) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabs.kt b/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabs.kt index a736be32ce..1c72fd380e 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabs.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabs.kt @@ -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, diff --git a/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabsContent.kt b/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabsContent.kt index a54e704b1e..68a8931110 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabsContent.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabsContent.kt @@ -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, 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, diff --git a/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabsTheme.kt b/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabsTheme.kt deleted file mode 100644 index 42dfe8bbe2..0000000000 --- a/app/src/main/java/com/anytypeio/anytype/ui/library/views/LibraryTabsTheme.kt +++ /dev/null @@ -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) -} \ No newline at end of file diff --git a/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryList.kt b/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryList.kt index 879ea737ee..44329b5a51 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryList.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryList.kt @@ -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, @@ -28,7 +26,10 @@ fun LibraryListView( screenState: MutableState, 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) ) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabs.kt b/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabs.kt index e5ff53687d..2b590ae55d 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabs.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabs.kt @@ -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, diff --git a/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabsContent.kt b/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabsContent.kt index 4b73b374d9..d646ea6826 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabsContent.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/library/views/list/LibraryListTabsContent.kt @@ -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, diff --git a/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingMnemonicPhraseScreen.kt b/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingMnemonicPhraseScreen.kt index 4b2ba22458..f313929563 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingMnemonicPhraseScreen.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/onboarding/screens/signup/OnboardingMnemonicPhraseScreen.kt @@ -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 + ) ) } } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/history/VersionHistoryPreviewScreen.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/history/VersionHistoryPreviewScreen.kt index 981bd4cd9f..09a213e991 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/history/VersionHistoryPreviewScreen.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/history/VersionHistoryPreviewScreen.kt @@ -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( diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/ShareSpaceScreen.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/ShareSpaceScreen.kt index 22cc378964..8410d429d2 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/ShareSpaceScreen.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/features/multiplayer/ShareSpaceScreen.kt @@ -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( diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons.kt index 25967d8d98..7fe02319da 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons.kt @@ -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") diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons2.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons2.kt index a5b254da76..3e5e80a8e6 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons2.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/DesignSystemButtons2.kt @@ -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() diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/OnBoardingDesignSystemButtons.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/OnBoardingDesignSystemButtons.kt index 9c7fabbd3d..fc2ce7138c 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/OnBoardingDesignSystemButtons.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/views/OnBoardingDesignSystemButtons.kt @@ -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, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1c490bb5a2..e45159867c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -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' diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/screens/AnyNameView.kt b/payments/src/main/java/com/anytypeio/anytype/payments/screens/AnyNameView.kt index 856be5312f..fb414cac8a 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/screens/AnyNameView.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/screens/AnyNameView.kt @@ -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() }, diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/screens/EnterEmailView.kt b/payments/src/main/java/com/anytypeio/anytype/payments/screens/EnterEmailView.kt index b94b2baf55..08d286039a 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/screens/EnterEmailView.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/screens/EnterEmailView.kt @@ -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() }, diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt b/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt index 53671b0d97..4725bf4384 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/screens/TierScreen.kt @@ -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 diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/screens/WelcomeScreen.kt b/payments/src/main/java/com/anytypeio/anytype/payments/screens/WelcomeScreen.kt index ff0498baec..dd871e2ed9 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/screens/WelcomeScreen.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/screens/WelcomeScreen.kt @@ -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) + } ) } } diff --git a/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt b/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt index f7679913e0..f133b150b3 100644 --- a/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt +++ b/payments/src/main/java/com/anytypeio/anytype/payments/viewmodel/MembershipViewModel.kt @@ -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) diff --git a/ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/space/SegmentLine.kt b/ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/space/SegmentLine.kt index 01996eb0f1..7f6f7e6022 100644 --- a/ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/space/SegmentLine.kt +++ b/ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/space/SegmentLine.kt @@ -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) { var size by remember { mutableStateOf(IntSize.Zero) } @@ -33,7 +40,7 @@ fun SegmentLine(items: List) { .fillMaxWidth() .onSizeChanged { size = it } ) { - CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) { + CompositionLocalProvider(LocalRippleConfiguration provides null) { Row( modifier = Modifier .fillMaxWidth()