added a version selector and more dialogs

This commit is contained in:
Xinto 2020-11-05 22:26:27 +04:00
parent 6015b072b6
commit c897f55039
76 changed files with 463 additions and 434 deletions

View File

@ -13,7 +13,7 @@
#} #}
-keep class com.vanced.manager.core.App -keep class com.vanced.manager.core.App
-keepnames class androidx.navigation.fragment.NavHostFragment -keep class com.crowdin.platform.* { *; }
# Uncomment this to preserve the line number information for # Uncomment this to preserve the line number information for
# debugging stack traces. # debugging stack traces.

View File

@ -50,14 +50,14 @@
<activity <activity
android:name=".ui.WelcomeActivity" android:name=".ui.WelcomeActivity"
android:theme="@style/DarkTheme.Blue"/> android:theme="@style/DarkTheme_Blue"/>
<activity <activity
android:name=".ui.MainActivity" android:name=".ui.MainActivity"
android:configChanges="layoutDirection|locale" android:configChanges="layoutDirection|locale"
android:exported="true" android:exported="true"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/DarkTheme.Blue"> android:theme="@style/DarkTheme_Blue">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />

View File

@ -19,7 +19,7 @@ class AppListAdapter(
) : RecyclerView.Adapter<AppListAdapter.ListViewHolder>() { ) : RecyclerView.Adapter<AppListAdapter.ListViewHolder>() {
val apps = mutableListOf<String>() val apps = mutableListOf<String>()
val dataModels = mutableListOf<DataModel?>() private val dataModels = mutableListOf<DataModel?>()
private val rootDataModels = mutableListOf<DataModel?>() private val rootDataModels = mutableListOf<DataModel?>()
private val prefs = getDefaultSharedPreferences(context) private val prefs = getDefaultSharedPreferences(context)
private var itemCount = 0 private var itemCount = 0

View File

@ -0,0 +1,40 @@
package com.vanced.manager.adapter
import android.content.Context
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
import com.vanced.manager.model.AppVersionsModel
class AppVersionsAdapter(context: Context, private var values: Array<AppVersionsModel>) : ArrayAdapter<AppVersionsModel?>(context, android.R.layout.simple_spinner_dropdown_item, values) {
override fun getCount(): Int {
return values.size
}
override fun getItem(position: Int): AppVersionsModel {
return values[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val label = super.getView(position, convertView, parent) as TextView
label.text = values[position].version
return label
}
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
val label = super.getDropDownView(position, convertView, parent) as TextView
label.text = values[position].version
return label
}
fun getPrefValue(position: Int): String {
return values[position].value
}
}

View File

@ -13,6 +13,7 @@ import com.crowdin.platform.data.remote.NetworkType
import com.downloader.PRDownloader import com.downloader.PRDownloader
import com.vanced.manager.BuildConfig.* import com.vanced.manager.BuildConfig.*
import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.InternetTools.baseUrl
import com.vanced.manager.utils.InternetTools.loadJson
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
@ -20,17 +21,10 @@ import kotlinx.coroutines.launch
open class App: Application() { open class App: Application() {
var vanced = ObservableField<JsonObject?>()
var music = ObservableField<JsonObject?>()
var microg = ObservableField<JsonObject?>()
var manager = ObservableField<JsonObject?>()
private val prefs by lazy { getDefaultSharedPreferences(this) } private val prefs by lazy { getDefaultSharedPreferences(this) }
//var braveTiers = ObservableField<JsonObject?>()
override fun onCreate() { override fun onCreate() {
loadJson() loadJson(this)
super.onCreate() super.onCreate()
PRDownloader.initialize(this) PRDownloader.initialize(this)
@ -39,7 +33,9 @@ open class App: Application() {
withDistributionHash(CROWDIN_HASH) withDistributionHash(CROWDIN_HASH)
withNetworkType(NetworkType.WIFI) withNetworkType(NetworkType.WIFI)
if (ENABLE_CROWDIN_AUTH) { if (ENABLE_CROWDIN_AUTH) {
if (prefs.getBoolean("crowdin_real_time", false))
withRealTimeUpdates() withRealTimeUpdates()
withSourceLanguage("en") withSourceLanguage("en")
withAuthConfig(AuthConfig(CROWDIN_CLIENT_ID, CROWDIN_CLIENT_SECRET, null)) withAuthConfig(AuthConfig(CROWDIN_CLIENT_ID, CROWDIN_CLIENT_SECRET, null))
withScreenshotEnabled() withScreenshotEnabled()
@ -53,32 +49,6 @@ open class App: Application() {
} }
open fun loadJson() = CoroutineScope(Dispatchers.IO).launch {
val installUrl = prefs.getString("install_url", baseUrl)
val latest = getJson("$installUrl/latest.json")
// braveTiers.apply {
// set(getJson("$installUrl/sponsor.json"))
// notifyChange()
// }
vanced.apply {
set(latest?.obj("vanced"))
notifyChange()
}
music.apply {
set(latest?.obj("music"))
notifyChange()
}
microg.apply {
set(latest?.obj("microg"))
notifyChange()
}
manager.apply {
set(latest?.obj("manager"))
notifyChange()
}
}
override fun onConfigurationChanged(newConfig: Configuration) { override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig) super.onConfigurationChanged(newConfig)
Crowdin.onConfigurationChanged() Crowdin.onConfigurationChanged()

View File

@ -8,6 +8,7 @@ import com.vanced.manager.R
import com.vanced.manager.core.App import com.vanced.manager.core.App
import com.vanced.manager.utils.DownloadHelper.downloadProgress import com.vanced.manager.utils.DownloadHelper.downloadProgress
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
import com.vanced.manager.utils.InternetTools.microg
import com.vanced.manager.utils.PackageHelper.install import com.vanced.manager.utils.PackageHelper.install
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -19,7 +20,7 @@ object MicrogDownloader {
context: Context, context: Context,
) { ) {
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
val url = (context.applicationContext as App).microg.get()?.string("url") val url = microg.get()?.string("url")
downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("microg")?.path, "microg.apk") downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("microg")?.path, "microg.apk")
.build() .build()

View File

@ -10,6 +10,7 @@ import com.vanced.manager.core.App
import com.vanced.manager.utils.DownloadHelper.downloadProgress import com.vanced.manager.utils.DownloadHelper.downloadProgress
import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.InternetTools.baseUrl
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
import com.vanced.manager.utils.InternetTools.music
import com.vanced.manager.utils.PackageHelper.install import com.vanced.manager.utils.PackageHelper.install
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -23,7 +24,7 @@ object MusicDownloader {
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
val prefs = getDefaultSharedPreferences(context) val prefs = getDefaultSharedPreferences(context)
variant = prefs.getString("vanced_variant", "nonroot") variant = prefs.getString("vanced_variant", "nonroot")
val url = "${prefs.getString("install_url", baseUrl)}/music/v${(context.applicationContext as App).music.get()?.string("version")}.apk" val url = "${prefs.getString("install_url", baseUrl)}/music/v${music.get()?.string("version")}.apk"
downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("music/$variant")?.path, "music.apk") downloadProgress.get()?.currentDownload = PRDownloader.download(url, context.getExternalFilesDir("music/$variant")?.path, "music.apk")
.build() .build()

View File

@ -10,12 +10,14 @@ import com.downloader.PRDownloader
import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.logEvent import com.google.firebase.analytics.ktx.logEvent
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.core.App
import com.vanced.manager.utils.AppUtils.vancedRootPkg import com.vanced.manager.utils.AppUtils.vancedRootPkg
import com.vanced.manager.utils.DownloadHelper.downloadProgress import com.vanced.manager.utils.DownloadHelper.downloadProgress
import com.vanced.manager.utils.Extensions.convertToAppVersions
import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.InternetTools.baseUrl import com.vanced.manager.utils.InternetTools.baseUrl
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
import com.vanced.manager.utils.InternetTools.vanced
import com.vanced.manager.utils.InternetTools.vancedVersions
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
import com.vanced.manager.utils.PackageHelper.getPkgVerCode import com.vanced.manager.utils.PackageHelper.getPkgVerCode
import com.vanced.manager.utils.PackageHelper.installVanced import com.vanced.manager.utils.PackageHelper.installVanced
@ -53,16 +55,15 @@ object VancedDownloader {
private var downloadPath: String? = null private var downloadPath: String? = null
fun downloadVanced(context: Context) { fun downloadVanced(context: Context) {
val app = context.applicationContext as App
defPrefs = getDefaultSharedPreferences(context) defPrefs = getDefaultSharedPreferences(context)
installUrl = defPrefs.getString("install_url", baseUrl) installUrl = defPrefs.getString("install_url", baseUrl)
prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE) prefs = context.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
variant = defPrefs.getString("vanced_variant", "nonroot") variant = defPrefs.getString("vanced_variant", "nonroot")
downloadPath = context.getExternalFilesDir("vanced/$variant")?.path downloadPath = context.getExternalFilesDir("vanced/$variant")?.path
File(downloadPath.toString()).deleteRecursively() File(downloadPath.toString()).deleteRecursively()
lang = prefs.getString("lang", getDefaultVancedLanguages(app))?.split(", ")?.toMutableList() lang = prefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toMutableList()
theme = prefs.getString("theme", "dark") theme = prefs.getString("theme", "dark")
vancedVersion = app.vanced.get()?.string("version") vancedVersion = defPrefs.getString("vanced_version", vancedVersions.get()?.value?.convertToAppVersions()?.get(0)?.value)
themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme" themePath = "$installUrl/apks/v$vancedVersion/$variant/Theme"
hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json" hashUrl = "apks/v$vancedVersion/$variant/Theme/hash.json"
//newInstaller = defPrefs.getBoolean("new_installer", false) //newInstaller = defPrefs.getBoolean("new_installer", false)
@ -74,7 +75,7 @@ object VancedDownloader {
} }
count = 0 count = 0
vancedVersionCode = app.vanced.get()?.int("versionCode") ?: 0 vancedVersionCode = vanced.get()?.int("versionCode") ?: 0
downloadSplits(context) downloadSplits(context)
} }

View File

@ -0,0 +1,6 @@
package com.vanced.manager.model
data class AppVersionsModel(
val version: String,
val value: String
)

View File

@ -3,11 +3,8 @@ package com.vanced.manager.model
import android.content.Context import android.content.Context
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Build import android.os.Build
import androidx.core.content.ContextCompat import androidx.databinding.*
import androidx.databinding.Observable import com.beust.klaxon.JsonArray
import androidx.databinding.ObservableBoolean
import androidx.databinding.ObservableField
import androidx.databinding.ObservableInt
import com.beust.klaxon.JsonObject import com.beust.klaxon.JsonObject
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.utils.PackageHelper.isPackageInstalled import com.vanced.manager.utils.PackageHelper.isPackageInstalled
@ -20,7 +17,8 @@ open class DataModel(
private val context: Context, private val context: Context,
val appPkg: String, val appPkg: String,
val appName: String, val appName: String,
val appIcon: Drawable? val appIcon: Drawable?,
appVersions: ObservableField<JsonArray<String>>? = null
) { ) {
private val versionCode = ObservableInt() private val versionCode = ObservableInt()
@ -28,20 +26,21 @@ open class DataModel(
val isAppInstalled = ObservableBoolean() val isAppInstalled = ObservableBoolean()
val versionName = ObservableField<String>() val versionName = ObservableField<String>()
//val versions = ObservableField<Array<AppVersionsModel>>()
val installedVersionName = ObservableField<String>() val installedVersionName = ObservableField<String>()
val buttonTxt = ObservableField<String>() val buttonTxt = ObservableField<String>()
//val buttonIcon = ObservableField<Drawable>()
val changelog = ObservableField<String>() val changelog = ObservableField<String>()
fun fetch() = CoroutineScope(Dispatchers.IO).launch { fun fetch() = CoroutineScope(Dispatchers.IO).launch {
val jobj = jsonObject.get()
isAppInstalled.set(isPackageInstalled(appPkg, context.packageManager)) isAppInstalled.set(isPackageInstalled(appPkg, context.packageManager))
versionName.set(jsonObject.get()?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable)) versionName.set(jobj?.string("version")?.removeSuffix("-vanced") ?: context.getString(R.string.unavailable))
//versions.set(appVersions?.get()?.value?.convertToAppVersions())
installedVersionName.set(getPkgVersionName(isAppInstalled.get(), appPkg)) installedVersionName.set(getPkgVersionName(isAppInstalled.get(), appPkg))
versionCode.set(jsonObject.get()?.int("versionCode") ?: 0) versionCode.set(jobj?.int("versionCode") ?: 0)
installedVersionCode.set(getPkgVersionCode(isAppInstalled.get(), appPkg)) installedVersionCode.set(getPkgVersionCode(isAppInstalled.get(), appPkg))
buttonTxt.set(compareInt(installedVersionCode.get(), versionCode.get())) buttonTxt.set(compareInt(installedVersionCode.get(), versionCode.get()))
//buttonIcon.set(compareIntDrawable(installedVersionCode.get(), versionCode.get())) changelog.set(jobj?.string("changelog") ?: context.getString(R.string.unavailable))
changelog.set(jsonObject.get()?.string("changelog") ?: context.getString(R.string.unavailable))
} }
init { init {
@ -50,7 +49,11 @@ open class DataModel(
override fun onPropertyChanged(sender: Observable?, propertyId: Int) { override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
fetch() fetch()
} }
})
appVersions?.addOnPropertyChangedCallback(object : Observable.OnPropertyChangedCallback() {
override fun onPropertyChanged(sender: Observable?, propertyId: Int) {
fetch()
}
}) })
} }
@ -83,13 +86,4 @@ open class DataModel(
} }
private fun compareIntDrawable(int1: Int, int2: Int): Drawable? {
return when {
int1 == 0 -> ContextCompat.getDrawable(context, R.drawable.ic_download)
int2 > int1 -> ContextCompat.getDrawable(context, R.drawable.ic_update)
int2 == int1 -> ContextCompat.getDrawable(context, R.drawable.ic_done)
else -> ContextCompat.getDrawable(context, R.drawable.ic_download)
}
}
} }

