JSON Parsing from request

This commit is contained in:
xfileFIN 2020-07-12 00:43:43 +03:00
parent 1224e01823
commit 7a1d7cced8
12 changed files with 277 additions and 167 deletions

View File

@ -23,4 +23,5 @@ After 3 months of development, we are finally ready to introduce Vanced Manager
- topjohnwu for his wonderful [LibSU](https://github.com/topjohnwu/libsu) - topjohnwu for his wonderful [LibSU](https://github.com/topjohnwu/libsu)
- Mindorks for their amazing [PRDownloader](https://github.com/MindorksOpenSource/PRDownloader) - Mindorks for their amazing [PRDownloader](https://github.com/MindorksOpenSource/PRDownloader)
- aefyr for [SAI](https://github.com/aefyr/SAI), which was an inspiration for our Manager - aefyr for [SAI](https://github.com/aefyr/SAI), which was an inspiration for our Manager
- 100rabhkr for their [GetJson](https://github.com/100rabhkr/getjson) library - kittinunf for the [Fuel](https://github.com/kittinunf/Fuel) library
- cbeust for the [klaxon](https://github.com/cbeust/klaxon) library

View File

@ -74,8 +74,15 @@ dependencies {
// Other // Other
implementation 'com.crowdin.platform:mobile-sdk:1.1.4' implementation 'com.crowdin.platform:mobile-sdk:1.1.4'
implementation 'com.github.100rabhkr:GetJSON:1.0'
implementation 'com.github.topjohnwu.libsu:core:2.5.1' implementation 'com.github.topjohnwu.libsu:core:2.5.1'
implementation 'com.mindorks.android:prdownloader:0.6.0' implementation 'com.mindorks.android:prdownloader:0.6.0'
implementation 'com.squareup.okhttp3:okhttp:4.7.2' implementation 'com.squareup.okhttp3:okhttp:4.7.2'
implementation 'com.beust:klaxon:5.0.1'
//core
implementation 'com.github.kittinunf.fuel:fuel:2.2.3'
//packages
implementation 'com.github.kittinunf.fuel:fuel-json:2.2.3'
implementation 'com.github.kittinunf.fuel:fuel-coroutines:2.2.3'
} }

View File

@ -23,6 +23,8 @@ import com.vanced.manager.utils.InternetTools.getObjectFromJson
import com.vanced.manager.utils.NotificationHelper import com.vanced.manager.utils.NotificationHelper
import com.vanced.manager.utils.NotificationHelper.cancelNotif import com.vanced.manager.utils.NotificationHelper.cancelNotif
import com.vanced.manager.utils.NotificationHelper.createBasicNotif import com.vanced.manager.utils.NotificationHelper.createBasicNotif
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.io.File import java.io.File
class MicrogDownloadService: Service() { class MicrogDownloadService: Service() {
@ -37,18 +39,24 @@ class MicrogDownloadService: Service() {
} }
private fun downloadMicrog() { private fun downloadMicrog() {
//val prefs = getSharedPreferences("installPrefs", Context.MODE_PRIVATE) val context = this
val apkUrl = getObjectFromJson("${PreferenceManager.getDefaultSharedPreferences(this).getString("install_url", baseUrl)}/microg.json", "url", this) runBlocking {
launch {
//val prefs = getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
val apkUrl = getObjectFromJson(
"${PreferenceManager.getDefaultSharedPreferences(context)
.getString("install_url", baseUrl)}/microg.json", "url")
val request = DownloadManager.Request(Uri.parse(apkUrl)) val request = DownloadManager.Request(Uri.parse(apkUrl))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE) request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
request.setTitle(getString(R.string.downloading_file, "MicroG")) request.setTitle(getString(R.string.downloading_file, "MicroG"))
request.setDestinationUri(Uri.fromFile(File("${filesDir.path}/microg.apk"))) request.setDestinationUri(Uri.fromFile(File("${filesDir.path}/microg.apk")))
val downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
downloadId = downloadManager.enqueue(request)
val downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
downloadId = downloadManager.enqueue(request)
}
}
/* /*
val channel = 420 val channel = 420
PRDownloader.download(apkUrl, filesDir.path, "microg.apk") PRDownloader.download(apkUrl, filesDir.path, "microg.apk")

View File

@ -25,6 +25,8 @@ import com.vanced.manager.utils.InternetTools.getObjectFromJson
import com.vanced.manager.utils.NotificationHelper.cancelNotif import com.vanced.manager.utils.NotificationHelper.cancelNotif
import com.vanced.manager.utils.NotificationHelper.createBasicNotif import com.vanced.manager.utils.NotificationHelper.createBasicNotif
import com.vanced.manager.utils.NotificationHelper.displayDownloadNotif import com.vanced.manager.utils.NotificationHelper.displayDownloadNotif
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.io.File import java.io.File
class VancedDownloadService: Service() { class VancedDownloadService: Service() {
@ -42,39 +44,52 @@ class VancedDownloadService: Service() {
private fun downloadSplits( private fun downloadSplits(
type: String = "arch" type: String = "arch"
) { ) {
val defPrefs = PreferenceManager.getDefaultSharedPreferences(this) val context = this
val baseUrl = defPrefs.getString("install_url", baseUrl) runBlocking {
val vancedVer = getObjectFromJson("$baseUrl/vanced.json", "version", this) launch {
val defPrefs = PreferenceManager.getDefaultSharedPreferences(context)
val baseUrl = defPrefs.getString("install_url", baseUrl)
val vancedVer = getObjectFromJson("$baseUrl/vanced.json", "version")
val prefs = getSharedPreferences("installPrefs", Context.MODE_PRIVATE) val prefs = getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
val variant = PreferenceManager.getDefaultSharedPreferences(this).getString("vanced_variant", "nonroot") val variant = PreferenceManager.getDefaultSharedPreferences(context)
val lang = prefs?.getString("lang", "en") .getString("vanced_variant", "nonroot")
val theme = prefs?.getString("theme", "dark") val lang = prefs?.getString("lang", "en")
val arch = val theme = prefs?.getString("theme", "dark")
when { val arch =
Build.SUPPORTED_ABIS.contains("x86") -> "x86" when {
Build.SUPPORTED_ABIS.contains("arm64-v8a") -> "arm64_v8a" Build.SUPPORTED_ABIS.contains("x86") -> "x86"
else -> "armeabi_v7a" Build.SUPPORTED_ABIS.contains("arm64-v8a") -> "arm64_v8a"
else -> "armeabi_v7a"
}
val url =
when (type) {
"arch" -> "$baseUrl/apks/v$vancedVer/$variant/Arch/split_config.$arch.apk"
"theme" -> "$baseUrl/apks/v$vancedVer/$variant/Theme/$theme.apk"
"lang" -> "$baseUrl/apks/v$vancedVer/$variant/Language/split_config.$lang.apk"
"enlang" -> "$baseUrl/apks/v$vancedVer/$variant/Language/split_config.en.apk"
else -> throw NotImplementedError("This type of APK is NOT valid. What the hell did you even do?")
}
apkType = type
val request = DownloadManager.Request(Uri.parse(url))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
request.setTitle(getString(R.string.downloading_file, "MicroG"))
request.setDestinationUri(
Uri.fromFile(
File(
"${filesDir.path}/${getFileNameFromUrl(
url
)}"
)
)
)
val downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
downloadId = downloadManager.enqueue(request)
} }
val url = }
when (type) {
"arch" -> "$baseUrl/apks/v$vancedVer/$variant/Arch/split_config.$arch.apk"
"theme" -> "$baseUrl/apks/v$vancedVer/$variant/Theme/$theme.apk"
"lang" -> "$baseUrl/apks/v$vancedVer/$variant/Language/split_config.$lang.apk"
"enlang" -> "$baseUrl/apks/v$vancedVer/$variant/Language/split_config.en.apk"
else -> throw NotImplementedError("This type of APK is NOT valid. What the hell did you even do?")
}
apkType = type
val request = DownloadManager.Request(Uri.parse(url))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
request.setTitle(getString(R.string.downloading_file, "MicroG"))
request.setDestinationUri(Uri.fromFile(File("${filesDir.path}/${getFileNameFromUrl(url)}")))
val downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
downloadId = downloadManager.enqueue(request)
/* /*
val channel = 69 val channel = 69
PRDownloader PRDownloader

View File

@ -17,17 +17,24 @@ import androidx.navigation.ui.setupWithNavController
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.crowdin.platform.Crowdin import com.crowdin.platform.Crowdin
import com.crowdin.platform.LoadingStateListener import com.crowdin.platform.LoadingStateListener
import com.dezlum.codelabs.getjson.GetJson import com.downloader.Error
import com.downloader.OnDownloadListener
import com.downloader.PRDownloader
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.core.installer.AppInstaller
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.dialogs.DialogContainer.installAlertBuilder import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
import com.vanced.manager.ui.dialogs.DialogContainer.launchVanced import com.vanced.manager.ui.dialogs.DialogContainer.launchVanced
import com.vanced.manager.ui.dialogs.DialogContainer.regularPackageInstalled import com.vanced.manager.ui.dialogs.DialogContainer.regularPackageInstalled
import com.vanced.manager.ui.fragments.HomeFragment
import com.vanced.manager.ui.fragments.UpdateCheckFragment import com.vanced.manager.ui.fragments.UpdateCheckFragment
import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.NotificationHelper
import com.vanced.manager.utils.PackageHelper import com.vanced.manager.utils.PackageHelper
import com.vanced.manager.utils.ThemeHelper.setFinalTheme import com.vanced.manager.utils.ThemeHelper.setFinalTheme
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@ -178,9 +185,13 @@ class MainActivity : AppCompatActivity() {
} }
private fun checkUpdates() { private fun checkUpdates() {
if (GetJson().isConnected(this) && InternetTools.isUpdateAvailable()) { runBlocking {
val fm = supportFragmentManager launch {
UpdateCheckFragment().show(fm, "UpdateCheck") if (InternetTools.isUpdateAvailable()) {
val fm = supportFragmentManager
UpdateCheckFragment().show(fm, "UpdateCheck")
}
}
} }
} }

View File

@ -6,8 +6,11 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.dezlum.codelabs.getjson.GetJson import androidx.preference.PreferenceManager
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.utils.InternetTools
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class ManagerChangelogFragment : Fragment() { class ManagerChangelogFragment : Fragment() {
@ -21,12 +24,17 @@ class ManagerChangelogFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val changelogTxt = view.findViewById<TextView>(R.id.manager_changelog) runBlocking {
launch {
val changelogTxt = view.findViewById<TextView>(R.id.manager_changelog)
if (GetJson().isConnected(activity)) { var baseUrl = PreferenceManager.getDefaultSharedPreferences(context)
val checkUrl = GetJson().AsJSONObject("https://x1nto.github.io/VancedFiles/manager.json") .getString("install_url", InternetTools.baseUrl)
val changelog = checkUrl.get("changelog").asString baseUrl = baseUrl?.trimEnd('/')
changelogTxt.text = changelog
val changelog = InternetTools.getObjectFromJson("$baseUrl/manager.json", "changelog");
changelogTxt.text = changelog
}
} }
} }
} }

View File

@ -1,13 +1,18 @@
package com.vanced.manager.ui.fragments package com.vanced.manager.ui.fragments
import android.os.Bundle import android.os.Bundle
import android.text.InputType
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.dezlum.codelabs.getjson.GetJson import androidx.preference.PreferenceManager
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.utils.InternetTools
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class MicrogChangelogFragment : Fragment() { class MicrogChangelogFragment : Fragment() {
@ -21,12 +26,17 @@ class MicrogChangelogFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val changelogTxt = view.findViewById<TextView>(R.id.microg_changelog) runBlocking {
launch {
val changelogTxt = view.findViewById<TextView>(R.id.microg_changelog)
if (GetJson().isConnected(activity)) { var baseUrl = PreferenceManager.getDefaultSharedPreferences(context)
val checkUrl = GetJson().AsJSONObject("https://x1nto.github.io/VancedFiles/microg.json") .getString("install_url", InternetTools.baseUrl)
val changelog = checkUrl.get("changelog").asString baseUrl = baseUrl?.trimEnd('/')
changelogTxt.text = changelog
var changelog = InternetTools.getObjectFromJson("$baseUrl/microg.json", "changelog");
changelogTxt.text = changelog
}
} }
} }
} }

View File

@ -21,13 +21,15 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import com.dezlum.codelabs.getjson.GetJson
import com.downloader.Error import com.downloader.Error
import com.downloader.OnDownloadListener import com.downloader.OnDownloadListener
import com.downloader.PRDownloader import com.downloader.PRDownloader
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.InternetTools.isUpdateAvailable import com.vanced.manager.utils.InternetTools.isUpdateAvailable
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.io.File import java.io.File
class UpdateCheckFragment : DialogFragment() { class UpdateCheckFragment : DialogFragment() {
@ -60,8 +62,8 @@ class UpdateCheckFragment : DialogFragment() {
private fun checkUpdates() { private fun checkUpdates() {
val updatebtn = view?.findViewById<Button>(R.id.update_center_update) val updatebtn = view?.findViewById<Button>(R.id.update_center_update)
val checkingTxt = view?.findViewById<TextView>(R.id.update_center_checking) val checkingTxt = view?.findViewById<TextView>(R.id.update_center_checking)
if (GetJson().isConnected(requireContext())) {
runBlocking {
if (isUpdateAvailable()) { if (isUpdateAvailable()) {
view?.findViewById<Button>(R.id.update_center_recheck)?.visibility = View.GONE view?.findViewById<Button>(R.id.update_center_recheck)?.visibility = View.GONE
checkingTxt?.text = getString(R.string.update_found) checkingTxt?.text = getString(R.string.update_found)
@ -70,24 +72,27 @@ class UpdateCheckFragment : DialogFragment() {
upgradeManager() upgradeManager()
} }
} else checkingTxt?.text = getString(R.string.update_notfound) } else checkingTxt?.text = getString(R.string.update_notfound)
} else {
checkingTxt?.text = getString(R.string.network_error)
} }
} }
private fun upgradeManager() { private fun upgradeManager() {
val dwnldUrl = GetJson().AsJSONObject("https://x1nto.github.io/VancedFiles/manager.json").get("url").asString runBlocking {
//val loadBar = view?.findViewById<ProgressBar>(R.id.update_center_progressbar) launch {
val changelogTxt = view?.findViewById<TextView>(R.id.microg_changelog)
val request = DownloadManager.Request(Uri.parse(dwnldUrl)) val dwnldUrl = InternetTools.getObjectFromJson("https://x1nto.github.io/VancedFiles/manager.json", "url");
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI) //val loadBar = view?.findViewById<ProgressBar>(R.id.update_center_progressbar)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
request.setTitle(activity?.getString(R.string.downloading_file, "Manager"))
request.setDestinationUri(Uri.fromFile(File("${activity?.filesDir?.path}/manager.apk")))
val downloadManager = activity?.getSystemService(DOWNLOAD_SERVICE) as DownloadManager val request = DownloadManager.Request(Uri.parse(dwnldUrl))
downloadId = downloadManager.enqueue(request) request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
request.setTitle(activity?.getString(R.string.downloading_file, "Manager"))
request.setDestinationUri(Uri.fromFile(File("${activity?.filesDir?.path}/manager.apk")))
val downloadManager = activity?.getSystemService(DOWNLOAD_SERVICE) as DownloadManager
downloadId = downloadManager.enqueue(request)
}
}
} }
/* /*

View File

@ -1,13 +1,18 @@
package com.vanced.manager.ui.fragments package com.vanced.manager.ui.fragments
import android.app.Application
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.dezlum.codelabs.getjson.GetJson import androidx.preference.PreferenceManager
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.PackageHelper
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class VancedChangelogFragment : Fragment() { class VancedChangelogFragment : Fragment() {
@ -21,14 +26,51 @@ class VancedChangelogFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val changelogTxt = view.findViewById<TextView>(R.id.vanced_changelog) val context = context
val appContext = activity?.applicationContext
val application = activity?.application
runBlocking {
launch {
val changelogTxt = view.findViewById<TextView>(R.id.vanced_changelog)
if (GetJson().isConnected(activity)) { // Not very clean code, I know.
val checkUrl = GetJson().AsJSONObject("https://vanced.app/api/v1/changelog/15_05_54.json") // This is also now giving you the changelog of the currently installed version.
val changelog = checkUrl.get("message").asString // Should probably give the changelog of the newest version available?
changelogTxt.text = changelog if (context != null && application != null) {
val variant = PreferenceManager.getDefaultSharedPreferences(appContext)
.getString("vanced_variant", "nonroot")
val vancedPkgName: String =
if (variant== "root") {
"com.google.android.youtube"
} else {
"com.vanced.android.youtube"
}
val vancedInstalled = (PackageHelper.isPackageInstalled(vancedPkgName, application.packageManager))
var vancedVersion = getPkgInfo(vancedInstalled, vancedPkgName, application)
vancedVersion = vancedVersion.replace('.', '_')
InternetTools.getJsonString("vanced.json", "version", context)
var baseUrl = PreferenceManager.getDefaultSharedPreferences(context)
.getString("install_url", InternetTools.baseUrl)
baseUrl = baseUrl?.trimEnd('/')
val changelog = InternetTools.getObjectFromJson("$baseUrl/changelog/$vancedVersion.json", "message");
changelogTxt.text = changelog
}
else {
changelogTxt.text = "No changelog..."
}
}
} }
} }
private fun getPkgInfo(toCheck: Boolean, pkg: String, application: Application): String {
return if (toCheck) {
application.packageManager.getPackageInfo(pkg, 0).versionName
} else {
application.getString(R.string.unavailable)
}
}
} }

View File

@ -16,9 +16,13 @@ import androidx.lifecycle.AndroidViewModel
import androidx.preference.PreferenceManager.getDefaultSharedPreferences import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import com.crowdin.platform.Crowdin import com.crowdin.platform.Crowdin
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.ui.fragments.UpdateCheckFragment
import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.InternetTools.getJsonInt import com.vanced.manager.utils.InternetTools.getJsonInt
import com.vanced.manager.utils.InternetTools.getJsonString import com.vanced.manager.utils.InternetTools.getJsonString
import com.vanced.manager.utils.PackageHelper.isPackageInstalled import com.vanced.manager.utils.PackageHelper.isPackageInstalled
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class HomeViewModel(application: Application): AndroidViewModel(application) { class HomeViewModel(application: Application): AndroidViewModel(application) {
@ -57,41 +61,45 @@ class HomeViewModel(application: Application): AndroidViewModel(application) {
//this too //this too
fun fetchData() { fun fetchData() {
fetching.set(true) runBlocking {
Crowdin.forceUpdate(getApplication()) launch {
vancedVersion.set(getJsonString("vanced.json", "version", getApplication())) fetching.set(true)
microgVersion.set(getJsonString("microg.json", "version", getApplication())) Crowdin.forceUpdate(getApplication())
microgInstalled.set(isPackageInstalled("com.mgoogle.android.gms", pm)) vancedVersion.set(getJsonString("vanced.json", "version", getApplication()))
vancedInstalled.set(isPackageInstalled(vancedPkgName, pm)) microgVersion.set(getJsonString("microg.json", "version", getApplication()))
vancedInstalledVersion.set(getPkgInfo(vancedInstalled.get()!!, vancedPkgName, getApplication())) microgInstalled.set(isPackageInstalled("com.mgoogle.android.gms", pm))
microgInstalledVersion.set(getPkgInfo(microgInstalled.get()!!, "com.mgoogle.android.gms", getApplication())) vancedInstalled.set(isPackageInstalled(vancedPkgName, pm))
vancedVersionCode.set(getJsonInt("vanced.json", "versionCode", getApplication())) vancedInstalledVersion.set(getPkgInfo(vancedInstalled.get()!!, vancedPkgName, getApplication()))
microgVersionCode.set(getJsonInt("microg.json", "versionCode", getApplication())) microgInstalledVersion.set(getPkgInfo(microgInstalled.get()!!, "com.mgoogle.android.gms", getApplication()))
vancedInstalledVersionCode.set(getPkgVerCode(vancedInstalled.get()!!, vancedPkgName)) vancedVersionCode.set(getJsonInt("vanced.json", "versionCode", getApplication()))
microgInstalledVersionCode.set(getPkgVerCode(microgInstalled.get()!!, "com.mgoogle.android.gms")) microgVersionCode.set(getJsonInt("microg.json", "versionCode", getApplication()))
microgInstallButtonTxt.set(compareInt(microgInstalledVersionCode.get()!!, microgVersionCode.get()!!, getApplication())) vancedInstalledVersionCode.set(getPkgVerCode(vancedInstalled.get()!!, vancedPkgName))
microgInstallButtonIcon.set(compareIntDrawable(microgInstalledVersionCode.get()!!, microgVersionCode.get()!!, getApplication())) microgInstalledVersionCode.set(getPkgVerCode(microgInstalled.get()!!, "com.mgoogle.android.gms"))
vancedInstallButtonIcon.set( microgInstallButtonTxt.set(compareInt(microgInstalledVersionCode.get()!!, microgVersionCode.get()!!, getApplication()))
if (variant == "nonroot") { microgInstallButtonIcon.set(compareIntDrawable(microgInstalledVersionCode.get()!!, microgVersionCode.get()!!, getApplication()))
if (microgInstalled.get()!!) vancedInstallButtonIcon.set(
compareIntDrawable(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication()) if (variant == "nonroot") {
else if (microgInstalled.get()!!)
null compareIntDrawable(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication())
} else else
compareIntDrawable(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication()) null
) } else
compareIntDrawable(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication())
)
vancedInstallButtonTxt.set( vancedInstallButtonTxt.set(
if (variant == "nonroot") { if (variant == "nonroot") {
if (microgInstalled.get()!!) { if (microgInstalled.get()!!) {
compareInt(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication()) compareInt(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication())
} else { } else {
getApplication<Application>().getString(R.string.no_microg) getApplication<Application>().getString(R.string.no_microg)
} }
} else } else
compareInt(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication()) compareInt(vancedVersionCode.get()!!, vancedInstalledVersionCode.get()!!, getApplication())
) )
fetching.set(false) fetching.set(false)
}
}
} }
fun openMicrogSettings() { fun openMicrogSettings() {

View File

@ -8,14 +8,9 @@ import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.preference.PreferenceManager.getDefaultSharedPreferences import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import com.vanced.manager.BuildConfig import com.vanced.manager.BuildConfig
import com.dezlum.codelabs.getjson.GetJson
import okhttp3.*
import com.vanced.manager.R
import org.json.JSONObject
import java.io.IOException
import java.util.concurrent.atomic.AtomicReference
object InternetTools { object InternetTools {
const val TAG = "VancedManager"
fun openUrl(Url: String, color: Int, context: Context) { fun openUrl(Url: String, color: Int, context: Context) {
val customTabPrefs = getDefaultSharedPreferences(context).getBoolean("use_customtabs", true) val customTabPrefs = getDefaultSharedPreferences(context).getBoolean("use_customtabs", true)
@ -30,60 +25,41 @@ object InternetTools {
fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/')+1, url.length) fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/')+1, url.length)
fun getObjectFromJson(url: String, obj: String, context: Context): String { suspend fun getObjectFromJson(url: String, obj: String): String {
return if (GetJson().isConnected(context)) return try {
GetJson().AsJSONObject(url).get(obj).asString val result = JsonHelper.getJson(url)
else result.string(obj) ?: ""
} catch (e: Exception) {
Log.e(TAG, "Error: ", e)
"" ""
}
} }
fun getJsonInt(file: String, obj: String, context: Context): Int { suspend fun getJsonInt(file: String, obj: String, context: Context): Int {
val client = OkHttpClient() val installUrl = getDefaultSharedPreferences(context).getString("install_url", baseUrl)
val url = "${getDefaultSharedPreferences(context).getString("install_url", baseUrl)}/$file" return try {
val toReturn = AtomicReference<Int>() val result = JsonHelper.getJson("$installUrl/$file")
result.int(obj) ?: 0
val request = Request.Builder().url(url).build() } catch (e: Exception) {
Log.e(TAG, "Error: ", e)
client.newCall(request).enqueue(object : Callback { 0
override fun onFailure(call: Call, e: IOException) { }
toReturn.set(0)
}
override fun onResponse(call: Call, response: Response) {
toReturn.set(JSONObject(response.body?.string()!!).getInt(obj))
Log.d("VMResponse", toReturn.toString())
}
})
Log.d("VMResponse", toReturn.toString())
return toReturn.get()
} }
fun getJsonString(file: String, obj: String, context: Context): String { suspend fun getJsonString(file: String, obj: String, context: Context): String {
val client = OkHttpClient() val installUrl = getDefaultSharedPreferences(context).getString("install_url", baseUrl)
val url = "${getDefaultSharedPreferences(context).getString("install_url", baseUrl)}/$file" return try {
val toReturn = AtomicReference<String>() val result = JsonHelper.getJson("$installUrl/$file")
result.string(obj) ?: ""
val request = Request.Builder().url(url).build() } catch (e: Exception) {
Log.e(TAG, "Error: ", e)
client.newCall(request).enqueue(object : Callback { "Unknown"
override fun onFailure(call: Call, e: IOException) { }
toReturn.set(context.getString(R.string.unavailable))
}
override fun onResponse(call: Call, response: Response) {
toReturn.set(JSONObject(response.body?.string()!!).getString(obj))
Log.d("VMResponse", toReturn.get())
}
})
return toReturn.get()
} }
fun isUpdateAvailable(): Boolean { suspend fun isUpdateAvailable(): Boolean {
val checkUrl = GetJson().AsJSONObject("https://x1nto.github.io/VancedFiles/manager.json") val result = JsonHelper.getJson("https://x1nto.github.io/VancedFiles/manager.json")
val remoteVersion = checkUrl.get("versionCode").asInt val remoteVersion = result.string("versionCode")?.toInt() ?: 0
return remoteVersion > BuildConfig.VERSION_CODE return remoteVersion > BuildConfig.VERSION_CODE
} }

View File

@ -0,0 +1,19 @@
package com.vanced.manager.utils
import com.beust.klaxon.JsonObject
import com.beust.klaxon.Parser
import com.github.kittinunf.fuel.coroutines.awaitString
import com.github.kittinunf.fuel.httpGet
object JsonHelper {
suspend fun getJson(url: String): JsonObject {
val result = url.httpGet()
.awaitString()
val parser: Parser = Parser.default()
val stringBuilder: StringBuilder = StringBuilder(result)
return parser.parse(stringBuilder) as JsonObject
}
}