mirror of
https://github.com/pezkuwichain/pezkuwi-wallet-android.git
synced 2026-04-23 00:17:56 +00:00
Initial commit: Pezkuwi Wallet Android
Complete rebrand of Nova Wallet for Pezkuwichain ecosystem. ## Features - Full Pezkuwichain support (HEZ & PEZ tokens) - Polkadot ecosystem compatibility - Staking, Governance, DeFi, NFTs - XCM cross-chain transfers - Hardware wallet support (Ledger, Polkadot Vault) - WalletConnect v2 - Push notifications ## Languages - English, Turkish, Kurmanci (Kurdish), Spanish, French, German, Russian, Japanese, Chinese, Korean, Portuguese, Vietnamese Based on Nova Wallet by Novasama Technologies GmbH © Dijital Kurdistan Tech Institute 2026
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
package io.novafoundation.nova.splash
|
||||
|
||||
import io.novafoundation.nova.common.navigation.SecureRouter
|
||||
|
||||
interface SplashRouter : SecureRouter {
|
||||
|
||||
fun openWelcomeScreen()
|
||||
|
||||
fun openCreatePincode()
|
||||
|
||||
fun openInitialCheckPincode()
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package io.novafoundation.nova.splash.di
|
||||
|
||||
interface SplashFeatureApi
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
package io.novafoundation.nova.splash.di
|
||||
|
||||
import dagger.BindsInstance
|
||||
import dagger.Component
|
||||
import io.novafoundation.nova.common.di.CommonApi
|
||||
import io.novafoundation.nova.common.di.scope.FeatureScope
|
||||
import io.novafoundation.nova.feature_account_api.di.AccountFeatureApi
|
||||
import io.novafoundation.nova.feature_versions_api.di.VersionsFeatureApi
|
||||
import io.novafoundation.nova.splash.SplashRouter
|
||||
import io.novafoundation.nova.splash.presentation.di.SplashComponent
|
||||
|
||||
@Component(
|
||||
dependencies = [
|
||||
SplashFeatureDependencies::class
|
||||
],
|
||||
modules = [
|
||||
SplashFeatureModule::class
|
||||
]
|
||||
)
|
||||
@FeatureScope
|
||||
interface SplashFeatureComponent : SplashFeatureApi {
|
||||
|
||||
fun splashComponentFactory(): SplashComponent.Factory
|
||||
|
||||
@Component.Builder
|
||||
interface Builder {
|
||||
|
||||
@BindsInstance
|
||||
fun router(splashRouter: SplashRouter): Builder
|
||||
|
||||
fun withDependencies(deps: SplashFeatureDependencies): Builder
|
||||
|
||||
fun build(): SplashFeatureComponent
|
||||
}
|
||||
|
||||
@Component(
|
||||
dependencies = [
|
||||
CommonApi::class,
|
||||
AccountFeatureApi::class,
|
||||
VersionsFeatureApi::class
|
||||
]
|
||||
)
|
||||
interface SplashFeatureDependenciesComponent : SplashFeatureDependencies
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package io.novafoundation.nova.splash.di
|
||||
|
||||
import io.novafoundation.nova.common.utils.splash.SplashPassedObserver
|
||||
import io.novafoundation.nova.feature_account_api.domain.interfaces.AccountRepository
|
||||
import io.novafoundation.nova.feature_versions_api.domain.UpdateNotificationsInteractor
|
||||
|
||||
interface SplashFeatureDependencies {
|
||||
|
||||
val splashPassedObserver: SplashPassedObserver
|
||||
|
||||
fun accountRepository(): AccountRepository
|
||||
|
||||
fun updateNotificationsInteractor(): UpdateNotificationsInteractor
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package io.novafoundation.nova.splash.di
|
||||
|
||||
import io.novafoundation.nova.common.di.FeatureApiHolder
|
||||
import io.novafoundation.nova.common.di.FeatureContainer
|
||||
import io.novafoundation.nova.common.di.scope.ApplicationScope
|
||||
import io.novafoundation.nova.feature_account_api.di.AccountFeatureApi
|
||||
import io.novafoundation.nova.feature_versions_api.di.VersionsFeatureApi
|
||||
import io.novafoundation.nova.splash.SplashRouter
|
||||
import javax.inject.Inject
|
||||
|
||||
@ApplicationScope
|
||||
class SplashFeatureHolder @Inject constructor(
|
||||
featureContainer: FeatureContainer,
|
||||
private val splashRouter: SplashRouter
|
||||
) : FeatureApiHolder(featureContainer) {
|
||||
|
||||
override fun initializeDependencies(): Any {
|
||||
val splashFeatureDependencies = DaggerSplashFeatureComponent_SplashFeatureDependenciesComponent.builder()
|
||||
.commonApi(commonApi())
|
||||
.versionsFeatureApi(getFeature(VersionsFeatureApi::class.java))
|
||||
.accountFeatureApi(getFeature(AccountFeatureApi::class.java))
|
||||
.build()
|
||||
return DaggerSplashFeatureComponent.builder()
|
||||
.withDependencies(splashFeatureDependencies)
|
||||
.router(splashRouter)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package io.novafoundation.nova.splash.di
|
||||
|
||||
import dagger.Module
|
||||
|
||||
@Module
|
||||
class SplashFeatureModule
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package io.novafoundation.nova.splash.presentation
|
||||
|
||||
interface SplashBackgroundHolder {
|
||||
fun removeSplashBackground()
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package io.novafoundation.nova.splash.presentation
|
||||
|
||||
import io.novafoundation.nova.common.base.BaseFragment
|
||||
import io.novafoundation.nova.common.di.FeatureUtils
|
||||
import io.novafoundation.nova.splash.databinding.FragmentSplashBinding
|
||||
import io.novafoundation.nova.splash.di.SplashFeatureApi
|
||||
import io.novafoundation.nova.splash.di.SplashFeatureComponent
|
||||
import javax.inject.Inject
|
||||
|
||||
class SplashFragment : BaseFragment<SplashViewModel, FragmentSplashBinding>() {
|
||||
|
||||
override fun createBinding() = FragmentSplashBinding.inflate(layoutInflater)
|
||||
|
||||
@Inject lateinit var splashViewModel: SplashViewModel
|
||||
|
||||
override fun initViews() {
|
||||
}
|
||||
|
||||
override fun inject() {
|
||||
FeatureUtils.getFeature<SplashFeatureComponent>(this, SplashFeatureApi::class.java)
|
||||
.splashComponentFactory()
|
||||
.create(this)
|
||||
.inject(this)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
viewModel.openInitialDestination()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
|
||||
(activity as? SplashBackgroundHolder)?.removeSplashBackground()
|
||||
}
|
||||
|
||||
override fun subscribe(viewModel: SplashViewModel) {}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package io.novafoundation.nova.splash.presentation
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import io.novafoundation.nova.common.base.BaseViewModel
|
||||
import io.novafoundation.nova.common.utils.splash.SplashPassedObserver
|
||||
import io.novafoundation.nova.feature_account_api.domain.interfaces.AccountRepository
|
||||
import io.novafoundation.nova.splash.SplashRouter
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class SplashViewModel(
|
||||
private val router: SplashRouter,
|
||||
private val repository: AccountRepository,
|
||||
private val splashPassedObserver: SplashPassedObserver
|
||||
) : BaseViewModel() {
|
||||
|
||||
fun openInitialDestination() {
|
||||
viewModelScope.launch {
|
||||
if (repository.isAccountSelected()) {
|
||||
openPinCode()
|
||||
} else {
|
||||
openWelcomeScreen()
|
||||
}
|
||||
|
||||
splashPassedObserver.setSplashPassed()
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun openPinCode() {
|
||||
if (repository.isCodeSet()) {
|
||||
router.openInitialCheckPincode()
|
||||
} else {
|
||||
router.openCreatePincode()
|
||||
}
|
||||
}
|
||||
|
||||
private fun openWelcomeScreen() {
|
||||
router.openWelcomeScreen()
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
package io.novafoundation.nova.splash.presentation.di
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import dagger.BindsInstance
|
||||
import dagger.Subcomponent
|
||||
import io.novafoundation.nova.common.di.scope.ScreenScope
|
||||
import io.novafoundation.nova.splash.presentation.SplashFragment
|
||||
|
||||
@Subcomponent(
|
||||
modules = [
|
||||
SplashModule::class
|
||||
]
|
||||
)
|
||||
@ScreenScope
|
||||
interface SplashComponent {
|
||||
|
||||
@Subcomponent.Factory
|
||||
interface Factory {
|
||||
|
||||
fun create(
|
||||
@BindsInstance fragment: Fragment
|
||||
): SplashComponent
|
||||
}
|
||||
|
||||
fun inject(fragment: SplashFragment)
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package io.novafoundation.nova.splash.presentation.di
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.multibindings.IntoMap
|
||||
import io.novafoundation.nova.common.di.viewmodel.ViewModelKey
|
||||
import io.novafoundation.nova.common.di.viewmodel.ViewModelModule
|
||||
import io.novafoundation.nova.common.utils.splash.SplashPassedObserver
|
||||
import io.novafoundation.nova.feature_account_api.domain.interfaces.AccountRepository
|
||||
import io.novafoundation.nova.splash.SplashRouter
|
||||
import io.novafoundation.nova.splash.presentation.SplashViewModel
|
||||
|
||||
@Module(includes = [ViewModelModule::class])
|
||||
class SplashModule {
|
||||
|
||||
@Provides
|
||||
internal fun provideScannerViewModel(fragment: Fragment, factory: ViewModelProvider.Factory): SplashViewModel {
|
||||
return ViewModelProvider(fragment, factory).get(SplashViewModel::class.java)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@IntoMap
|
||||
@ViewModelKey(SplashViewModel::class)
|
||||
fun provideSignInViewModel(
|
||||
accountRepository: AccountRepository,
|
||||
router: SplashRouter,
|
||||
splashPassedObserver: SplashPassedObserver
|
||||
): ViewModel {
|
||||
return SplashViewModel(router, accountRepository, splashPassedObserver)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user