View File

@ -17,6 +17,7 @@ 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.firebase.messaging.FirebaseMessaging import com.google.firebase.messaging.FirebaseMessaging
import com.vanced.manager.BuildConfig.ENABLE_CROWDIN_AUTH
import com.vanced.manager.R import com.vanced.manager.R
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
@ -27,6 +28,8 @@ import com.vanced.manager.ui.fragments.SettingsFragmentDirections
import com.vanced.manager.utils.Extensions.show import com.vanced.manager.utils.Extensions.show
import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.LanguageContextWrapper import com.vanced.manager.utils.LanguageContextWrapper
import com.vanced.manager.utils.LanguageHelper.authCrowdin
import com.vanced.manager.utils.LanguageHelper.onActivityResult
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
@ -48,8 +51,10 @@ class MainActivity : AppCompatActivity() {
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
setFinalTheme(this) setFinalTheme()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
if (ENABLE_CROWDIN_AUTH)
authCrowdin()
binding = DataBindingUtil.setContentView(this, R.layout.activity_main) binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
@ -80,13 +85,12 @@ class MainActivity : AppCompatActivity() {
} }
override fun onResume() { override fun onResume() {
setFinalTheme(this) setFinalTheme()
super.onResume() super.onResume()
Crowdin.registerDataLoadingObserver(loadingObserver) Crowdin.registerDataLoadingObserver(loadingObserver)
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
android.R.id.home -> { android.R.id.home -> {
onBackPressedDispatcher.onBackPressed() onBackPressedDispatcher.onBackPressed()
@ -117,6 +121,11 @@ class MainActivity : AppCompatActivity() {
super.attachBaseContext(Crowdin.wrapContext(LanguageContextWrapper.wrap(newBase))) super.attachBaseContext(Crowdin.wrapContext(LanguageContextWrapper.wrap(newBase)))
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
onActivityResult(requestCode)
}
override fun onConfigurationChanged(newConfig: Configuration) { override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig) super.onConfigurationChanged(newConfig)
recreate() //restarting activity to recreate viewmodels, otherwise some text won't update recreate() //restarting activity to recreate viewmodels, otherwise some text won't update

View File

@ -1,38 +0,0 @@
package com.vanced.manager.ui.core
import android.graphics.Canvas
import android.graphics.Rect
import android.graphics.drawable.Drawable
import android.view.View
import androidx.recyclerview.widget.RecyclerView
class ItemDecoration(private val line: Drawable?) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
with(outRect) {
top = 4
bottom = 4
}
}
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
val dividerLeft = parent.paddingLeft
val dividerRight = parent.width - parent.paddingRight
val childCount = parent.childCount
(0..childCount - 2).forEach {
val child = parent.getChildAt(it)
val params = child.layoutParams as RecyclerView.LayoutParams
val dividerTop: Int = child.bottom + params.bottomMargin
val dividerBottom: Int = dividerTop + line!!.intrinsicHeight
line.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom)
line.draw(c)
}
}
}

View File

