Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit

Permalink
[Android] Refactor credential management (#108)
Browse files Browse the repository at this point in the history
This updates the way we implement the credential displayer and includes some status lists changes.
  • Loading branch information
Juliano1612 authored Feb 6, 2025
1 parent 1d92bed commit bf841b1
Show file tree
Hide file tree
Showing 17 changed files with 1,000 additions and 1,203 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package com.spruceid.mobilesdkexample.credentials

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
Expand All @@ -19,9 +15,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavHostController
import com.spruceid.mobile.sdk.CredentialPack
import com.spruceid.mobilesdkexample.ErrorView
Expand All @@ -30,7 +24,6 @@ import com.spruceid.mobilesdkexample.db.WalletActivityLogs
import com.spruceid.mobilesdkexample.navigation.Screen
import com.spruceid.mobilesdkexample.ui.theme.ColorEmerald700
import com.spruceid.mobilesdkexample.ui.theme.ColorRose600
import com.spruceid.mobilesdkexample.ui.theme.ColorStone950
import com.spruceid.mobilesdkexample.ui.theme.Inter
import com.spruceid.mobilesdkexample.utils.credentialDisplaySelector
import com.spruceid.mobilesdkexample.utils.getCredentialIdTitleAndIssuer
Expand All @@ -57,7 +50,8 @@ fun AddToWalletView(
val scope = rememberCoroutineScope()

LaunchedEffect(Unit) {
credentialItem = credentialDisplaySelector(rawCredential, statusListViewModel, null, null)
credentialItem =
credentialDisplaySelector(rawCredential, statusListViewModel, null, null, null)
}

fun back() {
Expand Down Expand Up @@ -113,34 +107,7 @@ fun AddToWalletView(
loadingText = "Storing credential..."
)
} else if (credentialItem != null) {
Column(
Modifier
.padding(all = 20.dp)
.padding(top = 20.dp)
.navigationBarsPadding(),
) {
Text(
text = "Review Info",
textAlign = TextAlign.Center,
fontFamily = Inter,
fontWeight = FontWeight.Bold,
fontSize = 24.sp,
color = ColorStone950,
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 20.dp),
)

credentialItem!!.credentialListItem()

Column(
Modifier
.fillMaxSize()
.weight(weight = 1f, fill = false)
) {
credentialItem!!.credentialDetails()
}

credentialItem!!.credentialReviewInfo(footerActions = {
Button(
onClick = {
saveCredential()
Expand Down Expand Up @@ -180,7 +147,6 @@ fun AddToWalletView(
color = ColorRose600,
)
}
}
})
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package com.spruceid.mobilesdkexample.credentials

import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.HorizontalDivider
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.draw.scale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.spruceid.mobile.sdk.CredentialPack
import com.spruceid.mobile.sdk.CredentialStatusList
import com.spruceid.mobilesdkexample.R
import com.spruceid.mobilesdkexample.navigation.Screen
import com.spruceid.mobilesdkexample.utils.credentialDisplaySelector
import com.spruceid.mobilesdkexample.viewmodels.CredentialPacksViewModel
import com.spruceid.mobilesdkexample.viewmodels.StatusListViewModel
import java.util.UUID

@Composable
fun CredentialDetailsView(
navController: NavController,
credentialPacksViewModel: CredentialPacksViewModel,
statusListViewModel: StatusListViewModel,
credentialPackId: String
) {
var credentialItem by remember { mutableStateOf<ICredentialView?>(null) }
var credentialPack by remember { mutableStateOf<CredentialPack?>(null) }
val statusList by statusListViewModel.observeStatusForId(UUID.fromString(credentialPackId))
.collectAsState()

LaunchedEffect(Unit) {
credentialPack = credentialPacksViewModel.getById(credentialPackId) ?: CredentialPack()
credentialItem = credentialDisplaySelector(
credentialPack!!,
statusListViewModel,
null,
null,
null
)
statusListViewModel.fetchAndUpdateStatus(credentialPack!!)
}

fun back() {
navController.navigate(Screen.HomeScreen.route) {
popUpTo(0)
}
}

credentialItem?.let {
Column(
Modifier
.padding(all = 20.dp)
.padding(top = 20.dp)
) {
Row(verticalAlignment = Alignment.CenterVertically) {
Image(
painter = painterResource(id = R.drawable.chevron),
contentDescription = stringResource(id = R.string.chevron),
modifier = Modifier
.scale(0.75f)
.rotate(180f)
.padding(start = 10.dp)
.clickable {
back()
}
)
it.credentialListItem()
}
HorizontalDivider(modifier = Modifier.padding(vertical = 16.dp))
if (statusList != CredentialStatusList.REVOKED) {
credentialItem!!.credentialDetails()
} else {
credentialItem!!.credentialRevokedInfo({
back()
})
}
}
}

}
Loading

0 comments on commit bf841b1

Please sign in to comment.