Skip to content

Commit

Permalink
Token added functionality,balance and price of all tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
sajalbnl1 committed Oct 26, 2024
1 parent 3c8ad17 commit ae6e895
Show file tree
Hide file tree
Showing 8 changed files with 153 additions and 63 deletions.
3 changes: 3 additions & 0 deletions wallet_app/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ dependencies {
implementation(libs.androidx.hilt.navigation.fragment)
implementation (libs.androidx.hilt.navigation.compose.v100alpha03)

implementation("androidx.room:room-runtime:2.6.1")
kapt("androidx.room:room-compiler:2.6.1")
implementation("androidx.room:room-ktx:2.6.1")

implementation(libs.androidx.ui.tooling.preview)
debugImplementation(libs.androidx.ui.tooling)
Expand Down
1 change: 1 addition & 0 deletions wallet_app/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<uses-permission android:name="android.permission.INTERNET" />

<application
android:name=".WalletAppApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
Expand Down
13 changes: 10 additions & 3 deletions wallet_app/app/src/main/java/com/example/walletapp/model/Token.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package com.example.walletapp.model

class Token (
val address: String,
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.swmansion.starknet.data.types.Felt

@Entity(tableName = "token_table")
data class Token(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val contactAddress: Felt,
val name: String,
val symbol: String,
val name: String
val decimals: Int
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.core.view.WindowCompat
import androidx.lifecycle.ViewModelProvider
import com.example.walletapp.BuildConfig
import com.example.walletapp.WalletAppApplication
import com.example.walletapp.ui.account.TokenRepository
import com.example.walletapp.ui.account.TokenViewModel
import com.example.walletapp.utils.StarknetClient

class MainActivity : ComponentActivity() {
Expand All @@ -23,10 +27,16 @@ class MainActivity : ComponentActivity() {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Access the database instance
val database = (application as WalletAppApplication).database
val repository = TokenRepository(database.tokenDao())
val tokenViewModel: TokenViewModel = ViewModelProvider(
this, TokenViewModel.Factory(application,repository)
).get(TokenViewModel::class.java)
enableEdgeToEdge()
WindowCompat.setDecorFitsSystemWindows(window, true)
setContent {
WalletApp()
WalletApp(tokenViewModel)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.example.walletapp.ui.account.AddTokenScreen
import com.example.walletapp.ui.account.TokenViewModel
import com.example.walletapp.ui.account.WalletScreen
import com.example.walletapp.ui.activity.FinalizeAccountCreationScreen
import com.example.walletapp.ui.onboarding.CreateAccountScreen
Expand Down Expand Up @@ -42,7 +43,7 @@ object Send
object Receive

@Composable
fun WalletApp() {
fun WalletApp(tokenViewModel: TokenViewModel) {
WalletappTheme {

// TODO(#109): get this information from a data store
Expand Down Expand Up @@ -90,11 +91,13 @@ fun WalletApp() {
WalletScreen(
onNewTokenPress = { navController.navigate( route = AddToken ) },
onReceivePress = { navController.navigate( route = Receive ) },
onSendPress = { navController.navigate( route = Send ) }
onSendPress = { navController.navigate( route = Send ) },
tokenViewModel = tokenViewModel
)
}
composable<AddToken> {
AddTokenScreen(
tokenViewModel=tokenViewModel,
onConfirm = { navController.navigateUp() }
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.example.walletapp.ui.account

import android.app.Activity
import android.widget.Toast
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
Expand All @@ -22,20 +24,24 @@ import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.graphics.toColorInt
import com.example.walletapp.R
import com.example.walletapp.model.Token
import com.swmansion.starknet.data.types.Felt

@Composable
fun AddTokenScreen(onConfirm: () -> Unit) {
fun AddTokenScreen(tokenViewModel:TokenViewModel,onConfirm: () -> Unit) {
Surface(modifier = Modifier.fillMaxSize()) {
val contactAddress = rememberSaveable { mutableStateOf("") }
val name = rememberSaveable { mutableStateOf("") }
val symbol = rememberSaveable { mutableStateOf("") }
val decimals = rememberSaveable { mutableStateOf("") }
val context = (LocalContext.current as Activity)

Column(
modifier = Modifier
Expand Down Expand Up @@ -92,7 +98,36 @@ fun AddTokenScreen(onConfirm: () -> Unit) {

// TODO: handle saving the token data
Button(
onClick = onConfirm,
onClick = {
val decimalValue = decimals.value.toIntOrNull()
val addressPattern = Regex("^0x[a-fA-F0-9]{64}$")
if (!addressPattern.matches(contactAddress.value)) {
Toast.makeText(context, "Please enter a valid address", Toast.LENGTH_LONG).show()
}
else if (name.value.isEmpty()) {
Toast.makeText(context, "Please enter name", Toast.LENGTH_LONG)
.show()
}
else if (symbol.value.isEmpty()) {
Toast.makeText(context, "Please enter symbol", Toast.LENGTH_LONG)
.show()
} else if (decimalValue == null || decimalValue !in 0..18) {
Toast.makeText(context, "Please enter valid decimal", Toast.LENGTH_LONG)
.show()
}else{
onConfirm()
// Save data to local storage here
val address=Felt.fromHex(contactAddress.value)
val newToken = Token(
contactAddress = address,
name = name.value,
symbol = symbol.value,
decimals = decimalValue
)
tokenViewModel.insertToken(newToken) // Insert the new token
Toast.makeText(context, "Token added!", Toast.LENGTH_LONG).show()
}
},
colors = ButtonDefaults.buttonColors(backgroundColor = Color("#1B1B76".toColorInt())),
modifier = Modifier
.fillMaxWidth()
Expand Down Expand Up @@ -135,10 +170,11 @@ fun SimpleTextField(
shape = RoundedCornerShape(15.dp),
modifier = Modifier.fillMaxWidth(),
textStyle = TextStyle(
color = Color.Black,
color = Color.White,
fontSize = 16.sp
)
)
}
}


Loading

0 comments on commit ae6e895

Please sign in to comment.