@ -2,7 +2,6 @@ package com.vanced.manager.ui.core
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.CompoundButton import android.widget.CompoundButton
import android.widget.FrameLayout import android.widget.FrameLayout
@ -30,15 +29,14 @@ class PreferenceSwitch @JvmOverloads constructor(
override fun onFinishInflate() { override fun onFinishInflate() {
super.onFinishInflate() super.onFinishInflate()
preference_switch.isChecked = prefs.getBoolean(prefKey, defValue)
setOnClickListener { setOnClickListener {
preference_switch.isChecked = !preference_switch.isChecked preference_switch.isChecked = !preference_switch.isChecked
Log.d("clickTest", "clicked")
} }
preference_switch.setOnCheckedChangeListener { buttonView, isChecked -> preference_switch.setOnCheckedChangeListener { buttonView, isChecked ->
prefs.edit().putBoolean(prefKey, isChecked).apply() prefs.edit().putBoolean(prefKey, isChecked).apply()
mListener?.onChecked(buttonView, isChecked) mListener?.onChecked(buttonView, isChecked)
} }
} }
fun setOnCheckedListener(method: (buttonView: CompoundButton, isChecked: Boolean) -> Unit) { fun setOnCheckedListener(method: (buttonView: CompoundButton, isChecked: Boolean) -> Unit) {
@ -61,8 +59,10 @@ class PreferenceSwitch @JvmOverloads constructor(
val key = typedArray.getText(R.styleable.PreferenceSwitch_switch_key) val key = typedArray.getText(R.styleable.PreferenceSwitch_switch_key)
val value = typedArray.getBoolean(R.styleable.PreferenceSwitch_switch_def_value, false) val value = typedArray.getBoolean(R.styleable.PreferenceSwitch_switch_def_value, false)
if (key != null) if (key != null) {
prefKey = key.toString() prefKey = key.toString()
preference_switch.isChecked = prefs.getBoolean(key.toString(), value)
}
defValue = value defValue = value
preference_switch_title.text = title preference_switch_title.text = title

View File

@ -0,0 +1,62 @@
package com.vanced.manager.ui.dialogs
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.edit
import androidx.databinding.DataBindingUtil
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.radiobutton.MaterialRadioButton
import com.vanced.manager.R
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
import com.vanced.manager.model.AppVersionsModel
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
import com.vanced.manager.utils.Extensions.getDefaultPrefs
import com.vanced.manager.utils.Extensions.show
class AppVersionSelectorDialog(
private val versions: Array<AppVersionsModel>,
private val app: String
) : BottomSheetDialogFragment() {
private lateinit var binding: DialogBottomRadioButtonBinding
private val prefs by lazy { requireActivity().getDefaultPrefs() }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.dialog_bottom_radio_button, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
loadBoxes()
view.findViewWithTag<MaterialRadioButton>(prefs.getString("${app}_version", versions[0].value)).isChecked = true
binding.dialogTitle.text = requireActivity().getString(R.string.version)
binding.dialogSave.setOnClickListener {
prefs.edit {
putString("${app}_version", binding.dialogRadiogroup.getCheckedButtonTag())
}
dismiss()
VancedPreferencesDialog().show(requireActivity())
}
}
private fun loadBoxes() {
requireActivity().runOnUiThread {
for (i in versions.indices) {
val rb = MaterialRadioButton(requireActivity()).apply {
text = versions[i].version
tag = versions[i].value
textSize = 18f
}
binding.dialogRadiogroup.addView(rb, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
}
}
}
}

View File

@ -15,7 +15,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import com.google.android.material.checkbox.MaterialCheckBox import com.google.android.material.checkbox.MaterialCheckBox
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.core.App import com.vanced.manager.utils.InternetTools.vanced
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -37,8 +37,7 @@ class VancedLanguageSelectionDialog : BottomSheetDialogFragment() {
@ExperimentalStdlibApi @ExperimentalStdlibApi
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val app = activity?.application as App langs = vanced.get()?.array<String>("langs")?.value ?: mutableListOf("null")
langs = app.vanced.get()?.array<String>("langs")?.value ?: mutableListOf("null")
loadBoxes(view.findViewById(R.id.lang_button_ll)) loadBoxes(view.findViewById(R.id.lang_button_ll))
view.findViewById<MaterialButton>(R.id.vanced_install_finish).setOnClickListener { view.findViewById<MaterialButton>(R.id.vanced_install_finish).setOnClickListener {
val chosenLangs = mutableListOf<String>() val chosenLangs = mutableListOf<String>()
@ -62,7 +61,7 @@ class VancedLanguageSelectionDialog : BottomSheetDialogFragment() {
@ExperimentalStdlibApi @ExperimentalStdlibApi
private fun loadBoxes(ll: LinearLayout) { private fun loadBoxes(ll: LinearLayout) {
CoroutineScope(Dispatchers.Main).launch { CoroutineScope(Dispatchers.Main).launch {
val langPrefs = prefs.getString("lang", getDefaultVancedLanguages(requireActivity())) val langPrefs = prefs.getString("lang", getDefaultVancedLanguages())
if (this@VancedLanguageSelectionDialog::langs.isInitialized) { if (this@VancedLanguageSelectionDialog::langs.isInitialized) {
if (!langs.contains("null")) { if (!langs.contains("null")) {
langs.forEach { lang -> langs.forEach { lang ->

View File

@ -5,14 +5,15 @@ 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.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.adapter.VancedPrefArray
import com.vanced.manager.databinding.DialogInstallationPreferencesBinding import com.vanced.manager.databinding.DialogInstallationPreferencesBinding
import com.vanced.manager.model.VancedPrefModel import com.vanced.manager.model.AppVersionsModel
import com.vanced.manager.utils.Extensions.convertToAppTheme
import com.vanced.manager.utils.Extensions.convertToAppVersions
import com.vanced.manager.utils.Extensions.show
import com.vanced.manager.utils.InternetTools.vancedVersions
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
import java.util.* import java.util.*
@ -33,7 +34,7 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val prefs = requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE) val prefs = requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
val langPrefs = prefs.getString("lang", getDefaultVancedLanguages(requireActivity()))?.split(", ")?.toTypedArray() val langPrefs = prefs.getString("lang", getDefaultVancedLanguages())?.split(", ")?.toTypedArray()
val showLang = mutableListOf<String>() val showLang = mutableListOf<String>()
if (langPrefs != null) { if (langPrefs != null) {
for (lang in langPrefs) { for (lang in langPrefs) {
@ -41,37 +42,25 @@ class VancedPreferencesDialog : BottomSheetDialogFragment() {
showLang.add(loc.getDisplayLanguage(loc).capitalize(Locale.ROOT)) showLang.add(loc.getDisplayLanguage(loc).capitalize(Locale.ROOT))
} }
} }
val vancedVersionsConv = vancedVersions.get()?.value?.convertToAppVersions() ?: arrayOf(AppVersionsModel("", ""))
val darkTheme = VancedPrefModel( binding.chosenTheme.text = requireActivity().getString(R.string.chosen_theme, prefs.getString("theme", "dark")?.convertToAppTheme(requireActivity()))
requireActivity().getString(R.string.install_light_dark), binding.chosenVersion.text = requireActivity().getString(R.string.chosen_version, prefs.getString("vanced_version", vancedVersionsConv[0].value))
"dark" binding.chosenLang.text = requireActivity().getString(R.string.chosen_lang, showLang)
)
val blackTheme = VancedPrefModel( binding.openThemeSelector.setOnClickListener {
requireActivity().getString(R.string.install_light_black), dismiss()
"black" VancedThemeDialog().show(requireActivity())
) }
val adapter = arrayOf(darkTheme, blackTheme) binding.openVersionSelector.setOnClickListener {
binding.themeSpinner.adapter = VancedPrefArray(requireActivity(), android.R.layout.simple_spinner_dropdown_item, adapter) dismiss()
binding.themeSpinner.setSelection(if (prefs.getString("theme", "dark") == "dark") 0 else 1) AppVersionSelectorDialog(vancedVersionsConv, "vanced").show(requireActivity())
}
binding.openLanguageSelector.setOnClickListener { binding.openLanguageSelector.setOnClickListener {
dismiss() dismiss()
VancedLanguageSelectionDialog().show(requireActivity().supportFragmentManager, "") VancedLanguageSelectionDialog().show(requireActivity())
}
binding.chosenLang.text = requireActivity().getString(R.string.chosen_lang, showLang)
binding.themeSpinner.onItemSelectedListener = object : OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View, position: Int, id: Long) {
prefs.edit().putString("theme", adapter[position].value).apply()
}
override fun onNothingSelected(parent: AdapterView<*>?) {
return
}
} }
binding.chosenPrefsInstall.setOnClickListener { binding.chosenPrefsInstall.setOnClickListener {

View File

@ -0,0 +1,58 @@
package com.vanced.manager.ui.dialogs
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.edit
import androidx.databinding.DataBindingUtil
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.radiobutton.MaterialRadioButton
import com.vanced.manager.R
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
import com.vanced.manager.utils.Extensions.convertToAppTheme
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
import com.vanced.manager.utils.Extensions.show
import com.vanced.manager.utils.InternetTools.vanced
import java.util.*
class VancedThemeDialog : BottomSheetDialogFragment() {
private lateinit var binding: DialogBottomRadioButtonBinding
private val prefs by lazy { requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE) }
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.dialog_bottom_radio_button, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadButtons()
binding.dialogTitle.text = requireActivity().getString(R.string.theme)
view.findViewWithTag<MaterialRadioButton>(prefs.getString("theme", "dark")).isChecked = true
binding.dialogSave.setOnClickListener {
prefs.edit { putString("theme", binding.dialogRadiogroup.getCheckedButtonTag()) }
dismiss()
VancedPreferencesDialog().show(requireActivity())
}
}
private fun loadButtons() {
requireActivity().runOnUiThread {
vanced.get()?.array<String>("themes")?.value?.forEach { theme ->
val rb = MaterialRadioButton(requireActivity()).apply {
text = theme.convertToAppTheme(requireActivity())
tag = theme
textSize = 18f
}
binding.dialogRadiogroup.addView(rb, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
}
}
}
}

View File

@ -16,6 +16,7 @@ import com.vanced.manager.R
import com.vanced.manager.ui.WelcomeActivity import com.vanced.manager.ui.WelcomeActivity
import com.vanced.manager.ui.dialogs.ManagerUpdateDialog import com.vanced.manager.ui.dialogs.ManagerUpdateDialog
import com.vanced.manager.ui.dialogs.URLChangeDialog import com.vanced.manager.ui.dialogs.URLChangeDialog
import com.vanced.manager.utils.LanguageHelper.authCrowdin
class DevSettingsFragment: PreferenceFragmentCompat() { class DevSettingsFragment: PreferenceFragmentCompat() {
@ -45,22 +46,13 @@ class DevSettingsFragment: PreferenceFragmentCompat() {
} }
findPreference<Preference>("crowdin_auth")?.isVisible = !Crowdin.isAuthorized()
findPreference<SwitchPreferenceCompat>("crowdin_upload_screenshot")?.isVisible = Crowdin.isAuthorized() findPreference<SwitchPreferenceCompat>("crowdin_upload_screenshot")?.isVisible = Crowdin.isAuthorized()
findPreference<SwitchPreferenceCompat>("crowdin_real_time")?.isVisible = Crowdin.isAuthorized() findPreference<SwitchPreferenceCompat>("crowdin_real_time")?.isVisible = Crowdin.isAuthorized()
findPreference<Preference>("crowdin_auth")?.setOnPreferenceClickListener { findPreference<Preference>("crowdin_auth")?.setOnPreferenceClickListener {
@RequiresApi(Build.VERSION_CODES.M) requireActivity().authCrowdin()
if (!Settings.canDrawOverlays(requireActivity())) {
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + requireActivity().packageName)
)
startActivityForResult(intent, 69)
return@setOnPreferenceClickListener true
}
Crowdin.authorize(requireActivity())
true true
} }
@ -91,14 +83,4 @@ class DevSettingsFragment: PreferenceFragmentCompat() {
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 69) {
@RequiresApi(23)
if (Settings.canDrawOverlays(requireActivity())) {
Crowdin.authorize(requireActivity())
}
}
}
} }

View File

@ -14,6 +14,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.crowdin.platform.util.inflateWithCrowdin
import com.github.florent37.viewtooltip.ViewTooltip import com.github.florent37.viewtooltip.ViewTooltip
import com.google.android.flexbox.FlexboxLayoutManager import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent import com.google.android.flexbox.JustifyContent
@ -36,26 +37,6 @@ open class HomeFragment : Fragment() {
private val prefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) } private val prefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) }
private lateinit var tooltip: ViewTooltip private lateinit var tooltip: ViewTooltip
// private val tabListener = object : TabLayout.OnTabSelectedListener {
//
// override fun onTabSelected(tab: TabLayout.Tab) {
// if (tab.position == 1 && !Shell.rootAccess()) {
// Toast.makeText(requireActivity(), getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
// }
// val variant = if (tab.position == 1) "root" else "nonroot"
// getDefaultSharedPreferences(requireActivity()).edit().putString("vanced_variant", variant).apply()
// }
//
// override fun onTabUnselected(tab: TabLayout.Tab) {
// return
// }
//
// override fun onTabReselected(tab: TabLayout.Tab) {
// return
// }
//
// }
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
@ -117,19 +98,6 @@ open class HomeFragment : Fragment() {
} }
} }
// with(binding) {
// mainViewpager.adapter = VariantAdapter(viewModel, requireActivity())
// TabLayoutMediator(mainTablayout, mainViewpager) { tab, position ->
// val variants = arrayOf("nonroot", "root")
// tab.text = variants[position]
// }.attach()
// mainTablayout.getTabAt(if (getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot") == "root") 1 else 0)?.select()
// }
// installing.observe(viewLifecycleOwner, { value ->
// if (value) hideTab() else showTab()
// })
} }
override fun onPause() { override fun onPause() {
@ -154,28 +122,6 @@ open class HomeFragment : Fragment() {
} }
} }
// private fun hideTab() {
// val tabHide = AnimationUtils.loadAnimation(requireActivity(), R.anim.tablayout_exit)
// with(binding) {
// if (mainTablayout.visibility != View.GONE) {
// mainTablayout.startAnimation(tabHide)
// mainTablayout.visibility = View.GONE
// }
// mainViewpager.isUserInputEnabled = false
// }
// }
//
// private fun showTab() {
// val tabShow = AnimationUtils.loadAnimation(requireActivity(), R.anim.tablayout_enter)
// with(binding) {
// if (mainTablayout.visibility != View.VISIBLE) {
// mainTablayout.visibility = View.VISIBLE
// mainTablayout.startAnimation(tabShow)
// }
// mainViewpager.isUserInputEnabled = true
// }
// }
private fun registerReceivers() { private fun registerReceivers() {
val intentFilter = IntentFilter() val intentFilter = IntentFilter()
intentFilter.addAction(INSTALL_FAILED) intentFilter.addAction(INSTALL_FAILED)
@ -184,7 +130,7 @@ open class HomeFragment : Fragment() {
} }
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.toolbar_menu, menu) inflater.inflateWithCrowdin(R.menu.toolbar_menu, menu, resources)
super.onCreateOptionsMenu(menu, inflater) super.onCreateOptionsMenu(menu, inflater)
} }

View File

@ -3,7 +3,6 @@ package com.vanced.manager.ui.viewmodels
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.ComponentName import android.content.ComponentName
import android.content.Intent import android.content.Intent
import android.util.Log
import android.view.View import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
@ -17,7 +16,6 @@ import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import com.crowdin.platform.Crowdin import com.crowdin.platform.Crowdin
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.core.App
import com.vanced.manager.model.DataModel import com.vanced.manager.model.DataModel
import com.vanced.manager.ui.dialogs.AppDownloadDialog import com.vanced.manager.ui.dialogs.AppDownloadDialog
import com.vanced.manager.ui.dialogs.InstallationFilesDetectedDialog import com.vanced.manager.ui.dialogs.InstallationFilesDetectedDialog
@ -33,6 +31,9 @@ import com.vanced.manager.utils.Extensions.fetchData
import com.vanced.manager.utils.Extensions.setRefreshing import com.vanced.manager.utils.Extensions.setRefreshing
import com.vanced.manager.utils.Extensions.show import com.vanced.manager.utils.Extensions.show
import com.vanced.manager.utils.InternetTools import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.InternetTools.loadJson
import com.vanced.manager.utils.InternetTools.musicVersions
import com.vanced.manager.utils.InternetTools.vancedVersions
import com.vanced.manager.utils.PackageHelper.apkExist import com.vanced.manager.utils.PackageHelper.apkExist
import com.vanced.manager.utils.PackageHelper.musicApkExists import com.vanced.manager.utils.PackageHelper.musicApkExists
import com.vanced.manager.utils.PackageHelper.uninstallApk import com.vanced.manager.utils.PackageHelper.uninstallApk
@ -41,8 +42,6 @@ import com.vanced.manager.utils.PackageHelper.vancedInstallFilesExist
open class HomeViewModel(private val activity: FragmentActivity): ViewModel() { open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
private val app = activity.application as App
private val prefs = getDefaultSharedPreferences(activity) private val prefs = getDefaultSharedPreferences(activity)
val vanced = ObservableField<DataModel>() val vanced = ObservableField<DataModel>()
@ -58,7 +57,7 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
fun fetchData() { fun fetchData() {
activity.setRefreshing(true) activity.setRefreshing(true)
app.loadJson() loadJson(activity)
Crowdin.forceUpdate(activity) Crowdin.forceUpdate(activity)
activity.setRefreshing(false) activity.setRefreshing(false)
} }
@ -124,7 +123,6 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
} }
} }
activity.getString(R.string.microg) -> { activity.getString(R.string.microg) -> {
Log.d("test", apkExist(activity, "microg.apk").toString())
if (apkExist(activity, "microg.apk")) InstallationFilesDetectedDialog(app).show(activity) else AppDownloadDialog(app).show(activity) if (apkExist(activity, "microg.apk")) InstallationFilesDetectedDialog(app).show(activity) else AppDownloadDialog(app).show(activity)
} }
} }
@ -135,12 +133,12 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
init { init {
activity.setRefreshing(true) activity.setRefreshing(true)
vanced.set(DataModel(app.vanced, activity, vancedPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced))) vanced.set(DataModel(InternetTools.vanced, activity, vancedPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced), vancedVersions))
vancedRoot.set(DataModel(app.vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced))) vancedRoot.set(DataModel(InternetTools.vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced), vancedVersions))
music.set(DataModel(app.music, activity, musicPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music))) music.set(DataModel(InternetTools.music, activity, musicPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music), musicVersions))
musicRoot.set(DataModel(app.music, activity, musicRootPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music))) musicRoot.set(DataModel(InternetTools.music, activity, musicRootPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music), musicVersions))
microg.set(DataModel(app.microg, activity, microgPkg, activity.getString(R.string.microg), ContextCompat.getDrawable(activity, R.drawable.ic_microg))) microg.set(DataModel(InternetTools.microg, activity, microgPkg, activity.getString(R.string.microg), ContextCompat.getDrawable(activity, R.drawable.ic_microg)))
manager.set(DataModel(app.manager, activity, managerPkg, activity.getString(R.string.app_name), ContextCompat.getDrawable(activity, R.mipmap.ic_launcher))) manager.set(DataModel(InternetTools.manager, activity, managerPkg, activity.getString(R.string.app_name), ContextCompat.getDrawable(activity, R.mipmap.ic_launcher)))
activity.setRefreshing(false) activity.setRefreshing(false)
} }

