mirror of
https://github.com/YTVanced/VancedManager
synced 2024-11-23 19:55:11 +00:00
manager language selector and url changer fixes
This commit is contained in:
parent
82060465ae
commit
41fe28a684
24 changed files with 204 additions and 207 deletions
|
@ -21,7 +21,7 @@ android {
|
|||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
versionCode 13
|
||||
versionName "1.3.0b (Arcturus)"
|
||||
versionName "1.3.0 (Arcturus)"
|
||||
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
||||
|
@ -88,11 +88,9 @@ def getLanguageNames() {
|
|||
for (int i = 0; i < langs.size(); i++) {
|
||||
if (langs[i].length() > 2) {
|
||||
Locale loc = new Locale(langs[i].substring(0, langs[i].length() - 3), langs[i].substring(langs[i].length() - 2))
|
||||
project.logger.lifecycle(loc.getDisplayLanguage(loc).capitalize() + " (" + loc.getDisplayCountry(loc).capitalize() + ")")
|
||||
langnames.add(loc.getDisplayLanguage(loc).capitalize() + " (" + loc.getDisplayCountry(loc).capitalize() + ")")
|
||||
} else {
|
||||
Locale loc = new Locale(langs[i])
|
||||
project.logger.lifecycle(loc.getDisplayLanguage(loc).capitalize())
|
||||
langnames.add(loc.getDisplayLanguage(loc).capitalize())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<queries>
|
||||
<package android:name="com.vanced.android.youtube" />
|
||||
|
@ -45,6 +46,7 @@
|
|||
android:name=".ui.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/DarkTheme.Blue"
|
||||
android:configChanges="layoutDirection|locale"
|
||||
android:exported="true"/>
|
||||
|
||||
<meta-data
|
||||
|
|
|
@ -7,15 +7,12 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.AccelerateDecelerateInterpolator
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.Toast
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.databinding.ViewHomeBinding
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModel
|
||||
import kotlinx.android.synthetic.main.include_changelogs.view.*
|
||||
|
||||
class VariantAdapter(private val viewModel: HomeViewModel, private val context: Context) : RecyclerView.Adapter<VariantAdapter.VariantAdapterHolder>() {
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.vanced.manager.core
|
|||
|
||||
import android.app.Application
|
||||
import android.content.res.Configuration
|
||||
import androidx.databinding.ObservableField
|
||||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
||||
import com.beust.klaxon.JsonObject
|
||||
import com.crowdin.platform.Crowdin
|
||||
|
@ -10,14 +11,14 @@ import com.crowdin.platform.data.remote.NetworkType
|
|||
import com.downloader.PRDownloader
|
||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||
import com.vanced.manager.utils.JsonHelper.getJson
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.runBlocking
|
||||
|
||||
open class App: Application() {
|
||||
|
||||
var vanced: JsonObject? = null
|
||||
var music: JsonObject? = null
|
||||
var microg: JsonObject? = null
|
||||
var manager: JsonObject? = null
|
||||
var vanced = ObservableField<JsonObject?>()
|
||||
var music = ObservableField<JsonObject?>()
|
||||
var microg = ObservableField<JsonObject?>()
|
||||
var manager = ObservableField<JsonObject?>()
|
||||
|
||||
override fun onCreate() {
|
||||
loadJsonAsync()
|
||||
|
@ -33,12 +34,13 @@ open class App: Application() {
|
|||
|
||||
}
|
||||
|
||||
fun loadJsonAsync() {
|
||||
val latest = runBlocking { getJson("${getDefaultSharedPreferences(this@App).getString("update_url", baseUrl)}/latest.json") }
|
||||
vanced = latest.obj("vanced")
|
||||
music = latest.obj("music")
|
||||
microg = latest.obj("microg")
|
||||
manager = latest.obj("manager")
|
||||
open fun loadJsonAsync() {
|
||||
val latest = runBlocking { getJson("${getDefaultSharedPreferences(this@App).getString("install_url", baseUrl)}/latest.json") }
|
||||
|
||||
vanced.set(latest?.obj("vanced"))
|
||||
music.set(latest?.obj("music"))
|
||||
microg.set(latest?.obj("microg"))
|
||||
manager.set(latest?.obj("manager"))
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
|
@ -46,4 +48,5 @@ open class App: Application() {
|
|||
Crowdin.onConfigurationChanged()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -6,10 +6,10 @@ import com.downloader.Error
|
|||
import com.downloader.OnDownloadListener
|
||||
import com.downloader.PRDownloader
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.App
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModel.Companion.microgProgress
|
||||
import com.vanced.manager.utils.AppUtils.mutableInstall
|
||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||
import com.vanced.manager.utils.InternetTools.getJsonString
|
||||
import com.vanced.manager.utils.PackageHelper.install
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -21,14 +21,14 @@ object MicrogDownloader {
|
|||
|
||||
fun downloadMicrog(context: Context) {
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val url = getJsonString("microg.json", "url", context)
|
||||
val url = (context.applicationContext as App).microg.get()?.string("url")
|
||||
//downloadId = download(url, "apk", "microg.apk", this@MicrogDownloadService)
|
||||
|
||||
microgProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("apk")?.path, "microg.apk")
|
||||
.build()
|
||||
.setOnStartOrResumeListener {
|
||||
mutableInstall.value = true
|
||||
microgProgress.get()?.downloadingFile?.set(context.getString(R.string.downloading_file, getFileNameFromUrl(url)))
|
||||
microgProgress.get()?.downloadingFile?.set(context.getString(R.string.downloading_file, url?.let { getFileNameFromUrl(it) }))
|
||||
microgProgress.get()?.showDownloadBar?.set(true)
|
||||
}
|
||||
.setOnCancelListener {
|
||||
|
|
|
@ -6,10 +6,10 @@ import com.downloader.Error
|
|||
import com.downloader.OnDownloadListener
|
||||
import com.downloader.PRDownloader
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.App
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModel.Companion.musicProgress
|
||||
import com.vanced.manager.utils.AppUtils.mutableInstall
|
||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||
import com.vanced.manager.utils.InternetTools.getJsonString
|
||||
import com.vanced.manager.utils.PackageHelper.install
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -21,8 +21,7 @@ object MusicDownloader {
|
|||
|
||||
fun downloadMusic(context: Context){
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val version = getJsonString("music.json", "version", context)
|
||||
val url = "https://vanced.app/api/v1/music/v$version.apk"
|
||||
val url = "https://vanced.app/api/v1/music/v${(context.applicationContext as App).music.get()?.string("version")}.apk"
|
||||
|
||||
//downloadId = download(url, "apk", "music.apk", this@MusicDownloadService)
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@ import com.vanced.manager.utils.AppUtils.mutableInstall
|
|||
import com.vanced.manager.utils.InternetTools
|
||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||
import com.vanced.manager.utils.InternetTools.getObjectFromJson
|
||||
import com.vanced.manager.utils.PackageHelper.getPkgVerCode
|
||||
import com.vanced.manager.utils.PackageHelper.installVanced
|
||||
import com.vanced.manager.utils.PackageHelper.installVancedRoot
|
||||
|
@ -50,10 +49,11 @@ object VancedDownloader {
|
|||
|
||||
private const val yPkg = "com.google.android.youtube"
|
||||
private var vancedVersionCode = 0
|
||||
private val vancedVersion by lazy { runBlocking { getObjectFromJson("$installUrl/vanced.json", "version") }}
|
||||
private var vancedVersion: String? = null
|
||||
|
||||
fun downloadVanced(context: Context){
|
||||
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
|
||||
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))val app = context.applicationContext as App
|
||||
val app = context.applicationContext as App
|
||||
File(context.getExternalFilesDir("apks")?.path as String).deleteRecursively()
|
||||
defPrefs = getDefaultSharedPreferences(context)
|
||||
installUrl = defPrefs.getString("install_url", baseUrl)
|
||||
|
@ -61,6 +61,7 @@ object VancedDownloader {
|
|||
variant = defPrefs.getString("vanced_variant", "nonroot")
|
||||
lang = prefs.getString("lang", "en")?.split(", ")?.toTypedArray()
|
||||
theme = prefs.getString("theme", "dark")
|
||||
vancedVersion = app.vanced.get()?.string("version")
|
||||
themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme"
|
||||
hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json"
|
||||
//newInstaller = defPrefs.getBoolean("new_installer", false)
|
||||
|
@ -70,8 +71,8 @@ object VancedDownloader {
|
|||
Build.SUPPORTED_ABIS.contains("arm64-v8a") -> "arm64_v8a"
|
||||
else -> "armeabi_v7a"
|
||||
}
|
||||
val app = context.applicationContext as App
|
||||
vancedVersionCode = app.vanced?.int("versionCode") ?: 0
|
||||
|
||||
vancedVersionCode = app.vanced.get()?.int("versionCode") ?: 0
|
||||
downloadSplits(context)
|
||||
}
|
||||
|
||||
|
|
|
@ -15,19 +15,11 @@ import kotlinx.coroutines.Dispatchers
|
|||
import kotlinx.coroutines.launch
|
||||
|
||||
open class DataModel(
|
||||
private val jsonObject: JsonObject?,
|
||||
app: String,
|
||||
private val jsonObject: ObservableField<JsonObject?>,
|
||||
private val appPkg: String,
|
||||
private val context: Context
|
||||
) {
|
||||
|
||||
private val appPkg =
|
||||
when (app) {
|
||||
"vanced" -> "com.vanced.android.youtube"
|
||||
"vancedRoot" -> "com.google.android.youtube"
|
||||
"microg" -> "com.mgoogle.android.gms"
|
||||
else -> "com.vanced.android.apps.youtube.music"
|
||||
}
|
||||
|
||||
private val versionCode = ObservableInt()
|
||||
private val installedVersionCode = ObservableInt()
|
||||
|
||||
|
@ -40,13 +32,13 @@ open class DataModel(
|
|||
|
||||
fun fetch() = CoroutineScope(Dispatchers.IO).launch {
|
||||
isAppInstalled.set(isPackageInstalled(appPkg, context.packageManager))
|
||||
versionName.set(jsonObject?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable))
|
||||
versionName.set(jsonObject.get()?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable))
|
||||
installedVersionName.set(getPkgVersionName(isAppInstalled.get(), appPkg))
|
||||
versionCode.set(jsonObject?.int("versionCode") ?: 0)
|
||||
versionCode.set(jsonObject.get()?.int("versionCode") ?: 0)
|
||||
installedVersionCode.set(getPkgVersionCode(isAppInstalled.get(), appPkg))
|
||||
buttonTxt.set(compareInt(installedVersionCode.get(), versionCode.get()))
|
||||
buttonIcon.set(compareIntDrawable(installedVersionCode.get(), versionCode.get()))
|
||||
changelog.set(jsonObject?.string("changelog") ?: context.getString(R.string.unavailable))
|
||||
changelog.set(jsonObject.get()?.string("changelog") ?: context.getString(R.string.unavailable))
|
||||
}
|
||||
|
||||
init {
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.vanced.manager.ui
|
|||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.MenuItem
|
||||
|
@ -117,6 +118,17 @@ class MainActivity : AppCompatActivity() {
|
|||
super.attachBaseContext(LanguageContextWrapper.wrap(newBase))
|
||||
}
|
||||
|
||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||
super.onConfigurationChanged(newConfig)
|
||||
recreate() //restarting activity to recreate viewmodels, otherwise some text won't update
|
||||
}
|
||||
|
||||
override fun recreate() {
|
||||
//needed for setting language smh
|
||||
startActivity(Intent(this, this::class.java))
|
||||
finish()
|
||||
}
|
||||
|
||||
private fun initDialogs() {
|
||||
val prefs = getDefaultSharedPreferences(this)
|
||||
val variant = prefs.getString("vanced_variant", "nonroot")
|
||||
|
|
|
@ -1,23 +1,15 @@
|
|||
package com.vanced.manager.ui.fragments
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.downloader.OnDownloadListener
|
||||
import com.downloader.PRDownloader
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.ui.MainActivity
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import java.io.File
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadManager
|
||||
|
||||
class DevSettingsFragment: PreferenceFragmentCompat() {
|
||||
|
||||
|
@ -45,6 +37,12 @@ class DevSettingsFragment: PreferenceFragmentCompat() {
|
|||
true
|
||||
|
||||
}
|
||||
|
||||
findPreference<Preference>("install_url")?.setOnPreferenceClickListener {
|
||||
URLChangeFragment().show(childFragmentManager.beginTransaction(), "Install URL")
|
||||
true
|
||||
}
|
||||
|
||||
val supportedAbis: Array<String> = Build.SUPPORTED_ABIS
|
||||
|
||||
findPreference<Preference>("device_arch")?.summary =
|
||||
|
@ -58,38 +56,7 @@ class DevSettingsFragment: PreferenceFragmentCompat() {
|
|||
|
||||
val forceUpdate: Preference? = findPreference("force_update")
|
||||
forceUpdate?.setOnPreferenceClickListener {
|
||||
runBlocking {
|
||||
launch {
|
||||
val url = "https://github.com/YTVanced/VancedManager/releases/latest/download/manager.apk"
|
||||
//downloadId = activity?.let { download(url, "apk", "manager.apk", it) }!!
|
||||
PRDownloader.download(url, activity?.getExternalFilesDir("apk")?.path, "manager.apk")
|
||||
.build()
|
||||
.start(object : OnDownloadListener {
|
||||
override fun onDownloadComplete() {
|
||||
activity?.let {
|
||||
val apk = File("${activity?.getExternalFilesDir("apk")?.path}/manager.apk")
|
||||
val uri =
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
FileProvider.getUriForFile(activity!!, "${activity?.packageName}.provider", apk)
|
||||
else
|
||||
Uri.fromFile(apk)
|
||||
|
||||
val intent = Intent(Intent.ACTION_VIEW)
|
||||
intent.setDataAndType(uri, "application/vnd.android.package-archive")
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(error: com.downloader.Error?) {
|
||||
Toast.makeText(activity, error.toString(), Toast.LENGTH_SHORT).show()
|
||||
Log.e("VMUpgrade", error.toString())
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
downloadManager(true, requireActivity())
|
||||
true
|
||||
}
|
||||
|
||||
|
|
|
@ -22,12 +22,15 @@ import com.vanced.manager.adapter.VariantAdapter
|
|||
import com.vanced.manager.databinding.FragmentHomeBinding
|
||||
import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModel
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModelFactory
|
||||
import com.vanced.manager.utils.AppUtils
|
||||
|
||||
open class HomeFragment : Fragment() {
|
||||
|
||||
private lateinit var binding: FragmentHomeBinding
|
||||
private val viewModel: HomeViewModel by viewModels()
|
||||
private val viewModel: HomeViewModel by viewModels {
|
||||
HomeViewModelFactory(requireActivity())
|
||||
}
|
||||
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
|
||||
|
||||
private val tabListener = object : TabLayout.OnTabSelectedListener {
|
||||
|
|
|
@ -115,11 +115,6 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
|||
true
|
||||
}
|
||||
|
||||
findPreference<Preference>("install_url")?.setOnPreferenceClickListener {
|
||||
URLChangeFragment().show(childFragmentManager.beginTransaction(), "Install URL")
|
||||
true
|
||||
}
|
||||
|
||||
findPreference<Preference>("clear_files")?.setOnPreferenceClickListener {
|
||||
with(requireActivity()) {
|
||||
listOf("apk", "apks").forEach { dir ->
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.vanced.manager.ui.fragments
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
|
@ -9,9 +10,10 @@ import android.view.ViewGroup
|
|||
import android.widget.EditText
|
||||
import android.widget.TextView
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.App
|
||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||
|
||||
class URLChangeFragment : DialogFragment() {
|
||||
|
@ -29,8 +31,7 @@ class URLChangeFragment : DialogFragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val urlField = view.findViewById<EditText>(R.id.url_input)
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
urlField.setText(prefs.getString("install_url", baseUrl), TextView.BufferType.EDITABLE)
|
||||
urlField.setText(getDefaultSharedPreferences(requireActivity()).getString("install_url", baseUrl), TextView.BufferType.EDITABLE)
|
||||
view.findViewById<MaterialButton>(R.id.url_save).setOnClickListener {
|
||||
val finalUrl =
|
||||
if (urlField.text.startsWith("https://") || urlField.text.startsWith("http://"))
|
||||
|
@ -38,14 +39,15 @@ class URLChangeFragment : DialogFragment() {
|
|||
else
|
||||
"https://${urlField.text}".removeSuffix("/")
|
||||
|
||||
saveUrl(finalUrl, requireActivity())
|
||||
}
|
||||
view.findViewById<MaterialButton>(R.id.url_reset).setOnClickListener {saveUrl(baseUrl, requireActivity())}
|
||||
}
|
||||
|
||||
prefs.edit().putString("install_url", finalUrl).apply()
|
||||
private fun saveUrl(url: String, context: Context) {
|
||||
getDefaultSharedPreferences(requireActivity()).edit().putString("install_url", url).apply()
|
||||
(context.applicationContext as App).loadJsonAsync()
|
||||
dismiss()
|
||||
}
|
||||
view.findViewById<MaterialButton>(R.id.url_reset).setOnClickListener {
|
||||
prefs.edit().putString("install_url", baseUrl).apply()
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,29 +1,19 @@
|
|||
package com.vanced.manager.ui.fragments
|
||||
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.Button
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import com.downloader.OnDownloadListener
|
||||
import com.downloader.PRDownloader
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadManager
|
||||
import com.vanced.manager.utils.InternetTools.isUpdateAvailable
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import java.io.File
|
||||
|
||||
class UpdateCheckFragment : DialogFragment() {
|
||||
|
||||
|
@ -65,57 +55,16 @@ class UpdateCheckFragment : DialogFragment() {
|
|||
view?.findViewById<Button>(R.id.update_center_recheck)?.visibility = View.GONE
|
||||
checkingTxt?.text = getString(R.string.update_found)
|
||||
|
||||
updatebtn?.setOnClickListener { upgradeManager() }
|
||||
updatebtn?.setOnClickListener {
|
||||
downLoadingState(true)
|
||||
downloadManager(false, requireActivity(), view?.findViewById(R.id.update_center_progressbar))
|
||||
downLoadingState(false)
|
||||
}
|
||||
} else
|
||||
checkingTxt?.text = getString(R.string.update_notfound)
|
||||
}
|
||||
}
|
||||
|
||||
private fun upgradeManager() {
|
||||
runBlocking {
|
||||
launch {
|
||||
val loadBar = view?.findViewById<ProgressBar>(R.id.update_center_progressbar)
|
||||
val url = "https://github.com/YTVanced/VancedManager/releases/latest/download/manager.apk"
|
||||
|
||||
downLoadingState(true)
|
||||
|
||||
//downloadId = activity?.let { download(url, "apk", "manager.apk", it) }!!
|
||||
PRDownloader.download(url, activity?.getExternalFilesDir("apk")?.path, "manager.apk")
|
||||
.build()
|
||||
.setOnProgressListener { progress ->
|
||||
val mProgress = progress.currentBytes * 100 / progress.totalBytes
|
||||
loadBar?.visibility = View.VISIBLE
|
||||
loadBar?.progress = mProgress.toInt()
|
||||
}
|
||||
.start(object : OnDownloadListener {
|
||||
override fun onDownloadComplete() {
|
||||
activity?.let {
|
||||
val apk = File("${activity?.getExternalFilesDir("apk")?.path}/manager.apk")
|
||||
val uri =
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
FileProvider.getUriForFile(activity!!, "${activity?.packageName}.provider", apk)
|
||||
else
|
||||
Uri.fromFile(apk)
|
||||
|
||||
val intent = Intent(Intent.ACTION_VIEW)
|
||||
intent.setDataAndType(uri, "application/vnd.android.package-archive")
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(error: com.downloader.Error?) {
|
||||
Toast.makeText(activity, error.toString(), Toast.LENGTH_SHORT).show()
|
||||
downLoadingState(false)
|
||||
Log.e("VMUpgrade", error.toString())
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun downLoadingState(isDownloading: Boolean) {
|
||||
if (isDownloading) {
|
||||
dialog?.setCancelable(false)
|
||||
|
|
|
@ -37,7 +37,7 @@ class VancedLanguageSelectionFragment : Fragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val app = activity?.application as App
|
||||
langs = app.vanced?.array<String>("langs")?.value ?: mutableListOf("null")
|
||||
langs = app.vanced?.get()?.array<String>("langs")?.value ?: mutableListOf("null")
|
||||
loadBoxes(view.findViewById(R.id.lang_button_ll))
|
||||
view.findViewById<MaterialButton>(R.id.vanced_install_finish).setOnClickListener {
|
||||
val chosenLangs = mutableListOf("en")
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.vanced.manager.ui.viewmodels
|
||||
|
||||
import android.app.Application
|
||||
import android.app.Activity
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
|
@ -9,9 +9,9 @@ import android.widget.Toast
|
|||
import androidx.core.content.ContextCompat.startActivity
|
||||
import androidx.databinding.ObservableBoolean
|
||||
import androidx.databinding.ObservableField
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.crowdin.platform.Crowdin
|
||||
import com.downloader.PRDownloader
|
||||
import com.downloader.Status
|
||||
|
@ -27,12 +27,11 @@ import com.vanced.manager.utils.AppUtils.installing
|
|||
import com.vanced.manager.utils.InternetTools
|
||||
import com.vanced.manager.utils.PackageHelper.uninstallApk
|
||||
|
||||
open class HomeViewModel(application: Application): AndroidViewModel(application) {
|
||||
open class HomeViewModel(private val activity: Activity): ViewModel() {
|
||||
|
||||
val app = application
|
||||
private val managerApp = application as App
|
||||
private val manageractivity = activity.application as App
|
||||
|
||||
//val variant = getDefaultSharedPreferences(application).getString("vanced_variant", "nonroot")
|
||||
//val variant = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
|
||||
|
||||
val vanced = ObservableField<DataModel>()
|
||||
val vancedRoot = ObservableField<DataModel>()
|
||||
|
@ -47,18 +46,18 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
|
||||
fun fetchData() {
|
||||
fetching.set(true)
|
||||
managerApp.loadJsonAsync()
|
||||
manageractivity.loadJsonAsync()
|
||||
vanced.get()?.fetch()
|
||||
vancedRoot.get()?.fetch()
|
||||
music.get()?.fetch()
|
||||
microg.get()?.fetch()
|
||||
manager.get()?.fetch()
|
||||
Crowdin.forceUpdate(getApplication())
|
||||
Crowdin.forceUpdate(activity)
|
||||
fetching.set(false)
|
||||
}
|
||||
|
||||
//private val microgSnackbar = Snackbar.make(, R.string.no_microg, Snackbar.LENGTH_LONG).setAction(R.string.install) { downloadMicrog(getApplication()) }
|
||||
private val microgToast = Toast.makeText(app, R.string.no_microg, Toast.LENGTH_LONG)
|
||||
//private val microgSnackbar = Snackbar.make(, R.string.no_microg, Snackbar.LENGTH_LONG).setAction(R.string.install) { downloadMicrog(activity) }
|
||||
private val microgToast = Toast.makeText(activity, R.string.no_microg, Toast.LENGTH_LONG)
|
||||
|
||||
fun openMicrogSettings() {
|
||||
try {
|
||||
|
@ -68,9 +67,9 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
"org.microg.gms.ui.SettingsActivity"
|
||||
)
|
||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
startActivity(getApplication(), intent, null)
|
||||
startActivity(activity, intent, null)
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
Toast.makeText(getApplication(), "Error", Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(activity, "Error", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,12 +80,12 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
"https://t.me/joinchat/AAAAAEHf-pi4jH1SDlAL4w" -> R.color.Telegram
|
||||
"https://twitter.com/YTVanced" -> R.color.Twitter
|
||||
"https://reddit.com/r/vanced" -> R.color.Reddit
|
||||
"https://vanced.app" -> R.color.Vanced
|
||||
"https://vanced.activity" -> R.color.Vanced
|
||||
"https://brave.com/van874" -> R.color.Brave
|
||||
else -> R.color.Vanced
|
||||
}
|
||||
|
||||
InternetTools.openUrl(url, color, getApplication())
|
||||
InternetTools.openUrl(url, color, activity)
|
||||
}
|
||||
|
||||
fun installVanced(variant: String) {
|
||||
|
@ -95,15 +94,15 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
if (variant == "nonroot" && !microg.get()?.isAppInstalled?.get()!!) {
|
||||
microgToast.show()
|
||||
} else {
|
||||
if (app.getSharedPreferences("installPrefs", Context.MODE_PRIVATE).getBoolean("valuesModified", false)) {
|
||||
downloadVanced(app)
|
||||
if (activity.getSharedPreferences("installPrefs", Context.MODE_PRIVATE).getBoolean("valuesModified", false)) {
|
||||
downloadVanced(activity)
|
||||
} else {
|
||||
_navigateDestination.value = Event(R.id.toInstallThemeFragment)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
Toast.makeText(getApplication(), R.string.installation_wait, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(activity, R.string.installation_wait, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
fun installMusic() {
|
||||
|
@ -112,23 +111,23 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
if (!microg.get()?.isAppInstalled?.get()!!) {
|
||||
microgToast.show()
|
||||
} else {
|
||||
downloadMusic(getApplication())
|
||||
downloadMusic(activity)
|
||||
}
|
||||
}
|
||||
} else
|
||||
Toast.makeText(getApplication(), R.string.installation_wait, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(activity, R.string.installation_wait, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
fun installMicrog() {
|
||||
if (!installing.value!!)
|
||||
downloadMicrog(getApplication())
|
||||
downloadMicrog(activity)
|
||||
else
|
||||
Toast.makeText(getApplication(), R.string.installation_wait, Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(activity, R.string.installation_wait, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
fun uninstallVanced(variant: String) = uninstallApk(if (variant == "root") "com.google.android.youtube" else "com.vanced.android.youtube", app)
|
||||
fun uninstallMusic() = uninstallApk("com.vanced.android.apps.youtube.music", app)
|
||||
fun uninstallMicrog() = uninstallApk("com.mgoogle.android.gms", app)
|
||||
fun uninstallVanced(variant: String) = uninstallApk(if (variant == "root") "com.google.android.youtube" else "com.vanced.android.youtube", activity)
|
||||
fun uninstallMusic() = uninstallApk("com.vanced.android.activitys.youtube.music", activity)
|
||||
fun uninstallMicrog() = uninstallApk("com.mgoogle.android.gms", activity)
|
||||
|
||||
fun cancelDownload(downloadId: Int) {
|
||||
PRDownloader.cancel(downloadId)
|
||||
|
@ -149,11 +148,11 @@ open class HomeViewModel(application: Application): AndroidViewModel(application
|
|||
|
||||
init {
|
||||
fetching.set(true)
|
||||
vanced.set(DataModel(managerApp.vanced, "vanced", app))
|
||||
vancedRoot.set(DataModel(managerApp.vanced, "vancedRoot", app))
|
||||
music.set(DataModel(managerApp.music, "music", app))
|
||||
microg.set(DataModel(managerApp.microg, "microg", app))
|
||||
manager.set(DataModel(managerApp.manager, "manager", app))
|
||||
vanced.set(DataModel(manageractivity.vanced, "com.vanced.android.youtube", activity))
|
||||
vancedRoot.set(DataModel(manageractivity.vanced, "com.google.android.youtube", activity))
|
||||
music.set(DataModel(manageractivity.music, "com.vanced.android.apps.youtube.music", activity))
|
||||
microg.set(DataModel(manageractivity.microg, "com.mgoogle.android.gms", activity))
|
||||
manager.set(DataModel(manageractivity.manager, "com.vanced.manager", activity))
|
||||
vancedProgress.set(ProgressModel())
|
||||
musicProgress.set(ProgressModel())
|
||||
microgProgress.set(ProgressModel())
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package com.vanced.manager.ui.viewmodels
|
||||
|
||||
import android.app.Activity
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
|
||||
class HomeViewModelFactory(private val activity: Activity) : ViewModelProvider.Factory {
|
||||
|
||||
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
|
||||
return HomeViewModel(activity) as T
|
||||
}
|
||||
|
||||
}
|
|
@ -2,8 +2,21 @@ package com.vanced.manager.utils
|
|||
|
||||
import android.app.DownloadManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.ProgressBar
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.FileProvider
|
||||
import com.downloader.OnDownloadListener
|
||||
import com.downloader.PRDownloader
|
||||
import com.vanced.manager.R
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.File
|
||||
|
||||
object DownloadHelper {
|
||||
|
||||
|
@ -19,4 +32,48 @@ object DownloadHelper {
|
|||
return downloadManager.enqueue(request)
|
||||
}
|
||||
|
||||
fun downloadManager(forceUpdate: Boolean, context: Context, loadBar: ProgressBar? = null) {
|
||||
CoroutineScope(if (forceUpdate) Dispatchers.IO else Dispatchers.Main).launch {
|
||||
val url = "https://github.com/YTVanced/VancedManager/releases/latest/download/manager.apk"
|
||||
//downloadId = activity?.let { download(url, "apk", "manager.apk", it) }!!
|
||||
PRDownloader.download(url, context.getExternalFilesDir("apk")?.path, "manager.apk")
|
||||
.build().apply{
|
||||
if (!forceUpdate) setOnProgressListener {progress ->
|
||||
val mProgress = progress.currentBytes * 100 / progress.totalBytes
|
||||
loadBar?.visibility = View.VISIBLE
|
||||
loadBar?.progress = mProgress.toInt()
|
||||
}
|
||||
start(object : OnDownloadListener {
|
||||
override fun onDownloadComplete() {
|
||||
context.let {
|
||||
val apk =
|
||||
File("${context.getExternalFilesDir("apk")?.path}/manager.apk")
|
||||
val uri =
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
FileProvider.getUriForFile(
|
||||
context,
|
||||
"${context.packageName}.provider",
|
||||
apk
|
||||
)
|
||||
else
|
||||
Uri.fromFile(apk)
|
||||
|
||||
val intent = Intent(Intent.ACTION_VIEW)
|
||||
intent.setDataAndType(uri, "application/vnd.android.package-archive")
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(error: com.downloader.Error?) {
|
||||
Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show()
|
||||
Log.e("VMUpgrade", error.toString())
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ object InternetTools {
|
|||
|
||||
suspend fun getObjectFromJson(url: String, obj: String): String {
|
||||
return try {
|
||||
JsonHelper.getJson(url).string(obj) ?: ""
|
||||
JsonHelper.getJson(url)?.string(obj) ?: ""
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Error: ", e)
|
||||
""
|
||||
|
@ -39,7 +39,7 @@ object InternetTools {
|
|||
|
||||
suspend fun getArrayFromJson(url: String, array: String): MutableList<String> {
|
||||
return try {
|
||||
JsonHelper.getJson(url).array<String>(array)?.value ?: mutableListOf("null")
|
||||
JsonHelper.getJson(url)?.array<String>(array)?.value ?: mutableListOf("null")
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Error: ", e)
|
||||
mutableListOf("null")
|
||||
|
@ -49,7 +49,7 @@ object InternetTools {
|
|||
suspend fun getJsonInt(file: String, obj: String, context: Context): Int {
|
||||
val installUrl = getDefaultSharedPreferences(context).getString("install_url", baseUrl)
|
||||
return try {
|
||||
JsonHelper.getJson("$installUrl/$file").int(obj) ?: 0
|
||||
JsonHelper.getJson("$installUrl/$file")?.int(obj) ?: 0
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Error: ", e)
|
||||
0
|
||||
|
@ -59,7 +59,7 @@ object InternetTools {
|
|||
suspend fun getJsonString(file: String, obj: String, context: Context): String {
|
||||
val installUrl = getDefaultSharedPreferences(context).getString("install_url", baseUrl)
|
||||
return try {
|
||||
JsonHelper.getJson("$installUrl/$file").string(obj) ?: context.getString(R.string.unavailable)
|
||||
JsonHelper.getJson("$installUrl/$file")?.string(obj) ?: context.getString(R.string.unavailable)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Error: ", e)
|
||||
context.getString(R.string.unavailable)
|
||||
|
@ -68,7 +68,7 @@ object InternetTools {
|
|||
|
||||
suspend fun isUpdateAvailable(): Boolean {
|
||||
val result = try {
|
||||
JsonHelper.getJson("https://ytvanced.github.io/VancedBackend/manager.json").int("versionCode") ?: 0
|
||||
JsonHelper.getJson("https://ytvanced.github.io/VancedBackend/manager.json")?.int("versionCode") ?: 0
|
||||
} catch (e: Exception) {
|
||||
0
|
||||
}
|
||||
|
|
|
@ -11,14 +11,17 @@ object JsonHelper {
|
|||
|
||||
var dataMap: HashMap<String, JsonObject> = HashMap()
|
||||
|
||||
suspend fun getJson(url: String): JsonObject
|
||||
{
|
||||
return if(dataMap.containsKey(url)) {
|
||||
suspend fun getJson(url: String): JsonObject? {
|
||||
return try {
|
||||
if(dataMap.containsKey(url)) {
|
||||
dataMap[url]!!
|
||||
} else {
|
||||
dataMap[url] = getSuspendJson(url)
|
||||
dataMap[url]!!
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getSuspendJson(url: String): JsonObject =
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.vanced.manager.utils
|
|||
import android.content.Context
|
||||
import android.content.ContextWrapper
|
||||
import android.content.res.Configuration
|
||||
import android.content.res.Resources
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.crowdin.platform.Crowdin
|
||||
import java.util.*
|
||||
|
@ -13,18 +14,22 @@ class LanguageContextWrapper(base: Context?) : ContextWrapper(base) {
|
|||
|
||||
fun wrap(context: Context): ContextWrapper {
|
||||
val config: Configuration = context.resources.configuration
|
||||
context.createConfigurationContext(setLocale(config, context))
|
||||
Crowdin.wrapContext(context)
|
||||
return LanguageContextWrapper(context)
|
||||
}
|
||||
|
||||
private fun setLocale(config: Configuration, context: Context): Configuration {
|
||||
val pref = PreferenceManager.getDefaultSharedPreferences(context).getString("manager_lang", "System Default")
|
||||
val locale =
|
||||
when {
|
||||
pref == "System Default" -> Locale(config.locale.displayLanguage)
|
||||
pref == "System Default" -> Locale(Resources.getSystem().configuration.locale.language)
|
||||
pref?.length!! > 2 -> Locale(pref.substring(0, pref.length - 3), pref.substring(pref.length - 2))
|
||||
else -> Locale(pref)
|
||||
}
|
||||
Locale.setDefault(locale)
|
||||
config.setLocale(locale)
|
||||
context.createConfigurationContext(config)
|
||||
Crowdin.wrapContext(context)
|
||||
return LanguageContextWrapper(context)
|
||||
return config
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -202,7 +202,7 @@ object PackageHelper {
|
|||
|
||||
Shell.getShell {
|
||||
val application = context.applicationContext as App
|
||||
val vancedApplication = application.vanced?.int("versionCode")
|
||||
val vancedApplication = application.vanced.get()?.int("versionCode")
|
||||
val vancedVersionCode = if (vancedApplication != null) vancedApplication else { application.loadJsonAsync(); vancedApplication }
|
||||
val apkFilesPath = context.getExternalFilesDir("apks")?.path
|
||||
val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) }
|
||||
|
|
|
@ -12,6 +12,10 @@
|
|||
android:title="Force Manager Update"
|
||||
android:summary="Update manager without comparing versionCode"/>
|
||||
|
||||
<Preference
|
||||
android:title="@string/update_url"
|
||||
android:key="install_url" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="Device info">
|
||||
|
||||
|
|
|
@ -76,10 +76,6 @@
|
|||
android:title="@string/chosen_install_values"
|
||||
android:key="vanced_chosen_modes" />
|
||||
|
||||
<Preference
|
||||
android:title="@string/update_url"
|
||||
android:key="install_url" />
|
||||
|
||||
<Preference
|
||||
android:title="@string/clear_files"
|
||||
android:key="clear_files"/>
|
||||
|
|
Loading…
Reference in a new issue