json fetch and home screen refresh adjustments

This commit is contained in:
Xinto 2020-09-17 23:25:44 +04:00
parent c95a0eaf2b
commit 5136e6938d
7 changed files with 56 additions and 25 deletions

View File

@ -11,6 +11,7 @@ import com.vanced.manager.utils.InternetTools.baseUrl
import com.vanced.manager.utils.JsonHelper.getJson import com.vanced.manager.utils.JsonHelper.getJson
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
open class App: Application() { open class App: Application() {
@ -21,20 +22,23 @@ open class App: Application() {
var manager: JsonObject? = null var manager: JsonObject? = null
override fun onCreate() { override fun onCreate() {
loadJson() CoroutineScope(Dispatchers.IO).launch {
super.onCreate() loadJsonAsync().await()
PRDownloader.initialize(this) super.onCreate()
PRDownloader.initialize(this@App)
Crowdin.init(this@App,
CrowdinConfig.Builder()
.withDistributionHash("36c51aed3180a4f43073d28j4s6")
.withNetworkType(NetworkType.WIFI)
.build()
)
}
Crowdin.init(this,
CrowdinConfig.Builder()
.withDistributionHash("36c51aed3180a4f43073d28j4s6")
.withNetworkType(NetworkType.WIFI)
.build()
)
} }
fun loadJson() = CoroutineScope(Dispatchers.IO).launch { fun loadJsonAsync() = CoroutineScope(Dispatchers.IO).async {
val latest = getJson("$baseUrl/latest.json") val latest = getJson("$baseUrl/latest.json")
vanced = latest.obj("vanced") vanced = latest.obj("vanced")
music = latest.obj("music") music = latest.obj("music")

View File

@ -12,7 +12,7 @@ import com.vanced.manager.R
import com.vanced.manager.utils.PackageHelper.isPackageInstalled import com.vanced.manager.utils.PackageHelper.isPackageInstalled
open class DataModel( open class DataModel(
jsonObject: JsonObject?, private val jsonObject: JsonObject?,
variant: String = "nonroot", variant: String = "nonroot",
app: String, app: String,
private val context: Context private val context: Context
@ -35,7 +35,7 @@ open class DataModel(
val buttonIcon = ObservableField<Drawable>() val buttonIcon = ObservableField<Drawable>()
val changelog = ObservableField<String>() val changelog = ObservableField<String>()
init { fun fetch() {
isAppInstalled.set(isPackageInstalled(appPkg, context.packageManager)) isAppInstalled.set(isPackageInstalled(appPkg, context.packageManager))
versionName.set(jsonObject?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable)) versionName.set(jsonObject?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable))
installedVersionName.set(getPkgVersionName(isAppInstalled.get(), appPkg)) installedVersionName.set(getPkgVersionName(isAppInstalled.get(), appPkg))
@ -45,6 +45,10 @@ open class DataModel(
buttonIcon.set(compareIntDrawable(installedVersionCode.get(), versionCode.get())) buttonIcon.set(compareIntDrawable(installedVersionCode.get(), versionCode.get()))
changelog.set(jsonObject?.string("changelog") ?: context.getString(R.string.unavailable)) changelog.set(jsonObject?.string("changelog") ?: context.getString(R.string.unavailable))
} }
init {
fetch()
}
private fun getPkgVersionName(toCheck: Boolean, pkg: String): String { private fun getPkgVersionName(toCheck: Boolean, pkg: String): String {
return if (toCheck) { return if (toCheck) {

View File

@ -4,17 +4,19 @@ import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.MenuItem import android.view.MenuItem
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.navigation.fragment.NavHostFragment
import androidx.preference.PreferenceManager.getDefaultSharedPreferences import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import com.crowdin.platform.Crowdin import com.crowdin.platform.Crowdin
import com.crowdin.platform.LoadingStateListener import com.crowdin.platform.LoadingStateListener
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.google.firebase.messaging.FirebaseMessaging import com.google.firebase.messaging.FirebaseMessaging
import com.topjohnwu.superuser.Shell
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.adapter.SectionVariantAdapter import com.vanced.manager.adapter.SectionVariantAdapter
import com.vanced.manager.core.App
import com.vanced.manager.databinding.ActivityMainBinding import com.vanced.manager.databinding.ActivityMainBinding
import com.vanced.manager.ui.dialogs.DialogContainer import com.vanced.manager.ui.dialogs.DialogContainer
import com.vanced.manager.ui.fragments.UpdateCheckFragment import com.vanced.manager.ui.fragments.UpdateCheckFragment
@ -45,6 +47,12 @@ class MainActivity : AppCompatActivity() {
private val tabListener = object : TabLayout.OnTabSelectedListener { private val tabListener = object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) { override fun onTabSelected(tab: TabLayout.Tab) {
if (tab.position == 1 && !Shell.rootAccess()) {
tab.select(0)
Toast.makeText(this@MainActivity, getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
return
}
getDefaultSharedPreferences(this@MainActivity).edit().putString("vanced_variant", getDefaultSharedPreferences(this@MainActivity).edit().putString("vanced_variant",
when (tab.position) { when (tab.position) {
1 -> "root" 1 -> "root"
@ -104,6 +112,12 @@ class MainActivity : AppCompatActivity() {
binding.mainTablayout.addOnTabSelectedListener(tabListener) binding.mainTablayout.addOnTabSelectedListener(tabListener)
} }
override fun onBackPressed() {
super.onBackPressed()
val navHost = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragment
navHost.navController.popBackStack()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (installing) { if (installing) {
return false return false
@ -131,10 +145,14 @@ class MainActivity : AppCompatActivity() {
super.attachBaseContext(Crowdin.wrapContext(newBase)) super.attachBaseContext(Crowdin.wrapContext(newBase))
} }
fun TabLayout.Tab.select(position: Int) {
this.parent?.getTabAt(position)?.select()
}
private fun initDialogs() { private fun initDialogs() {
val prefs = getDefaultSharedPreferences(this) val prefs = getDefaultSharedPreferences(this)
val variant = prefs.getString("vanced_variant", "nonroot") val variant = prefs.getString("vanced_variant", "nonroot")
val showRootDialog = prefs.getBoolean("show_root_dialog", true) prefs.getBoolean("show_root_dialog", true)
when { when {
prefs.getBoolean("firstStart", true) -> { prefs.getBoolean("firstStart", true) -> {

View File

@ -153,6 +153,7 @@ open class HomeFragment : Fragment(), View.OnClickListener {
private fun registerReceivers() { private fun registerReceivers() {
val intentFilter = IntentFilter() val intentFilter = IntentFilter()
intentFilter.addAction(INSTALL_FAILED) intentFilter.addAction(INSTALL_FAILED)
intentFilter.addAction(REFRESH_HOME)
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter) localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
} }

View File

@ -67,6 +67,8 @@ class MainFragment : Fragment() {
findViewById<MaterialToolbar>(R.id.home_toolbar).navigationIcon = if (isNeeded) ContextCompat.getDrawable(requireActivity(), R.drawable.ic_keyboard_backspace_black_24dp) else null findViewById<MaterialToolbar>(R.id.home_toolbar).navigationIcon = if (isNeeded) ContextCompat.getDrawable(requireActivity(), R.drawable.ic_keyboard_backspace_black_24dp) else null
} }
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {

View File

@ -27,7 +27,6 @@ import com.vanced.manager.utils.PackageHelper.uninstallApk
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import okhttp3.internal.wait
open class HomeViewModel(application: Application): AndroidViewModel(application) { open class HomeViewModel(application: Application): AndroidViewModel(application) {
@ -47,13 +46,15 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
val navigateDestination : LiveData<Event<Int>> = _navigateDestination val navigateDestination : LiveData<Event<Int>> = _navigateDestination
fun fetchData() { fun fetchData() = CoroutineScope(Dispatchers.IO).launch {
CoroutineScope(Dispatchers.IO).launch { fetching.set(true)
fetching.set(true) managerApp.loadJsonAsync().await()
managerApp.loadJson() vanced.get()?.fetch()
Crowdin.forceUpdate(getApplication()) music.get()?.fetch()
fetching.set(false) microg.get()?.fetch()
} manager.get()?.fetch()
Crowdin.forceUpdate(getApplication())
fetching.set(false)
} }
//private val microgSnackbar = Snackbar.make(, R.string.no_microg, Snackbar.LENGTH_LONG).setAction(R.string.install) { downloadMicrog(getApplication()) } //private val microgSnackbar = Snackbar.make(, R.string.no_microg, Snackbar.LENGTH_LONG).setAction(R.string.install) { downloadMicrog(getApplication()) }
@ -143,8 +144,9 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
init { init {
fetching.set(true) fetching.set(true)
while (managerApp.manager == null) //while (managerApp.manager == null)
this.wait() //this.wait()
vanced.set(DataModel(managerApp.vanced, variant, "vanced", app)) vanced.set(DataModel(managerApp.vanced, variant, "vanced", app))
microg.set(DataModel(managerApp.microg, app = "microg", context = app)) microg.set(DataModel(managerApp.microg, app = "microg", context = app))
music.set(DataModel(managerApp.music, app = "music", context = app)) music.set(DataModel(managerApp.music, app = "music", context = app))

View File

@ -21,7 +21,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
app:titleTextColor="?attr/toolbarIconColor" app:titleTextColor="?attr/toolbarIconColor"
android:background="@android:color/transparent"/> android:background="?colorSurface"/>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>