View File

@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModelProvider
class HomeViewModelFactory(private val activity: FragmentActivity) : ViewModelProvider.Factory { class HomeViewModelFactory(private val activity: FragmentActivity) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T { override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return HomeViewModel(activity) as T return HomeViewModel(activity) as T
} }

View File

@ -1,13 +1,18 @@
package com.vanced.manager.utils package com.vanced.manager.utils
import android.app.Activity import android.app.Activity
import android.content.Context
import android.content.SharedPreferences
import android.widget.RadioGroup import android.widget.RadioGroup
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.google.android.material.radiobutton.MaterialRadioButton import com.google.android.material.radiobutton.MaterialRadioButton
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.core.App import com.vanced.manager.model.AppVersionsModel
import com.vanced.manager.utils.InternetTools.loadJson
import java.util.*
object Extensions { object Extensions {
@ -16,13 +21,13 @@ object Extensions {
} }
fun DialogFragment.show(activity: FragmentActivity) { fun DialogFragment.show(activity: FragmentActivity) {
this.show(activity.supportFragmentManager, "") show(activity.supportFragmentManager, "")
} }
fun Activity.fetchData() { fun Activity.fetchData() {
val refreshLayout = findViewById<SwipeRefreshLayout>(R.id.home_refresh) val refreshLayout = findViewById<SwipeRefreshLayout>(R.id.home_refresh)
setRefreshing(true, refreshLayout) setRefreshing(true, refreshLayout)
(application as App).loadJson() loadJson(this)
setRefreshing(false, refreshLayout) setRefreshing(false, refreshLayout)
} }
@ -39,4 +44,21 @@ object Extensions {
} }
} }
fun Context.getDefaultPrefs(): SharedPreferences = getDefaultSharedPreferences(this)
//Not sure how much this can affect performance
//but if anyone can improve this even slightly,
//feel free to open a PR
fun List<String>.convertToAppVersions(): Array<AppVersionsModel> {
val versionsModel = arrayListOf(AppVersionsModel("latest", this[0]))
for (i in reversed().indices) {
versionsModel.add(AppVersionsModel(this[i], this[i]))
}
return versionsModel.toTypedArray()
}
fun String.convertToAppTheme(context: Context): String {
return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT))
}
} }

View File

