MainActivity: Drop dependency upon kovenant
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -28,21 +28,21 @@ import android.os.Build
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.view.MenuItem
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.activity.addCallback
|
import androidx.activity.addCallback
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.activity.viewModels
|
||||||
import androidx.annotation.IdRes
|
import androidx.annotation.IdRes
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.graphics.ColorUtils
|
import androidx.core.graphics.ColorUtils
|
||||||
import androidx.core.view.GravityCompat
|
import androidx.core.view.GravityCompat
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.NavDestination
|
import androidx.navigation.NavDestination
|
||||||
import androidx.navigation.fragment.NavHostFragment
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
import androidx.navigation.fragment.findNavController
|
|
||||||
import androidx.navigation.ui.AppBarConfiguration
|
import androidx.navigation.ui.AppBarConfiguration
|
||||||
import androidx.navigation.ui.navigateUp
|
import androidx.navigation.ui.navigateUp
|
||||||
import androidx.navigation.ui.setupActionBarWithNavController
|
import androidx.navigation.ui.setupActionBarWithNavController
|
||||||
@@ -51,23 +51,22 @@ import com.aurora.Constants
|
|||||||
import com.aurora.extensions.*
|
import com.aurora.extensions.*
|
||||||
import com.aurora.gplayapi.data.models.AuthData
|
import com.aurora.gplayapi.data.models.AuthData
|
||||||
import com.aurora.store.data.model.SelfUpdate
|
import com.aurora.store.data.model.SelfUpdate
|
||||||
import com.aurora.store.data.network.HttpClient
|
|
||||||
import com.aurora.store.data.providers.AuthProvider
|
import com.aurora.store.data.providers.AuthProvider
|
||||||
import com.aurora.store.data.providers.NetworkProvider
|
import com.aurora.store.data.providers.NetworkProvider
|
||||||
import com.aurora.store.databinding.ActivityMainBinding
|
import com.aurora.store.databinding.ActivityMainBinding
|
||||||
import com.aurora.store.util.CertUtil.isFDroidApp
|
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
import com.aurora.store.util.Preferences
|
import com.aurora.store.util.Preferences
|
||||||
import com.aurora.store.view.ui.sheets.NetworkDialogSheet
|
import com.aurora.store.view.ui.sheets.NetworkDialogSheet
|
||||||
import com.aurora.store.view.ui.sheets.SelfUpdateSheet
|
import com.aurora.store.view.ui.sheets.SelfUpdateSheet
|
||||||
import com.aurora.store.view.ui.sheets.TOSSheet
|
import com.aurora.store.view.ui.sheets.TOSSheet
|
||||||
|
import com.aurora.store.viewmodel.MainViewModel
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import com.google.android.material.elevation.SurfaceColors
|
import com.google.android.material.elevation.SurfaceColors
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
import nl.komponents.kovenant.task
|
import kotlinx.coroutines.flow.drop
|
||||||
import nl.komponents.kovenant.ui.successUi
|
import kotlinx.coroutines.launch
|
||||||
import java.lang.reflect.Modifier
|
import java.lang.reflect.Modifier
|
||||||
|
|
||||||
|
|
||||||
@@ -77,6 +76,8 @@ class MainActivity : AppCompatActivity(), NetworkProvider.NetworkListener {
|
|||||||
private lateinit var navController: NavController
|
private lateinit var navController: NavController
|
||||||
private lateinit var authData: AuthData
|
private lateinit var authData: AuthData
|
||||||
|
|
||||||
|
private val viewModel: MainViewModel by viewModels()
|
||||||
|
|
||||||
private val startForPermissions =
|
private val startForPermissions =
|
||||||
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
||||||
if (!it) toast(R.string.permissions_denied)
|
if (!it) toast(R.string.permissions_denied)
|
||||||
@@ -184,7 +185,16 @@ class MainActivity : AppCompatActivity(), NetworkProvider.NetworkListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check self update only for stable release, skip debug & nightlies*/
|
/* Check self update only for stable release, skip debug & nightlies*/
|
||||||
if (BuildConfig.APPLICATION_ID == Constants.APP_ID) checkSelfUpdate()
|
if (BuildConfig.APPLICATION_ID == Constants.APP_ID) viewModel.checkSelfUpdate(this)
|
||||||
|
this.lifecycleScope.launch {
|
||||||
|
viewModel.selfUpdateAvailable.collect {
|
||||||
|
if (it != null) {
|
||||||
|
showUpdatesSheet(it)
|
||||||
|
} else {
|
||||||
|
Log.i("No self-update available")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle quick exit from back actions
|
// Handle quick exit from back actions
|
||||||
onBackPressedDispatcher.addCallback(this) {
|
onBackPressedDispatcher.addCallback(this) {
|
||||||
@@ -285,37 +295,6 @@ class MainActivity : AppCompatActivity(), NetworkProvider.NetworkListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkSelfUpdate() {
|
|
||||||
task {
|
|
||||||
HttpClient.getPreferredClient().get(Constants.UPDATE_URL, mapOf())
|
|
||||||
} successUi { playResponse ->
|
|
||||||
if (playResponse.isSuccessful) {
|
|
||||||
val selfUpdate = gson.fromJson(
|
|
||||||
String(playResponse.responseBytes),
|
|
||||||
SelfUpdate::class.java
|
|
||||||
)
|
|
||||||
|
|
||||||
selfUpdate?.let { it ->
|
|
||||||
if (it.versionCode > BuildConfig.VERSION_CODE) {
|
|
||||||
if (isFDroidApp(this, BuildConfig.APPLICATION_ID)) {
|
|
||||||
if (it.fdroidBuild.isNotEmpty()) {
|
|
||||||
showUpdatesSheet(it)
|
|
||||||
}
|
|
||||||
} else if (it.auroraBuild.isNotEmpty()) {
|
|
||||||
showUpdatesSheet(it)
|
|
||||||
} else {
|
|
||||||
Log.i(getString(R.string.details_no_updates))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.i(getString(R.string.details_no_updates))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.e("Failed to check self update")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showUpdatesSheet(selfUpdate: SelfUpdate) {
|
private fun showUpdatesSheet(selfUpdate: SelfUpdate) {
|
||||||
if (!supportFragmentManager.isDestroyed) {
|
if (!supportFragmentManager.isDestroyed) {
|
||||||
val sheet = SelfUpdateSheet.newInstance(selfUpdate)
|
val sheet = SelfUpdateSheet.newInstance(selfUpdate)
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package com.aurora.store.viewmodel
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.aurora.Constants
|
||||||
|
import com.aurora.store.BuildConfig
|
||||||
|
import com.aurora.store.data.model.SelfUpdate
|
||||||
|
import com.aurora.store.data.network.HttpClient
|
||||||
|
import com.aurora.store.util.CertUtil
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.google.gson.GsonBuilder
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.asSharedFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import java.lang.reflect.Modifier
|
||||||
|
|
||||||
|
class MainViewModel : ViewModel() {
|
||||||
|
|
||||||
|
private val TAG = MainViewModel::class.java.simpleName
|
||||||
|
|
||||||
|
private val _selfUpdateAvailable = MutableSharedFlow<SelfUpdate?>()
|
||||||
|
val selfUpdateAvailable = _selfUpdateAvailable.asSharedFlow()
|
||||||
|
|
||||||
|
fun checkSelfUpdate(context: Context) {
|
||||||
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val gson: Gson =
|
||||||
|
GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create()
|
||||||
|
val response = HttpClient.getPreferredClient().get(Constants.UPDATE_URL, mapOf())
|
||||||
|
val selfUpdate =
|
||||||
|
gson.fromJson(String(response.responseBytes), SelfUpdate::class.java)
|
||||||
|
|
||||||
|
if (selfUpdate.versionCode > BuildConfig.VERSION_CODE) {
|
||||||
|
if (CertUtil.isFDroidApp(context, BuildConfig.APPLICATION_ID)) {
|
||||||
|
if (selfUpdate.fdroidBuild.isNotEmpty()) {
|
||||||
|
_selfUpdateAvailable.emit(selfUpdate)
|
||||||
|
}
|
||||||
|
} else if (selfUpdate.auroraBuild.isNotEmpty()) {
|
||||||
|
_selfUpdateAvailable.emit(selfUpdate)
|
||||||
|
} else {
|
||||||
|
_selfUpdateAvailable.emit(null)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_selfUpdateAvailable.emit(null)
|
||||||
|
}
|
||||||
|
} catch (exception: Exception) {
|
||||||
|
_selfUpdateAvailable.emit(null)
|
||||||
|
Log.d(TAG, "Failed to check self-update", exception)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user