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.Environment
|
||||
import android.provider.Settings
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.activity.addCallback
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.view.GravityCompat
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavDestination
|
||||
import androidx.navigation.fragment.NavHostFragment
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.ui.AppBarConfiguration
|
||||
import androidx.navigation.ui.navigateUp
|
||||
import androidx.navigation.ui.setupActionBarWithNavController
|
||||
@@ -51,23 +51,22 @@ import com.aurora.Constants
|
||||
import com.aurora.extensions.*
|
||||
import com.aurora.gplayapi.data.models.AuthData
|
||||
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.NetworkProvider
|
||||
import com.aurora.store.databinding.ActivityMainBinding
|
||||
import com.aurora.store.util.CertUtil.isFDroidApp
|
||||
import com.aurora.store.util.Log
|
||||
import com.aurora.store.util.Preferences
|
||||
import com.aurora.store.view.ui.sheets.NetworkDialogSheet
|
||||
import com.aurora.store.view.ui.sheets.SelfUpdateSheet
|
||||
import com.aurora.store.view.ui.sheets.TOSSheet
|
||||
import com.aurora.store.viewmodel.MainViewModel
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import com.google.android.material.elevation.SurfaceColors
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import nl.komponents.kovenant.task
|
||||
import nl.komponents.kovenant.ui.successUi
|
||||
import kotlinx.coroutines.flow.drop
|
||||
import kotlinx.coroutines.launch
|
||||
import java.lang.reflect.Modifier
|
||||
|
||||
|
||||
@@ -77,6 +76,8 @@ class MainActivity : AppCompatActivity(), NetworkProvider.NetworkListener {
|
||||
private lateinit var navController: NavController
|
||||
private lateinit var authData: AuthData
|
||||
|
||||
private val viewModel: MainViewModel by viewModels()
|
||||
|
||||
private val startForPermissions =
|
||||
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
||||
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*/
|
||||
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
|
||||
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) {
|
||||
if (!supportFragmentManager.isDestroyed) {
|
||||
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