@ -6,15 +6,33 @@ import android.net.Uri
import android.util.Log import android.util.Log
import androidx.browser.customtabs.CustomTabsIntent import androidx.browser.customtabs.CustomTabsIntent
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.databinding.ObservableField
import androidx.preference.PreferenceManager.getDefaultSharedPreferences import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import com.beust.klaxon.JsonArray
import com.beust.klaxon.JsonObject
import com.vanced.manager.BuildConfig import com.vanced.manager.BuildConfig
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.core.App import com.vanced.manager.utils.Extensions.getDefaultPrefs
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*
object InternetTools { object InternetTools {
private const val TAG = "VMNetTools" private const val TAG = "VMNetTools"
var vanced = ObservableField<JsonObject?>()
var music = ObservableField<JsonObject?>()
var microg = ObservableField<JsonObject?>()
var manager = ObservableField<JsonObject?>()
var vancedVersions = ObservableField<JsonArray<String>>()
var musicVersions = ObservableField<JsonArray<String>>()
//var braveTiers = ObservableField<JsonObject?>()
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)
if (customTabPrefs) { if (customTabPrefs) {
@ -57,8 +75,37 @@ object InternetTools {
} }
} }
fun loadJson(context: Context) = CoroutineScope(Dispatchers.IO).launch {
val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
val latest = JsonHelper.getJson("$installUrl/latest.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.getDefault())}")
val versions = JsonHelper.getJson("$installUrl/versions.json?fetchTime=${SimpleDateFormat("HHmmss", Locale.getDefault())}")
// braveTiers.apply {
// set(getJson("$installUrl/sponsor.json"))
// notifyChange()
// }
vanced.apply {
set(latest?.obj("vanced"))
notifyChange()
}
vancedVersions.set(versions?.array("vanced"))
music.apply {
set(latest?.obj("music"))
notifyChange()
}
musicVersions.set(versions?.array("music"))
microg.apply {
set(latest?.obj("microg"))
notifyChange()
}
manager.apply {
set(latest?.obj("manager"))
notifyChange()
}
}
suspend fun getJsonString(file: String, obj: String, context: Context): String { suspend fun getJsonString(file: String, obj: String, context: Context): String {
val installUrl = getDefaultSharedPreferences(context).getString("install_url", baseUrl) val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
return try { 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) { } catch (e: Exception) {
@ -68,7 +115,7 @@ object InternetTools {
} }
fun isUpdateAvailable(context: Context): Boolean { fun isUpdateAvailable(context: Context): Boolean {
val result = (context.applicationContext as App).manager.get()?.int("versionCode") ?: 0 val result = manager.get()?.int("versionCode") ?: 0
return result > BuildConfig.VERSION_CODE return result > BuildConfig.VERSION_CODE
} }

View File

@ -2,12 +2,16 @@ package com.vanced.manager.utils
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent
import android.content.res.Resources import android.content.res.Resources
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.LocaleList import android.os.LocaleList
import android.provider.Settings
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import com.crowdin.platform.Crowdin
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.core.App import com.vanced.manager.utils.InternetTools.vanced
import java.util.* import java.util.*
object LanguageHelper { object LanguageHelper {
@ -30,29 +34,16 @@ object LanguageHelper {
} }
fun getDefaultVancedLanguages(activity: Activity): String { @Suppress("DEPRECATION")
val serverLangs = (activity.applicationContext as App).vanced.get()!!.array<String>("langs") fun getDefaultVancedLanguages(): String {
val serverLangs = vanced.get()?.array("langs") ?: mutableListOf("")
val sysLocales = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Resources.getSystem().configuration.locales.toLangTags() else arrayOf(Resources.getSystem().configuration.locale.language) val sysLocales = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Resources.getSystem().configuration.locales.toLangTags() else arrayOf(Resources.getSystem().configuration.locale.language)
val finalLangs = mutableListOf<String>() val finalLangs = mutableListOf<String>()
sysLocales.forEach { sysLocale -> sysLocales.forEach { sysLocale ->
if (sysLocale == "en") when {
finalLangs.add(sysLocale) sysLocale == "en" -> finalLangs.add(sysLocale)
else if (serverLangs != null && serverLangs.contains(sysLocale)) serverLangs.contains(sysLocale) -> finalLangs.add(sysLocale)
finalLangs.add(sysLocale)
} }
return finalLangs.distinct().sorted().joinToString(", ")
}
fun getDefaultVancedLanguages(app: App): String {
val serverLangs = app.vanced.get()!!.array<String>("langs")
val sysLocales = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) Resources.getSystem().configuration.locales.toLangTags() else arrayOf(Resources.getSystem().configuration.locale.language)
val finalLangs = mutableListOf<String>()
sysLocales.forEach { sysLocale ->
if (sysLocale == "en")
finalLangs.add(sysLocale)
else if (serverLangs != null && serverLangs.contains(sysLocale))
finalLangs.add(sysLocale)
} }
return finalLangs.distinct().sorted().joinToString(", ") return finalLangs.distinct().sorted().joinToString(", ")
@ -67,4 +58,26 @@ object LanguageHelper {
return langTags return langTags
} }
fun Activity.authCrowdin() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
val intent = Intent(
Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:$packageName")
)
startActivityForResult(intent, 69)
return
}
Crowdin.authorize(this)
}
}
fun Activity.onActivityResult(requestCode: Int) {
if (requestCode == 69 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.canDrawOverlays(this)) {
Crowdin.authorize(this)
}
}
}
} }

View File

