mirror of
https://github.com/imcarlost/Acronyms.git
synced 2026-04-10 02:46:53 -04:00
Add: Main app, main activity and navigation handling
This commit is contained in:
32
app/src/main/java/dev/carlos/acronyms/MainApplication.kt
Normal file
32
app/src/main/java/dev/carlos/acronyms/MainApplication.kt
Normal file
@@ -0,0 +1,32 @@
|
||||
package dev.carlos.acronyms
|
||||
|
||||
import android.app.Application
|
||||
import dev.carlos.acronyms.di.appModules
|
||||
import org.koin.android.ext.koin.androidContext
|
||||
import org.koin.core.context.startKoin
|
||||
import timber.log.Timber
|
||||
|
||||
@Suppress("unused")
|
||||
class MainApplication : Application() {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
setupLogger()
|
||||
setupDi()
|
||||
}
|
||||
|
||||
private fun setupLogger() {
|
||||
Timber.plant(Timber.DebugTree())
|
||||
}
|
||||
|
||||
private fun setupDi() {
|
||||
startKoin {
|
||||
androidContext(this@MainApplication)
|
||||
|
||||
modules(
|
||||
listOf(
|
||||
appModules
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
17
app/src/main/java/dev/carlos/acronyms/di/AppModules.kt
Normal file
17
app/src/main/java/dev/carlos/acronyms/di/AppModules.kt
Normal file
@@ -0,0 +1,17 @@
|
||||
package dev.carlos.acronyms.di
|
||||
|
||||
import dev.carlos.acronyms.BuildConfig
|
||||
import dev.carlos.acronyms.viewmodel.NavigationViewmodel
|
||||
import dev.carlos.core.domain.network.RemoteClient
|
||||
import dev.carlos.core.navigation.NavigationRouter
|
||||
import org.koin.androidx.viewmodel.dsl.viewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
val appModules = module {
|
||||
// Retrofit
|
||||
single { RemoteClient(BuildConfig.BASE_ENDPOINT) }
|
||||
|
||||
// Navigation
|
||||
single { NavigationRouter() }
|
||||
viewModel { NavigationViewmodel() }
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package dev.carlos.acronyms.viewmodel
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import dev.carlos.core.navigation.NavigationEvent
|
||||
|
||||
class NavigationViewmodel : ViewModel() {
|
||||
|
||||
val navigate = MutableLiveData<Pair<@IdRes Int, Bundle>>()
|
||||
|
||||
fun onNavigationEvent(event: NavigationEvent) {
|
||||
when (event) {
|
||||
else -> throw NoWhenBranchMatchedException("Undefined navigation event parent")
|
||||
}
|
||||
}
|
||||
}
|
||||
43
app/src/main/java/dev/carlos/acronyms/views/MainActivity.kt
Normal file
43
app/src/main/java/dev/carlos/acronyms/views/MainActivity.kt
Normal file
@@ -0,0 +1,43 @@
|
||||
package dev.carlos.acronyms.views
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.navigation.ui.NavigationUI
|
||||
import dev.carlos.acronyms.R
|
||||
import dev.carlos.acronyms.di.appModules
|
||||
import dev.carlos.acronyms.viewmodel.NavigationViewmodel
|
||||
import dev.carlos.core.extensions.findNavHostFragment
|
||||
import dev.carlos.core.extensions.observeNonNull
|
||||
import dev.carlos.core.navigation.NavigationRouter
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koin.android.ext.koin.androidContext
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import org.koin.core.context.startKoin
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private val navController by lazy { findNavController(R.id.main_fragment_container) }
|
||||
private val navRouter: NavigationRouter by inject()
|
||||
private val viewModel: NavigationViewmodel by viewModel()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
setupNavigation()
|
||||
}
|
||||
|
||||
private fun setupNavigation() {
|
||||
navController.setGraph(R.navigation.main_navigation)
|
||||
navRouter.setOnNavigationEvent {
|
||||
viewModel.onNavigationEvent(it)
|
||||
}
|
||||
viewModel.navigate.observeNonNull(this) { pair ->
|
||||
// Pair.first is a Navigation Id
|
||||
// Pair.second is a Bundle
|
||||
navController.navigate(pair.first, pair.second)
|
||||
}
|
||||
|
||||
NavigationUI.setupActionBarWithNavController(this, navController)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user