diff --git a/android/app/build.gradle b/android/app/build.gradle index 5761f77e3..d0a13bbe6 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -85,7 +85,7 @@ android { buildConfigField "String", "BUGFENDER_KEY", "\"76DAzZtiLE5AYx7uvIWD8I16EqgReOHc\"" buildConfigField "String", "INTERCOM_API_KEY", "\"android_sdk-e480f3fce4f2572742b13c282c453171c1715516\"" buildConfigField "String", "INTERCOM_APP_ID", "\"h7hlm9on\"" - buildConfigField "String", "NODE_VERSION", "\"0.47.0\"" + buildConfigField "String", "NODE_VERSION", "\"0.47.2\"" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -223,7 +223,7 @@ dependencies { //Mysterium implementation "network.mysterium:terms:0.0.32" - implementation "network.mysterium:mobile-node:0.47.0" + implementation "network.mysterium:mobile-node:0.47.2" // Change NODE_VERSION in defaultConfig if updating version of mobile-node // Comment network.mysterium:mobile-node and replace with your local path to use local node build. //implementation files('/Users/macbook/AndroidStudioProjects/Mysterium.aar') diff --git a/android/app/src/main/java/updated/mysterium/vpn/ui/balance/BalanceViewModel.kt b/android/app/src/main/java/updated/mysterium/vpn/ui/balance/BalanceViewModel.kt index 5b7d0e5a3..14b4cce20 100644 --- a/android/app/src/main/java/updated/mysterium/vpn/ui/balance/BalanceViewModel.kt +++ b/android/app/src/main/java/updated/mysterium/vpn/ui/balance/BalanceViewModel.kt @@ -5,14 +5,16 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import kotlinx.coroutines.* +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.CoroutineExceptionHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import mysterium.GetBalanceRequest import updated.mysterium.vpn.core.DeferredNode import updated.mysterium.vpn.core.MysteriumCoreService import updated.mysterium.vpn.model.wallet.IdentityModel import updated.mysterium.vpn.model.wallet.IdentityRegistrationStatus import updated.mysterium.vpn.network.provider.usecase.UseCaseProvider -import updated.mysterium.vpn.ui.connection.ConnectionViewModel class BalanceViewModel(useCaseProvider: UseCaseProvider) : ViewModel() { @@ -33,7 +35,7 @@ class BalanceViewModel(useCaseProvider: UseCaseProvider) : ViewModel() { val handler = CoroutineExceptionHandler { _, exception -> Log.i(TAG, exception.localizedMessage ?: exception.toString()) } - viewModelScope.launch(handler) { + viewModelScope.launch(Dispatchers.IO + handler) { startDeferredNode(mysteriumCoreService) } } diff --git a/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashActivity.kt b/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashActivity.kt index f1ff94d84..81cf99010 100644 --- a/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashActivity.kt +++ b/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashActivity.kt @@ -1,6 +1,5 @@ package updated.mysterium.vpn.ui.splash -import android.animation.Animator import android.app.Activity import android.content.ActivityNotFoundException import android.content.Intent @@ -18,6 +17,7 @@ import com.google.android.play.core.appupdate.AppUpdateManager import com.google.android.play.core.appupdate.AppUpdateManagerFactory import com.google.android.play.core.install.model.AppUpdateType import com.google.android.play.core.install.model.UpdateAvailability +import network.mysterium.vpn.BuildConfig import network.mysterium.vpn.R import network.mysterium.vpn.databinding.ActivitySplashBinding import network.mysterium.vpn.databinding.PopUpNewVersionBinding @@ -25,7 +25,6 @@ import org.koin.android.ext.android.inject import updated.mysterium.vpn.App import updated.mysterium.vpn.analitics.AnalyticEvent import updated.mysterium.vpn.analitics.AnalyticWrapper -import updated.mysterium.vpn.common.animation.OnAnimationCompletedListener import updated.mysterium.vpn.common.network.NetworkUtil import updated.mysterium.vpn.model.manual.connect.ConnectionState import updated.mysterium.vpn.model.pushy.PushyTopic @@ -56,10 +55,9 @@ class SplashActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySplashBinding.inflate(layoutInflater) - applyDarkMode() setContentView(binding.root) + applyDarkMode() ensureVpnServicePermission() - configure() subscribeViewModel() setUpPushyNotifications() } @@ -81,26 +79,12 @@ class SplashActivity : BaseActivity() { } } - private fun configure() { - binding.onceAnimationView.addAnimatorListener(object : OnAnimationCompletedListener() { - - override fun onAnimationEnd(animation: Animator?) { - viewModel.animationLoaded() - binding.onceAnimationView.visibility = View.GONE - binding.onceAnimationView.cancelAnimation() - binding.loopAnimationView.visibility = View.VISIBLE - binding.loopAnimationView.playAnimation() - } - }) - } - private fun subscribeViewModel() { viewModel.navigateForward.observe(this, { establishConnectionListeners() navigateForward() }) viewModel.preloadFinished.observe(this, { - binding.onceAnimationView.playAnimation() viewModel.initRepository() }) } @@ -123,13 +107,21 @@ class SplashActivity : BaseActivity() { } private fun checkForGoogleMarketUpdates(afterAction: () -> Unit) { - appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> - if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && - appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) - ) { - showNewVersionAvailablePopUp() - } else { - afterAction.invoke() + if (BuildConfig.DEBUG) { + afterAction.invoke() + } else { + appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> + if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && + appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) + ) { + showNewVersionAvailablePopUp() + } else { + afterAction.invoke() + } + } + appUpdateManager.appUpdateInfo.addOnFailureListener { + showPlayMarketErrorToast() + finish() } } } @@ -214,6 +206,16 @@ class SplashActivity : BaseActivity() { } } + private fun showPlayMarketErrorToast() { + Toast.makeText( + this, + getString(R.string.error_play_account), + Toast.LENGTH_LONG + ).apply { + (view.findViewById(android.R.id.message) as TextView).gravity = Gravity.CENTER + }.show() + } + private fun showPermissionErrorToast() { Toast.makeText( this, diff --git a/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashViewModel.kt b/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashViewModel.kt index ebb3acad0..66676159f 100644 --- a/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashViewModel.kt +++ b/android/app/src/main/java/updated/mysterium/vpn/ui/splash/SplashViewModel.kt @@ -34,8 +34,6 @@ class SplashViewModel(useCaseProvider: UseCaseProvider) : ViewModel() { private val termsUseCase = useCaseProvider.terms() private val settingsUseCase = useCaseProvider.settings() private val pushyUseCase = useCaseProvider.pushy() - private var isAnimationLoaded = false - private var isDataLoaded = false private var deferredNode = DeferredNode() fun startLoading( @@ -69,14 +67,6 @@ class SplashViewModel(useCaseProvider: UseCaseProvider) : ViewModel() { fun isNewUser() = loginUseCase.isNewUser() - fun animationLoaded() { - if (isDataLoaded) { - _navigateForward.postValue(Unit) - } else { - isAnimationLoaded = true - } - } - fun initRepository() { val handler = CoroutineExceptionHandler { _, exception -> Log.e(TAG, exception.localizedMessage ?: exception.toString()) @@ -84,11 +74,7 @@ class SplashViewModel(useCaseProvider: UseCaseProvider) : ViewModel() { viewModelScope.launch(Dispatchers.IO + handler) { balanceUseCase.initDeferredNode(deferredNode) connectionUseCase.initDeferredNode(deferredNode) - if (isAnimationLoaded) { - _navigateForward.postValue(Unit) - } else { - isDataLoaded = true - } + _navigateForward.postValue(Unit) } } diff --git a/android/app/src/main/res/drawable/splash_logo.png b/android/app/src/main/res/drawable/splash_logo.png deleted file mode 100644 index a9fea89ab..000000000 Binary files a/android/app/src/main/res/drawable/splash_logo.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/splash_logo.xml b/android/app/src/main/res/drawable/splash_logo.xml new file mode 100644 index 000000000..27eb2b8aa --- /dev/null +++ b/android/app/src/main/res/drawable/splash_logo.xml @@ -0,0 +1,9 @@ + + + diff --git a/android/app/src/main/res/layout/activity_splash.xml b/android/app/src/main/res/layout/activity_splash.xml index bbe4422d0..2286827ee 100644 --- a/android/app/src/main/res/layout/activity_splash.xml +++ b/android/app/src/main/res/layout/activity_splash.xml @@ -1,38 +1,18 @@ - - - + tools:ignore="ContentDescription" /> diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 256d7dec9..584f29c50 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -280,6 +280,7 @@ VPN connection has to be granted for MysteriumVPN to work + You have to have Google Play account Smart Connect is coming soon diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 4e9c91781..cf2e0da52 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -138,7 +138,8 @@