@ -11,13 +11,13 @@ import android.util.Log
import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.io.SuFile import com.topjohnwu.superuser.io.SuFile
import com.vanced.manager.BuildConfig import com.vanced.manager.BuildConfig
import com.vanced.manager.core.App
import com.vanced.manager.core.installer.AppInstallerService import com.vanced.manager.core.installer.AppInstallerService
import com.vanced.manager.core.installer.AppUninstallerService import com.vanced.manager.core.installer.AppUninstallerService
import com.vanced.manager.utils.AppUtils.sendCloseDialog import com.vanced.manager.utils.AppUtils.sendCloseDialog
import com.vanced.manager.utils.AppUtils.sendFailure import com.vanced.manager.utils.AppUtils.sendFailure
import com.vanced.manager.utils.AppUtils.sendRefresh import com.vanced.manager.utils.AppUtils.sendRefresh
import com.vanced.manager.utils.AppUtils.vancedRootPkg import com.vanced.manager.utils.AppUtils.vancedRootPkg
import com.vanced.manager.utils.InternetTools.vanced
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -249,8 +249,7 @@ object PackageHelper {
) )
Shell.getShell { Shell.getShell {
val application = context.applicationContext as App val vancedVersionCode = vanced.get()?.int("versionCode")
val vancedVersionCode = application.vanced.get()?.int("versionCode")
val apkFilesPath = context.getExternalFilesDir("vanced/root")?.path val apkFilesPath = context.getExternalFilesDir("vanced/root")?.path
val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) } val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) }
if (fileInfoList != null) { if (fileInfoList != null) {

View File

@ -2,24 +2,24 @@ package com.vanced.manager.utils
import android.app.Activity import android.app.Activity
import android.content.res.Configuration import android.content.res.Configuration
import androidx.preference.PreferenceManager
import com.vanced.manager.R import com.vanced.manager.R
import com.vanced.manager.utils.Extensions.getDefaultPrefs
object ThemeHelper { object ThemeHelper {
fun setFinalTheme(activity: Activity) { fun Activity.setFinalTheme() {
val currentAccent = PreferenceManager.getDefaultSharedPreferences(activity).getString("manager_accent", "Blue") val prefs = getDefaultPrefs()
when (PreferenceManager.getDefaultSharedPreferences(activity) val currentAccent = prefs.getString("manager_accent", "Blue")
.getString("manager_theme", "System Default")) { when (prefs.getString("manager_theme", "System Default")) {
"Light" -> activity.setTheme(getLightAccent(currentAccent)) "Light" -> setTheme(getLightAccent(currentAccent))
"Dark" -> activity.setTheme(getDarkAccent(currentAccent)) "Dark" -> setTheme(getDarkAccent(currentAccent))
"System Default" -> { "System Default" -> {
when (activity.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
Configuration.UI_MODE_NIGHT_YES -> activity.setTheme(getDarkAccent(currentAccent)) Configuration.UI_MODE_NIGHT_YES -> setTheme(getDarkAccent(currentAccent))
Configuration.UI_MODE_NIGHT_NO -> activity.setTheme(getLightAccent(currentAccent)) Configuration.UI_MODE_NIGHT_NO -> setTheme(getLightAccent(currentAccent))
} }
} }
else -> activity.setTheme(getLightAccent("Blue")) else -> setTheme(getLightAccent("Blue"))
} }
} }

View File

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM10,17l-3.5,-3.5 1.41,-1.41L10,14.17 15.18,9l1.41,1.41L10,17z"/>
</vector>

View File

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM17,13l-5,5 -5,-5h3V9h4v4h3z"/>
</vector>

View File

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM14,13v4h-4v-4H7l5,-5 5,5h-3z"/>
</vector>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<layout>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/BottomDialogCard">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/dialog_title"
style="@style/BottomDialogCardTitle" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioGroup
android:id="@+id/dialog_radiogroup"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</RadioGroup>
</androidx.core.widget.NestedScrollView>
<com.google.android.material.button.MaterialButton
android:id="@+id/dialog_save"
style="@style/BottomDialogButtonStyle"
android:text="@string/save" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</layout>

View File

@ -26,15 +26,41 @@
style="@style/BottomDialogCardTextItem" style="@style/BottomDialogCardTextItem"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toStartOf="@id/theme_spinner" android:layout_toStartOf="@id/open_theme_selector" />
android:text="@string/theme" />
<Spinner <ImageButton
android:id="@+id/theme_spinner" android:id="@+id/open_theme_selector"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
tools:entries="@array/vanced_themes" /> android:background="@android:color/transparent"
android:maxWidth="24dp"
android:maxHeight="24dp"
android:src="@drawable/ic_baseline_navigate_next_36" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp">
<TextView
android:id="@+id/chosen_version"
style="@style/BottomDialogCardTextItem"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_toStartOf="@id/open_version_selector" />
<ImageButton
android:id="@+id/open_version_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:background="@android:color/transparent"
android:maxWidth="24dp"
android:maxHeight="24dp"
android:src="@drawable/ic_baseline_navigate_next_36" />
</RelativeLayout> </RelativeLayout>
@ -48,8 +74,7 @@
style="@style/BottomDialogCardTextItem" style="@style/BottomDialogCardTextItem"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toStartOf="@+id/open_language_selector" android:layout_toStartOf="@+id/open_language_selector" />
android:text="@string/language_title" />
<ImageButton <ImageButton
android:id="@+id/open_language_selector" android:id="@+id/open_language_selector"

View File

@ -24,7 +24,6 @@
android:id="@+id/use_custom_tabs" android:id="@+id/use_custom_tabs"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent"
app:switch_def_value="true" app:switch_def_value="true"
app:switch_key="use_customtabs" app:switch_key="use_customtabs"
app:switch_summary="@string/link_custom_tabs" app:switch_summary="@string/link_custom_tabs"

View File

@ -80,7 +80,6 @@
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:onClick="@{()-> viewModel.openMicrogSettings()}" android:onClick="@{()-> viewModel.openMicrogSettings()}"
android:scaleType="fitCenter"
android:src="@drawable/ic_app_settings_black_24dp" android:src="@drawable/ic_app_settings_black_24dp"
android:visibility="@{(app.equals(@string/microg) &amp;&amp; dataModel.isAppInstalled()) ? View.VISIBLE : View.GONE}" android:visibility="@{(app.equals(@string/microg) &amp;&amp; dataModel.isAppInstalled()) ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toStartOf="@id/app_uninstall" app:layout_constraintEnd_toStartOf="@id/app_uninstall"

View File

@ -61,8 +61,6 @@
<string name="welcome">Welcome</string> <string name="welcome">Welcome</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string> <string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string>
<string name="install_light_black">Light + Black</string>
<string name="install_light_dark">Light + Dark</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager Devs</string> <string name="manager_dev">Manager Devs</string>
<string name="sources">Sources</string> <string name="sources">Sources</string>

View File

@ -62,8 +62,6 @@
اهلا</string> اهلا</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string> <string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string>
<string name="install_light_black">ابيض + اسود</string>
<string name="install_light_dark">ابيض + داكن</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager Devs</string> <string name="manager_dev">Manager Devs</string>
<string name="sources">مصادر</string> <string name="sources">مصادر</string>

View File

@ -58,8 +58,6 @@
<string name="welcome">Xoş gəlmisiniz</string> <string name="welcome">Xoş gəlmisiniz</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vanced üçün istədiyiniz dili seçin</string> <string name="choose_preferred_language">Vanced üçün istədiyiniz dili seçin</string>
<string name="install_light_black">İşıqlı + Qara</string>
<string name="install_light_dark">İşıqlı + Qaranlıq</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Menecer Təkmilcilər</string> <string name="manager_dev">Menecer Təkmilcilər</string>
<string name="sources">Mənbələr</string> <string name="sources">Mənbələr</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">স্বাগতম</string> <string name="welcome">স্বাগতম</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">ভ্যানসডের জন্য আপনার পছন্দসই ভাষা (গুলি) চয়ন করুন</string> <string name="choose_preferred_language">ভ্যানসডের জন্য আপনার পছন্দসই ভাষা (গুলি) চয়ন করুন</string>
<string name="install_light_black">আলো + কালো</string>
<string name="install_light_dark">আলো + অন্ধকার</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">পরিচালক বিকাশকারী</string> <string name="manager_dev">পরিচালক বিকাশকারী</string>
<string name="sources">সূত্রসমূহ</string> <string name="sources">সূত্রসমূহ</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">স্বাগত</string> <string name="welcome">স্বাগত</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">ভ্যান্সডের জন্য আপনার পছন্দসই ভাষা(গুলি) চয়ন করুন</string> <string name="choose_preferred_language">ভ্যান্সডের জন্য আপনার পছন্দসই ভাষা(গুলি) চয়ন করুন</string>
<string name="install_light_black">হালকা + কালো</string>
<string name="install_light_dark">হালকা + অন্ধকার</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">ম্যানেজার বিকাশকারীরা</string> <string name="manager_dev">ম্যানেজার বিকাশকারীরা</string>
<string name="sources">উৎসগুলি</string> <string name="sources">উৎসগুলি</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Benvingut</string> <string name="welcome">Benvingut</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Trieu els vostres idiomes preferits per a Vanced</string> <string name="choose_preferred_language">Trieu els vostres idiomes preferits per a Vanced</string>
<string name="install_light_black">Clar + Negre</string>
<string name="install_light_dark">Clar + Fosc</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Gestor de desenvolupadors</string> <string name="manager_dev">Gestor de desenvolupadors</string>
<string name="sources">Fonts</string> <string name="sources">Fonts</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Vítejte</string> <string name="welcome">Vítejte</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vyberte preferovaný jazyk pro Vanced</string> <string name="choose_preferred_language">Vyberte preferovaný jazyk pro Vanced</string>
<string name="install_light_black">Světlý + černý</string>
<string name="install_light_dark">Světlý + tmavý</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Vývojáři aplikace</string> <string name="manager_dev">Vývojáři aplikace</string>
<string name="sources">Zdrojové kódy</string> <string name="sources">Zdrojové kódy</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Velkommen</string> <string name="welcome">Velkommen</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vælg dit fortrukne sprog til Vanced</string> <string name="choose_preferred_language">Vælg dit fortrukne sprog til Vanced</string>
<string name="install_light_black">Lyst + Sort</string>
<string name="install_light_dark">Lyst + Mørkt</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager udviklere</string> <string name="manager_dev">Manager udviklere</string>
<string name="sources">Kilder</string> <string name="sources">Kilder</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Willkommen</string> <string name="welcome">Willkommen</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Wählen Sie ihre bevorzugte Sprache(n) für Vanced</string> <string name="choose_preferred_language">Wählen Sie ihre bevorzugte Sprache(n) für Vanced</string>
<string name="install_light_black">Hell + Schwarz</string>
<string name="install_light_dark">Hell + Dunkel</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager-Entwickler</string> <string name="manager_dev">Manager-Entwickler</string>
<string name="sources">Quellen</string> <string name="sources">Quellen</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Καλώς ορίσατε</string> <string name="welcome">Καλώς ορίσατε</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Επιλέξτε την(/ις) γλώσσα(/ες) που επιθυμείτε για το Vanced</string> <string name="choose_preferred_language">Επιλέξτε την(/ις) γλώσσα(/ες) που επιθυμείτε για το Vanced</string>
<string name="install_light_black">Ανοιχτόχρωμο + Απόλυτο μαύρο</string>
<string name="install_light_dark">Ανοιχτόχρωμο + Σκούροχρωμο</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Προγραμματιστές Διαχειριστή Vanced</string> <string name="manager_dev">Προγραμματιστές Διαχειριστή Vanced</string>
<string name="sources">Πηγές</string> <string name="sources">Πηγές</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Bienvenido</string> <string name="welcome">Bienvenido</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Elige tu(s) idioma(s) preferido(s) para Vanced</string> <string name="choose_preferred_language">Elige tu(s) idioma(s) preferido(s) para Vanced</string>
<string name="install_light_black">Claro + Negro</string>
<string name="install_light_dark">Claro + Oscuro</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Desarrolladores del Manager</string> <string name="manager_dev">Desarrolladores del Manager</string>
<string name="sources">Fuentes</string> <string name="sources">Fuentes</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Tervetuloa</string> <string name="welcome">Tervetuloa</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Valitse Vancedille haluamasi kieli tai kielet</string> <string name="choose_preferred_language">Valitse Vancedille haluamasi kieli tai kielet</string>
<string name="install_light_black">Vaalea + Musta</string>
<string name="install_light_dark">Vaalea + Tumma</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Kehittäjäpäällikkö</string> <string name="manager_dev">Kehittäjäpäällikkö</string>
<string name="sources">Lähdekoodi</string> <string name="sources">Lähdekoodi</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Bienvenue</string> <string name="welcome">Bienvenue</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Choisir votre langage(s) préféré(s) pour Vanced</string> <string name="choose_preferred_language">Choisir votre langage(s) préféré(s) pour Vanced</string>
<string name="install_light_black">Clair + Noir</string>
<string name="install_light_dark">Clair + Sombre</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager pour les développeurs</string> <string name="manager_dev">Manager pour les développeurs</string>
<string name="sources">Sources</string> <string name="sources">Sources</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">स्वागत है!</string> <string name="welcome">स्वागत है!</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vanced के लिए अपनी पसंदीदा भाषा (ए) चुनें</string> <string name="choose_preferred_language">Vanced के लिए अपनी पसंदीदा भाषा (ए) चुनें</string>
<string name="install_light_black">लाइट + ब्लैक</string>
<string name="install_light_dark">लाइट + डार्क</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">प्रबंधक डेवलपर्स</string> <string name="manager_dev">प्रबंधक डेवलपर्स</string>
<string name="sources">स्रोत</string> <string name="sources">स्रोत</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Üdvözöljük</string> <string name="welcome">Üdvözöljük</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vanced nyelvének kiválasztása</string> <string name="choose_preferred_language">Vanced nyelvének kiválasztása</string>
<string name="install_light_black">Világos + Sötét</string>
<string name="install_light_dark">Világos + Fekete</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Fejlesztői Menedzser</string> <string name="manager_dev">Fejlesztői Menedzser</string>
<string name="sources">Források</string> <string name="sources">Források</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Selamat datang</string> <string name="welcome">Selamat datang</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Pilih bahasa yang anda inginkan untuk Vanced</string> <string name="choose_preferred_language">Pilih bahasa yang anda inginkan untuk Vanced</string>
<string name="install_light_black">Terang + Hitam</string>
<string name="install_light_dark">Terang + Gelap</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Pengembang Manager</string> <string name="manager_dev">Pengembang Manager</string>
<string name="sources">Sumber</string> <string name="sources">Sumber</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Benvenuto</string> <string name="welcome">Benvenuto</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Scegli le tue lingue preferite per Vanced</string> <string name="choose_preferred_language">Scegli le tue lingue preferite per Vanced</string>
<string name="install_light_black">Chiaro + nero</string>
<string name="install_light_dark">Chiaro + scuro</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Sviluppatori di Manager</string> <string name="manager_dev">Sviluppatori di Manager</string>
<string name="sources">Codice sorgente</string> <string name="sources">Codice sorgente</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">ברוכים הבאים</string> <string name="welcome">ברוכים הבאים</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">בחר את השפה המועדפת עליך לVanced</string> <string name="choose_preferred_language">בחר את השפה המועדפת עליך לVanced</string>
<string name="install_light_black">בהיר + שחור</string>
<string name="install_light_dark">בהיר + כהה</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">מנהל המפתחים</string> <string name="manager_dev">מנהל המפתחים</string>
<string name="sources">מקורות</string> <string name="sources">מקורות</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">ようこそ</string> <string name="welcome">ようこそ</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vanced で使用する言語を選択</string> <string name="choose_preferred_language">Vanced で使用する言語を選択</string>
<string name="install_light_black">ライト + ブラック</string>
<string name="install_light_dark">ライト + ダーク</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager 開発</string> <string name="manager_dev">Manager 開発</string>
<string name="sources">ソースコード</string> <string name="sources">ソースコード</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">მოგესალმებით</string> <string name="welcome">მოგესალმებით</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string> <string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string>
<string name="install_light_black">ღია + შავი</string>
<string name="install_light_dark">ღია + მუქი</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager Devs</string> <string name="manager_dev">Manager Devs</string>
<string name="sources">წყაროები</string> <string name="sources">წყაროები</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">환영합니다</string> <string name="welcome">환영합니다</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vanced에서 선호하는 언어를 선택해주세요</string> <string name="choose_preferred_language">Vanced에서 선호하는 언어를 선택해주세요</string>
<string name="install_light_black">라이트 + 블랙</string>
<string name="install_light_dark">라이트 + 다크</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager 개발자</string> <string name="manager_dev">Manager 개발자</string>
<string name="sources">소스</string> <string name="sources">소스</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Welkom</string> <string name="welcome">Welkom</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Kies je gewenste taal/talen voor Vanced</string> <string name="choose_preferred_language">Kies je gewenste taal/talen voor Vanced</string>
<string name="install_light_black">Licht + Zwart</string>
<string name="install_light_dark">Licht + Donker</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager Ontwikkelaars</string> <string name="manager_dev">Manager Ontwikkelaars</string>
<string name="sources">Bronnen</string> <string name="sources">Bronnen</string>

View File

@ -60,8 +60,6 @@
<string name="welcome">Velkommen</string> <string name="welcome">Velkommen</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Velg dine foretrukne språk for Vanced</string> <string name="choose_preferred_language">Velg dine foretrukne språk for Vanced</string>
<string name="install_light_black">Light + Black</string>
<string name="install_light_dark">Light + Dark</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager Devs</string> <string name="manager_dev">Manager Devs</string>
<string name="sources">Sources</string> <string name="sources">Sources</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">ਜੀ ਆਇਆਂ ਨੂੰ!</string> <string name="welcome">ਜੀ ਆਇਆਂ ਨੂੰ!</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vanced ਦੇ ਲਈ ਆਪਣੀ ਪਸੰਦੀਦਾ ਭਾਸ਼ਾ (ਏ) ਚੁਣੋ</string> <string name="choose_preferred_language">Vanced ਦੇ ਲਈ ਆਪਣੀ ਪਸੰਦੀਦਾ ਭਾਸ਼ਾ (ਏ) ਚੁਣੋ</string>
<string name="install_light_black">ਲਾਇਟ + ਬਲੈਕ</string>
<string name="install_light_dark">ਲਾਇਟ + ਡਾਰਕ</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">ਪ੍ਬੰਧਕ ਨਿਰਮਾਣਕਰਤਾ</string> <string name="manager_dev">ਪ੍ਬੰਧਕ ਨਿਰਮਾਣਕਰਤਾ</string>
<string name="sources">ਸਰੋਤ</string> <string name="sources">ਸਰੋਤ</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Witaj</string> <string name="welcome">Witaj</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Wybierz preferowany język(i) dla Vanced</string> <string name="choose_preferred_language">Wybierz preferowany język(i) dla Vanced</string>
<string name="install_light_black">Jasny + Czarny</string>
<string name="install_light_dark">Jasny + Ciemny</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Deweloperzy Menedżera</string> <string name="manager_dev">Deweloperzy Menedżera</string>
<string name="sources">Źródła</string> <string name="sources">Źródła</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Bem-vindo</string> <string name="welcome">Bem-vindo</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Escolha o seu idioma preferido para o Vanced</string> <string name="choose_preferred_language">Escolha o seu idioma preferido para o Vanced</string>
<string name="install_light_black">Claro + Preto</string>
<string name="install_light_dark">Claro + Escuro</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Desenvolvedores do Manager</string> <string name="manager_dev">Desenvolvedores do Manager</string>
<string name="sources">Fontes</string> <string name="sources">Fontes</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Bem-Vindo</string> <string name="welcome">Bem-Vindo</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Escolha a(s) sua(s) língua(s) de preferência para o Vanced</string> <string name="choose_preferred_language">Escolha a(s) sua(s) língua(s) de preferência para o Vanced</string>
<string name="install_light_black">Claro + Preto</string>
<string name="install_light_dark">Claro + Escuro</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Programadores do Manager</string> <string name="manager_dev">Programadores do Manager</string>
<string name="sources">Fontes</string> <string name="sources">Fontes</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Bun venit</string> <string name="welcome">Bun venit</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Alegeți limba preferată pentru Vanced</string> <string name="choose_preferred_language">Alegeți limba preferată pentru Vanced</string>
<string name="install_light_black">Luminos + Negru</string>
<string name="install_light_dark">Luminos + Întunecat</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Dezvoltatori</string> <string name="manager_dev">Dezvoltatori</string>
<string name="sources">Surse</string> <string name="sources">Surse</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Добро пожаловать</string> <string name="welcome">Добро пожаловать</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Выберите предпочитаемый язык для Vanced</string> <string name="choose_preferred_language">Выберите предпочитаемый язык для Vanced</string>
<string name="install_light_black">Светлая + Чёрная</string>
<string name="install_light_dark">Светлая + Тёмная</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Разработчики Менеджера</string> <string name="manager_dev">Разработчики Менеджера</string>
<string name="sources">Исходники</string> <string name="sources">Исходники</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">ආයුබෝවන්</string> <string name="welcome">ආයුබෝවන්</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string> <string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string>
<string name="install_light_black">Light + Black</string>
<string name="install_light_dark">Light + Dark</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager Devs</string> <string name="manager_dev">Manager Devs</string>
<string name="sources">Sources</string> <string name="sources">Sources</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Добро дошли</string> <string name="welcome">Добро дошли</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Одаберите језик за коришћење Vanced апликације</string> <string name="choose_preferred_language">Одаберите језик за коришћење Vanced апликације</string>
<string name="install_light_black">Светла + Црна</string>
<string name="install_light_dark">Светла + Тамна</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Менаџер развоја</string> <string name="manager_dev">Менаџер развоја</string>
<string name="sources">Извор</string> <string name="sources">Извор</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Välkommen</string> <string name="welcome">Välkommen</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Välj önskade språk för Vanced</string> <string name="choose_preferred_language">Välj önskade språk för Vanced</string>
<string name="install_light_black">Ljus + svart</string>
<string name="install_light_dark">Ljus + svart</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Hanteraren Dev</string> <string name="manager_dev">Hanteraren Dev</string>
<string name="sources">Källor</string> <string name="sources">Källor</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">வரவேற்பு</string> <string name="welcome">வரவேற்பு</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">வேன்ஸ்டுக்காக உங்களுக்கு விருப்பமான மொழியைத் தேர்வுசெய்க</string> <string name="choose_preferred_language">வேன்ஸ்டுக்காக உங்களுக்கு விருப்பமான மொழியைத் தேர்வுசெய்க</string>
<string name="install_light_black">ஒளி + கருப்பு</string>
<string name="install_light_dark">ஒளி + கருப்பு</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">மேலாளர் டெவலப்பர்கள்</string> <string name="manager_dev">மேலாளர் டெவலப்பர்கள்</string>
<string name="sources">மூலம்</string> <string name="sources">மூலம்</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Hoş Geldiniz</string> <string name="welcome">Hoş Geldiniz</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Vanced için tercih ettiğiniz dil(ler)i seçin</string> <string name="choose_preferred_language">Vanced için tercih ettiğiniz dil(ler)i seçin</string>
<string name="install_light_black">ık + Siyah</string>
<string name="install_light_dark">ık + Koyu</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager Geliştiricisi</string> <string name="manager_dev">Manager Geliştiricisi</string>
<string name="sources">Kaynaklar</string> <string name="sources">Kaynaklar</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">Привіт!</string> <string name="welcome">Привіт!</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Виберіть бажану мову(и) для Vanced</string> <string name="choose_preferred_language">Виберіть бажану мову(и) для Vanced</string>
<string name="install_light_black">Світла + Чорна</string>
<string name="install_light_dark">Світла + Темна</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Розробники інсталятора</string> <string name="manager_dev">Розробники інсталятора</string>
<string name="sources">Джерела</string> <string name="sources">Джерела</string>

View File

@ -1,42 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<style name="LightTheme.Blue" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">#2e73ff</item>
<item name="colorPrimaryVariant">#2C7EB9</item>
<item name="colorSecondary">#3E78AF</item>
<item name="colorSecondaryVariant">#803E78AF</item>
<item name="colorSurface">#e9e9e9</item>
<item name="colorSurfaceVariant">#F3F3F3</item>
<item name="colorSurfaceSurfaceVariant">?colorSurface</item>
<item name="colorOnPrimary">#F9F9F9</item>
<item name="colorOnPrimaryVariant">#e8e8e8</item>
<item name="colorOnSecondary">#F9F9F9</item>
<item name="colorOnBackground">?colorOnSurface</item>
<item name="colorError">#CC0047</item>
<item name="colorOnError">#F9F9F9</item>
<item name="colorOnSurface">#444444</item>
<item name="colorOnSurfaceVariant">#C3131313</item>
<item name="colorDisabled">@color/Gray</item>
<item name="colorDisabledVariant">#000000</item>
<item name="iconColor">?colorPrimaryVariant</item>
<item name="toolbarIconColor">#111111</item>
<item name="DialogBG">#ffffff</item>
<item name="colorSettingsTitle">#000000</item>
<item name="colorSecondaryText">#B3000000</item>
<item name="colorLinkImage">#73000000</item>
<item name="colorLinkBG">#F7F7F7</item>
<item name="colorWelcomeHeaderSubtitle">#99000000</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:windowBackground">?colorSurface</item>
<item name="android:statusBarColor">?colorSurface</item>
<item name="materialAlertDialogTheme">@style/DialogStyle</item>
<item name="snackbarStyle">@style/SnackBar</item>
<item name="snackbarButtonStyle">@style/SnackButton</item>
<item name="snackbarTextViewStyle">@style/SnackBarText</item>
</style>
</resources> </resources>

View File

@ -61,8 +61,6 @@
<string name="welcome">Chào mừng</string> <string name="welcome">Chào mừng</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Chọn ngôn ngữ mong muốn cho Vanced</string> <string name="choose_preferred_language">Chọn ngôn ngữ mong muốn cho Vanced</string>
<string name="install_light_black">Sáng + Đen</string>
<string name="install_light_dark">Sáng + Tối</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Đội ngũ phát triển</string> <string name="manager_dev">Đội ngũ phát triển</string>
<string name="sources">Nguồn</string> <string name="sources">Nguồn</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">欢迎</string> <string name="welcome">欢迎</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">为 Vanced 选择您的首选语言</string> <string name="choose_preferred_language">为 Vanced 选择您的首选语言</string>
<string name="install_light_black">浅 + 黑</string>
<string name="install_light_dark">浅 + 深</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager 开发人员</string> <string name="manager_dev">Manager 开发人员</string>
<string name="sources">程式码</string> <string name="sources">程式码</string>

View File

@ -61,8 +61,6 @@
<string name="welcome">歡迎</string> <string name="welcome">歡迎</string>
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">為 Vanced 選擇您偏好的語言</string> <string name="choose_preferred_language">為 Vanced 選擇您偏好的語言</string>
<string name="install_light_black">淺色 + 黑色</string>
<string name="install_light_dark">淺色 + 深色</string>
<!-- About Page --> <!-- About Page -->
<string name="manager_dev">Manager 開發者</string> <string name="manager_dev">Manager 開發者</string>
<string name="sources">原始碼</string> <string name="sources">原始碼</string>

View File

@ -1,9 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string-array name="vanced_themes">
<item>@string/install_light_dark</item>
<item>@string/install_light_black</item>
</string-array>
</resources> </resources>

View File

@ -68,6 +68,8 @@
<string name="app_install_files_detected_summary">Manager detected that all necessary files for %1$s installation were found. Do you want to install?</string> <string name="app_install_files_detected_summary">Manager detected that all necessary files for %1$s installation were found. Do you want to install?</string>
<string name="checking_updates">Checking for updates…</string> <string name="checking_updates">Checking for updates…</string>
<string name="chosen_lang">Language(s): %1$s</string> <string name="chosen_lang">Language(s): %1$s</string>
<string name="chosen_theme">Theme: %1$s</string>
<string name="chosen_version">Version: %1$s</string>
<string name="guide">Guide</string> <string name="guide">Guide</string>
<string name="hold_on">Stop!</string> <string name="hold_on">Stop!</string>
<string name="installing_app">Installing %1$s</string> <string name="installing_app">Installing %1$s</string>
@ -80,6 +82,7 @@
<string name="success">Success!</string> <string name="success">Success!</string>
<string name="vanced_installation_preferences">Vanced Installation Preferences</string> <string name="vanced_installation_preferences">Vanced Installation Preferences</string>
<string name="vanced_installed">Vanced has successfully been installed! Open now?</string> <string name="vanced_installed">Vanced has successfully been installed! Open now?</string>
<string name="version">Version</string>
<string name="music_installed">Vanced Music has successfully been installed! Open now?</string> <string name="music_installed">Vanced Music has successfully been installed! Open now?</string>
<string name="please_be_patient">Please be patient…</string> <string name="please_be_patient">Please be patient…</string>
<string name="launch">Open</string> <string name="launch">Open</string>
@ -87,8 +90,7 @@
<!-- Install Page --> <!-- Install Page -->
<string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string> <string name="choose_preferred_language">Choose your preferred language(s) for Vanced</string>
<string name="install_light_black">Light + Black</string> <string name="light_plus_other">Light + %1$s</string>
<string name="install_light_dark">Light + Dark</string>
<string name="select_at_least_one_lang">Select at least one language!</string> <string name="select_at_least_one_lang">Select at least one language!</string>
<!-- About Page --> <!-- About Page -->

View File

@ -3,7 +3,7 @@
<!-- LIGHT --> <!-- LIGHT -->
<style name="LightTheme.Blue" parent="Theme.MaterialComponents.Light.NoActionBar"> <style name="LightTheme_Blue" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">#2e73ff</item> <item name="colorPrimary">#2e73ff</item>
<item name="colorPrimaryVariant">#2C7EB9</item> <item name="colorPrimaryVariant">#2C7EB9</item>
@ -40,7 +40,7 @@
</style> </style>
<style name="LightTheme.Red" parent="LightTheme.Blue"> <style name="LightTheme_Red" parent="LightTheme_Blue">
<item name="colorPrimary">#D71414</item> <item name="colorPrimary">#D71414</item>
<item name="colorPrimaryVariant">#B92C2C</item> <item name="colorPrimaryVariant">#B92C2C</item>
@ -49,7 +49,7 @@
</style> </style>
<style name="LightTheme.Green" parent="LightTheme.Blue"> <style name="LightTheme_Green" parent="LightTheme_Blue">
<item name="colorPrimary">#3ED714</item> <item name="colorPrimary">#3ED714</item>
<item name="colorPrimaryVariant">#2CB943</item> <item name="colorPrimaryVariant">#2CB943</item>
@ -58,7 +58,7 @@
</style> </style>
<style name="LightTheme.Yellow" parent="LightTheme.Blue"> <style name="LightTheme_Yellow" parent="LightTheme_Blue">
<item name="colorPrimary">#ffd500</item> <item name="colorPrimary">#ffd500</item>
<item name="colorPrimaryVariant">#A6FFD500</item> <item name="colorPrimaryVariant">#A6FFD500</item>
@ -67,7 +67,7 @@
</style> </style>
<style name="LightTheme.Purple" parent="LightTheme.Blue"> <style name="LightTheme_Purple" parent="LightTheme_Blue">
<item name="colorPrimary">#6D49B7</item> <item name="colorPrimary">#6D49B7</item>
<item name="colorPrimaryVariant">#563C8D</item> <item name="colorPrimaryVariant">#563C8D</item>
@ -78,7 +78,7 @@
<!-- DARK --> <!-- DARK -->
<style name="DarkTheme.Blue" parent="Theme.MaterialComponents.NoActionBar"> <style name="DarkTheme_Blue" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">#2e73ff</item> <item name="colorPrimary">#2e73ff</item>
<item name="colorPrimaryVariant">#2C7EB9</item> <item name="colorPrimaryVariant">#2C7EB9</item>
@ -116,7 +116,7 @@
</style> </style>
<style name="DarkTheme.Red" parent="DarkTheme.Blue"> <style name="DarkTheme_Red" parent="DarkTheme_Blue">
<item name="colorPrimary">#D71414</item> <item name="colorPrimary">#D71414</item>
<item name="colorPrimaryVariant">#B92C2C</item> <item name="colorPrimaryVariant">#B92C2C</item>
@ -125,7 +125,7 @@
</style> </style>
<style name="DarkTheme.Green" parent="DarkTheme.Blue"> <style name="DarkTheme_Green" parent="DarkTheme_Blue">
<item name="colorPrimary">#3ED714</item> <item name="colorPrimary">#3ED714</item>
<item name="colorPrimaryVariant">#2CB943</item> <item name="colorPrimaryVariant">#2CB943</item>
@ -134,7 +134,7 @@
</style> </style>
<style name="DarkTheme.Yellow" parent="DarkTheme.Blue"> <style name="DarkTheme_Yellow" parent="DarkTheme_Blue">
<item name="colorPrimary">#ffd500</item> <item name="colorPrimary">#ffd500</item>
<item name="colorPrimaryVariant">#A6FFD500</item> <item name="colorPrimaryVariant">#A6FFD500</item>
@ -143,7 +143,7 @@
</style> </style>
<style name="DarkTheme.Purple" parent="DarkTheme.Blue"> <style name="DarkTheme_Purple" parent="DarkTheme_Blue">
<item name="colorPrimary">#6D49B7</item> <item name="colorPrimary">#6D49B7</item>
<item name="colorPrimaryVariant">#563C8D</item> <item name="colorPrimaryVariant">#563C8D</item>