json fetch and home screen refresh adjustments
This commit is contained in:
parent
c95a0eaf2b
commit
5136e6938d
|
@ -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")
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) -> {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue