Files
android-expense-tracker/app/src/main/java/com/hyperling/expensetracker/MainActivity.kt

66 lines
1.9 KiB
Kotlin

package com.hyperling.expensetracker
import com.hyperling.expensetracker.ui.theme.ExpenseTrackerTheme
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.room.Room
import androidx.compose.material3.Surface
class MainActivity : ComponentActivity() {
private val _db by lazy {
Room.databaseBuilder(
applicationContext,
ExpenseDatabase::class.java,
"expenses.db"
).build()
}
private val _viewModel by viewModels<ExpenseViewModel> (
factoryProducer = {
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return ExpenseViewModel(_db.dao) as T
}
}
}
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
ExpenseTrackerTheme {
val state by _viewModel.state.collectAsState()
ExpenseScreen(
state = state,
onEvent = _viewModel::onEvent
)
}
}
}
}
/*
@Preview(showBackground = true)
@Composable
fun MainPreview() {
ExpenseTrackerTheme {
Main()
}
}
*/