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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ui/src/main/java/io/snabble/sdk/ui/payment/Payone.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ import io.snabble.sdk.utils.Dispatch
import io.snabble.sdk.utils.Logger
import io.snabble.sdk.utils.SimpleJsonCallback
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable
import okhttp3.Callback
import okhttp3.Request

object Payone {

@Serializable
@Parcelize
data class PayoneTokenizationData(
val merchantID: String,
Expand All @@ -31,12 +33,14 @@ object Payone {
val links: Map<String, Link>
) : Parcelable

@Serializable
@Parcelize
data class PreAuthInfo(
val amount: Int?,
val currency: String?
) : Parcelable

@Serializable
@Parcelize
data class Link(
val href: String?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,81 +2,28 @@ package io.snabble.sdk.ui.payment.externalbilling

import android.os.Bundle
import android.view.View
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.res.stringResource
import androidx.core.os.bundleOf
import androidx.fragment.app.viewModels
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import io.snabble.sdk.config.ProjectId
import io.snabble.sdk.ui.BaseFragment
import io.snabble.sdk.ui.R
import io.snabble.sdk.ui.SnabbleUI
import io.snabble.sdk.ui.payment.externalbilling.ui.ExternalBillingLoginScreen
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.Error
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.ExternalBillingViewModel
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.Processing
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.Success
import io.snabble.sdk.ui.utils.ThemeWrapper

open class ExternalBillingFragment : BaseFragment(
layoutResId = R.layout.snabble_fragment_external_billing,
waitForProject = false,
) {

private val viewModel: ExternalBillingViewModel by viewModels()

override fun onActualViewCreated(view: View, savedInstanceState: Bundle?) {
super.onActualViewCreated(view, savedInstanceState)

view.findViewById<ComposeView>(R.id.external_billing_compose_view).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)

val projectId: String? = arguments?.getString(ARG_PROJECT_ID)
val projectId: ProjectId? = arguments?.getString(ARG_PROJECT_ID)?.let(::ProjectId)

setContent {
val state = viewModel.uiState.collectAsStateWithLifecycle()
val errorMessage = remember {
mutableStateOf("")
}

when (val it = state.value) {
is Error -> {
if (it.message == "400" || it.message == "null") {
errorMessage.value =
stringResource(id = R.string.Snabble_Payment_ExternalBilling_Error_badRequest)
} else {
errorMessage.value =
stringResource(id = R.string.Snabble_Payment_ExternalBilling_Error_wrongCredentials)
}
}

Processing -> {
errorMessage.value = ""
}

Success -> {
SnabbleUI.executeAction(context, SnabbleUI.Event.GO_BACK)
}
}

val idDescriptor = stringResource(id = R.string.Snabble_Payment_ExternalBilling_username)

ThemeWrapper {
ExternalBillingLoginScreen(
onSaveClick = { username, password ->
projectId?.let {
viewModel.login(idDescriptor, username, password, it)
}
},
isInputValid = false,
errorMessage = errorMessage.value,
onFocusChanged = {
if (state.value != Processing) viewModel.typing()
}
)
}
PaymentExternalBillingScreen(projectId = projectId)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package io.snabble.sdk.ui.payment.externalbilling

import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import io.snabble.sdk.config.ProjectId
import io.snabble.sdk.ui.R
import io.snabble.sdk.ui.SnabbleUI
import io.snabble.sdk.ui.payment.externalbilling.ui.ExternalBillingLoginScreen
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.Error
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.ExternalBillingViewModel
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.Processing
import io.snabble.sdk.ui.payment.externalbilling.viewmodel.Success
import io.snabble.sdk.ui.utils.ThemeWrapper

@Composable
fun PaymentExternalBillingScreen(
modifier: Modifier = Modifier,
projectId: ProjectId?,
viewModel: ExternalBillingViewModel = viewModel()
) {
val state = viewModel.uiState.collectAsStateWithLifecycle()
val errorMessage = remember {
mutableStateOf("")
}

when (val it = state.value) {
is Error -> {
if (it.message == "400" || it.message == "null") {
errorMessage.value =
stringResource(id = R.string.Snabble_Payment_ExternalBilling_Error_badRequest)
} else {
errorMessage.value =
stringResource(id = R.string.Snabble_Payment_ExternalBilling_Error_wrongCredentials)
}
}

Processing -> {
errorMessage.value = ""
}

Success -> {
SnabbleUI.executeAction(LocalContext.current, SnabbleUI.Event.GO_BACK)
}
}

val idDescriptor = stringResource(id = R.string.Snabble_Payment_ExternalBilling_username)

ThemeWrapper {
ExternalBillingLoginScreen(
onSaveClick = { username, password ->
projectId?.let {
viewModel.login(idDescriptor, username, password, it.id)
}
},
isInputValid = false,
errorMessage = errorMessage.value,
onFocusChanged = {
if (state.value != Processing) viewModel.typing()
}
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
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
Expand All @@ -29,9 +28,8 @@ import io.snabble.sdk.ui.R
import io.snabble.sdk.ui.payment.externalbilling.ui.widgets.PasswordField
import io.snabble.sdk.ui.payment.payone.sepa.form.ui.widget.TextFieldWidget

@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun ExternalBillingLoginScreen(
internal fun ExternalBillingLoginScreen(
onSaveClick: (username: String, password: String) -> Unit,
onFocusChanged: () -> Unit,
isInputValid: Boolean,
Expand Down