1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-2274 Payments | Module + integration (#960)

This commit is contained in:
Konstantin Ivanov 2024-03-04 14:44:16 +01:00 committed by GitHub
parent 5c0c4f048b
commit 47e6696694
Signed by: github
GPG key ID: B5690EEEBB952194
17 changed files with 381 additions and 57 deletions

57
payments/build.gradle Normal file
View file

@ -0,0 +1,57 @@
plugins {
id "com.android.library"
id "kotlin-android"
}
android {
def config = rootProject.extensions.getByName("ext")
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion libs.versions.composeKotlinCompilerVersion.get()
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlin {
jvmToolchain(17)
}
namespace 'com.anytypeio.anytype.peyments'
}
dependencies {
implementation project(':domain')
implementation project(':core-ui')
implementation project(':analytics')
implementation project(':core-models')
implementation project(':core-utils')
implementation project(':localization')
implementation project(':presentation')
implementation project(':library-emojifier')
compileOnly libs.javaxInject
implementation libs.lifecycleViewModel
implementation libs.lifecycleRuntime
implementation libs.appcompat
implementation libs.compose
implementation libs.composeFoundation
implementation libs.composeMaterial
implementation libs.composeToolingPreview
implementation libs.coilCompose
debugImplementation libs.composeTooling
implementation libs.timber
testImplementation libs.junit
testImplementation libs.kotlinTest
}

View file

@ -0,0 +1 @@
<manifest />

View file

@ -0,0 +1,76 @@
package com.anytypeio.anytype.screens
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.rememberNestedScrollInteropConnection
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.foundation.Dragger
import com.anytypeio.anytype.core_ui.views.Title1
import com.anytypeio.anytype.viewmodel.PaymentsState
@Composable
fun MainPaymentsScreen(state: PaymentsState) {
Box(
modifier = Modifier
.nestedScroll(rememberNestedScrollInteropConnection())
.fillMaxWidth()
.wrapContentHeight()
.background(
color = colorResource(id = R.color.background_secondary),
shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp)
),
) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(bottom = 20.dp)
) {
Header(state = state)
}
}
}
@Composable
private fun Header(state: PaymentsState) {
// Dragger at the top, centered
Box(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 6.dp)
) {
Dragger(modifier = Modifier.align(Alignment.Center))
}
// Main content box
Box(
modifier = Modifier
.fillMaxWidth()
.wrapContentHeight()
.verticalScroll(rememberScrollState())
) {
Text(
modifier = Modifier.fillMaxWidth(),
text = "Let's build together",
color = colorResource(id = R.color.text_primary),
style = Title1,
textAlign = TextAlign.Center
)
}
}

View file

@ -0,0 +1,7 @@
package com.anytypeio.anytype.viewmodel
sealed class PaymentsState {
object Loading : PaymentsState()
object Error : PaymentsState()
object Success : PaymentsState()
}

View file

@ -0,0 +1,22 @@
package com.anytypeio.anytype.viewmodel
import androidx.lifecycle.ViewModel
import com.anytypeio.anytype.analytics.base.Analytics
import kotlinx.coroutines.flow.MutableStateFlow
import timber.log.Timber
class PaymentsViewModel(
private val analytics: Analytics,
) : ViewModel() {
val viewState = MutableStateFlow<PaymentsState>(PaymentsState.Loading)
init {
Timber.d("PaymentsViewModel created")
}
interface PaymentsNavigation {
object MembershipMain : PaymentsNavigation
object MembershipLevel : PaymentsNavigation
}
}

View file

@ -0,0 +1,17 @@
package com.anytypeio.anytype.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.anytypeio.anytype.analytics.base.Analytics
import javax.inject.Inject
class PaymentsViewModelFactory @Inject constructor(
private val analytics: Analytics,
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return PaymentsViewModel(
analytics = analytics,
) as T
}
}