mobile-wallet/cmp-android/src/main/kotlin/org/mifospay/MainActivity.kt
Hekmatullah fd3fc4c302
chore: rename mifospay-* modules to cmp-* (#1893)
Co-authored-by: Sk Niyaj Ali <niyaj639@gmail.com>
2025-07-28 12:03:45 +05:30

82 lines
2.7 KiB
Kotlin

/*
* Copyright 2024 Mifos Initiative
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*
* See https://github.com/openMF/mobile-wallet/blob/master/LICENSE.md
*/
package org.mifospay
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.core.view.WindowCompat
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import io.github.vinceglb.filekit.FileKit
import io.github.vinceglb.filekit.dialogs.init
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.mifospay.core.data.util.NetworkMonitor
import org.mifospay.core.data.util.TimeZoneMonitor
import org.mifospay.core.ui.utils.ShareUtils
import org.mifospay.shared.MainUiState
import org.mifospay.shared.MifosPaySharedApp
import org.mifospay.shared.MifosPayViewModel
class MainActivity : ComponentActivity() {
private val networkMonitor: NetworkMonitor by inject()
private val timeZoneMonitor: TimeZoneMonitor by inject()
private val viewModel: MifosPayViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val splashScreen = installSplashScreen()
WindowCompat.setDecorFitsSystemWindows(window, false)
enableEdgeToEdge()
// Initialize FileKit
FileKit.init(this)
var uiState: MainUiState by mutableStateOf(MainUiState.Loading)
// Update the uiState
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.uiState
.onEach { uiState = it }
.collect()
}
}
splashScreen.setKeepOnScreenCondition {
when (uiState) {
MainUiState.Loading -> true
is MainUiState.Success -> false
}
}
ShareUtils.setActivityProvider { return@setActivityProvider this }
setContent {
MifosPaySharedApp(
networkMonitor = networkMonitor,
timeZoneMonitor = timeZoneMonitor,
)
}
}
}