moved methods out of singletones
This commit is contained in:
parent
834dad0946
commit
f47dd376b2
|
@ -92,21 +92,21 @@ class AppListAdapter(
|
|||
init {
|
||||
|
||||
if (prefs.getBoolean("enable_vanced", true)) {
|
||||
dataModels.add(viewModel.vanced.value)
|
||||
rootDataModels.add(viewModel.vancedRoot.value)
|
||||
dataModels.add(viewModel.vancedModel.value)
|
||||
rootDataModels.add(viewModel.vancedRootModel.value)
|
||||
apps.add(context.getString(R.string.vanced))
|
||||
itemCount++
|
||||
}
|
||||
|
||||
if (prefs.getBoolean("enable_music", true)) {
|
||||
dataModels.add(viewModel.music.value)
|
||||
rootDataModels.add(viewModel.musicRoot.value)
|
||||
dataModels.add(viewModel.musicModel.value)
|
||||
rootDataModels.add(viewModel.musicRootModel.value)
|
||||
apps.add(context.getString(R.string.music))
|
||||
itemCount++
|
||||
}
|
||||
|
||||
if (!isRoot) {
|
||||
dataModels.add(viewModel.microg.value)
|
||||
dataModels.add(viewModel.microgModel.value)
|
||||
apps.add(context.getString(R.string.microg))
|
||||
itemCount++
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ import com.crowdin.platform.CrowdinConfig
|
|||
import com.crowdin.platform.data.model.AuthConfig
|
||||
import com.crowdin.platform.data.remote.NetworkType
|
||||
import com.vanced.manager.BuildConfig.*
|
||||
import com.vanced.manager.utils.InternetTools.loadJson
|
||||
import com.vanced.manager.utils.loadJson
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
|
|
|
@ -4,10 +4,10 @@ import android.content.Context
|
|||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.DownloadHelper.download
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.getInstallUrl
|
||||
import com.vanced.manager.utils.InternetTools.microg
|
||||
import com.vanced.manager.utils.PackageHelper.install
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
import com.vanced.manager.utils.getInstallUrl
|
||||
import com.vanced.manager.utils.microg
|
||||
|
||||
object MicrogDownloader {
|
||||
|
||||
|
|
|
@ -3,16 +3,11 @@ package com.vanced.manager.core.downloader
|
|||
import android.content.Context
|
||||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.*
|
||||
import com.vanced.manager.utils.AppUtils.musicRootPkg
|
||||
import com.vanced.manager.utils.AppUtils.validateTheme
|
||||
import com.vanced.manager.utils.DeviceUtils.getArch
|
||||
import com.vanced.manager.utils.DownloadHelper.download
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||
import com.vanced.manager.utils.Extensions.getInstallUrl
|
||||
import com.vanced.manager.utils.Extensions.getLatestAppVersion
|
||||
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
|
||||
import com.vanced.manager.utils.InternetTools.music
|
||||
import com.vanced.manager.utils.InternetTools.musicVersions
|
||||
import com.vanced.manager.utils.PackageHelper.downloadStockCheck
|
||||
import com.vanced.manager.utils.PackageHelper.install
|
||||
import com.vanced.manager.utils.PackageHelper.installMusicRoot
|
||||
|
|
|
@ -6,17 +6,11 @@ import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
|||
import com.google.firebase.analytics.FirebaseAnalytics
|
||||
import com.google.firebase.analytics.ktx.logEvent
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.*
|
||||
import com.vanced.manager.utils.AppUtils.validateTheme
|
||||
import com.vanced.manager.utils.AppUtils.vancedRootPkg
|
||||
import com.vanced.manager.utils.DeviceUtils.getArch
|
||||
import com.vanced.manager.utils.DownloadHelper.download
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||
import com.vanced.manager.utils.Extensions.getInstallUrl
|
||||
import com.vanced.manager.utils.Extensions.getLatestAppVersion
|
||||
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.PackageHelper.downloadStockCheck
|
||||
import com.vanced.manager.utils.PackageHelper.installVanced
|
||||
import com.vanced.manager.utils.PackageHelper.installVancedRoot
|
||||
|
|
|
@ -7,8 +7,8 @@ import androidx.lifecycle.LiveData
|
|||
import androidx.lifecycle.MutableLiveData
|
||||
import com.beust.klaxon.JsonObject
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.lifecycleOwner
|
||||
import com.vanced.manager.utils.PackageHelper.isPackageInstalled
|
||||
import com.vanced.manager.utils.lifecycleOwner
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package com.vanced.manager.model
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.github.kittinunf.fuel.core.requests.CancellableRequest
|
||||
import okhttp3.ResponseBody
|
||||
import retrofit2.Call
|
||||
|
||||
|
|
|
@ -25,13 +25,7 @@ import com.vanced.manager.ui.dialogs.ManagerUpdateDialog
|
|||
import com.vanced.manager.ui.dialogs.URLChangeDialog
|
||||
import com.vanced.manager.ui.fragments.HomeFragmentDirections
|
||||
import com.vanced.manager.ui.fragments.SettingsFragmentDirections
|
||||
import com.vanced.manager.utils.Extensions.show
|
||||
import com.vanced.manager.utils.InternetTools.manager
|
||||
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.ThemeHelper.setFinalTheme
|
||||
import com.vanced.manager.utils.*
|
||||
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
|
|
@ -6,10 +6,10 @@ import androidx.core.content.res.ResourcesCompat
|
|||
import androidx.core.graphics.ColorUtils
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.lifecycleOwner
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.accentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
import com.vanced.manager.utils.lifecycleOwner
|
||||
|
||||
class ThemedMaterialButton @JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
|
|
@ -5,10 +5,8 @@ import android.content.res.ColorStateList
|
|||
import android.util.AttributeSet
|
||||
import com.google.android.material.checkbox.MaterialCheckBox
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.lifecycleOwner
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
|
||||
class ThemedMaterialCheckbox @JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
|
|
@ -5,10 +5,8 @@ import android.content.res.ColorStateList
|
|||
import android.util.AttributeSet
|
||||
import com.google.android.material.radiobutton.MaterialRadioButton
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.lifecycleOwner
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
|
||||
class ThemedMaterialRadioButton @JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
|
|
@ -4,8 +4,8 @@ import android.content.Context
|
|||
import android.content.res.ColorStateList
|
||||
import android.util.AttributeSet
|
||||
import com.google.android.material.slider.Slider
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.ThemeHelper
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
|
||||
class ThemedMaterialSlider@JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
@ -14,7 +14,7 @@ class ThemedMaterialSlider@JvmOverloads constructor(
|
|||
) : Slider(context, attributeSet, defStyleAttr) {
|
||||
|
||||
init {
|
||||
thumbStrokeColor = ColorStateList.valueOf(context.getDefaultPrefs().getInt("manager_accent_color", ThemeHelper.defAccentColor))
|
||||
thumbStrokeColor = ColorStateList.valueOf(context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor))
|
||||
}
|
||||
|
||||
}
|
|
@ -5,10 +5,10 @@ import android.content.res.ColorStateList
|
|||
import android.util.AttributeSet
|
||||
import androidx.core.graphics.ColorUtils
|
||||
import com.google.android.material.button.MaterialButton
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.lifecycleOwner
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.accentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
import com.vanced.manager.utils.lifecycleOwner
|
||||
|
||||
|
||||
class ThemedOutlinedMaterialButton @JvmOverloads constructor(
|
||||
|
|
|
@ -4,8 +4,8 @@ import android.content.Context
|
|||
import android.util.AttributeSet
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
|
||||
class ThemedSwipeRefreshlayout @JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
|
|
@ -8,10 +8,10 @@ import androidx.appcompat.widget.SwitchCompat
|
|||
import androidx.core.graphics.ColorUtils
|
||||
import androidx.core.graphics.drawable.DrawableCompat
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.lifecycleOwner
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.accentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
import com.vanced.manager.utils.lifecycleOwner
|
||||
|
||||
class ThemedSwitchCompat @JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
|
|
@ -3,10 +3,10 @@ package com.vanced.manager.ui.core
|
|||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.lifecycleOwner
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.accentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
import com.vanced.manager.utils.lifecycleOwner
|
||||
|
||||
class ThemedTextView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
|
|
|
@ -18,7 +18,7 @@ import com.vanced.manager.core.downloader.VancedDownloader.downloadVanced
|
|||
import com.vanced.manager.core.ui.base.BindingDialogFragment
|
||||
import com.vanced.manager.databinding.DialogAppDownloadBinding
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||
import com.vanced.manager.utils.Extensions.applyAccent
|
||||
import com.vanced.manager.utils.applyAccent
|
||||
|
||||
class AppDownloadDialog : BindingDialogFragment<DialogAppDownloadBinding>() {
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@ import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
|||
import com.vanced.manager.core.ui.ext.showDialog
|
||||
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
|
||||
import com.vanced.manager.ui.core.ThemedMaterialRadioButton
|
||||
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
|
||||
class AppVersionSelectorDialog : BindingBottomSheetDialogFragment<DialogBottomRadioButtonBinding>() {
|
||||
|
||||
|
|
|
@ -5,9 +5,9 @@ import androidx.core.content.edit
|
|||
import androidx.preference.PreferenceManager
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.applyAccent
|
||||
import com.vanced.manager.utils.InternetTools.openUrl
|
||||
import com.vanced.manager.utils.MiuiHelper
|
||||
import com.vanced.manager.utils.applyAccent
|
||||
import com.vanced.manager.utils.isMiui
|
||||
import com.vanced.manager.utils.openUrl
|
||||
|
||||
object DialogContainer {
|
||||
|
||||
|
@ -19,12 +19,12 @@ object DialogContainer {
|
|||
dialog.dismiss()
|
||||
}
|
||||
setOnDismissListener {
|
||||
if (MiuiHelper.isMiui()) {
|
||||
if (isMiui()) {
|
||||
applyAccentMiuiDialog(context)
|
||||
}
|
||||
}
|
||||
setOnCancelListener {
|
||||
if (MiuiHelper.isMiui()) {
|
||||
if (isMiui()) {
|
||||
applyAccentMiuiDialog(context)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,10 +16,10 @@ import com.madrapps.pikolo.listeners.OnColorSelectionListener
|
|||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.ui.base.BindingDialogFragment
|
||||
import com.vanced.manager.databinding.DialogManagerAccentColorBinding
|
||||
import com.vanced.manager.utils.Extensions.toHex
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.mutableAccentColor
|
||||
import com.vanced.manager.utils.accentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.mutableAccentColor
|
||||
import com.vanced.manager.utils.toHex
|
||||
|
||||
class ManagerAccentColorDialog : BindingDialogFragment<DialogManagerAccentColorBinding>() {
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@ import com.vanced.manager.BuildConfig.MANAGER_LANGUAGES
|
|||
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
||||
import com.vanced.manager.databinding.DialogManagerLanguageBinding
|
||||
import com.vanced.manager.ui.core.ThemedMaterialRadioButton
|
||||
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.LanguageHelper.getLanguageFormat
|
||||
import com.vanced.manager.utils.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.getLanguageFormat
|
||||
|
||||
class ManagerLanguageDialog : BindingBottomSheetDialogFragment<DialogManagerLanguageBinding>() {
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
|||
import com.google.android.material.radiobutton.MaterialRadioButton
|
||||
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
||||
import com.vanced.manager.databinding.DialogManagerThemeBinding
|
||||
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.getCheckedButtonTag
|
||||
|
||||
class ManagerThemeDialog : BindingBottomSheetDialogFragment<DialogManagerThemeBinding>() {
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ import com.vanced.manager.core.ui.base.BindingDialogFragment
|
|||
import com.vanced.manager.databinding.DialogManagerUpdateBinding
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadManager
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||
import com.vanced.manager.utils.Extensions.applyAccent
|
||||
import com.vanced.manager.utils.InternetTools.manager
|
||||
import com.vanced.manager.utils.applyAccent
|
||||
import com.vanced.manager.utils.manager
|
||||
|
||||
class ManagerUpdateDialog : BindingDialogFragment<DialogManagerUpdateBinding>() {
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import com.google.android.material.radiobutton.MaterialRadioButton
|
|||
import com.topjohnwu.superuser.Shell
|
||||
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
||||
import com.vanced.manager.databinding.DialogManagerVariantBinding
|
||||
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.getCheckedButtonTag
|
||||
|
||||
class ManagerVariantDialog : BindingBottomSheetDialogFragment<DialogManagerVariantBinding>() {
|
||||
|
||||
|
|
|
@ -7,9 +7,9 @@ import com.vanced.manager.R
|
|||
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
||||
import com.vanced.manager.core.ui.ext.showDialog
|
||||
import com.vanced.manager.databinding.DialogMusicPreferencesBinding
|
||||
import com.vanced.manager.utils.Extensions.convertToAppVersions
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.InternetTools.musicVersions
|
||||
import com.vanced.manager.utils.convertToAppVersions
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
import com.vanced.manager.utils.musicVersions
|
||||
|
||||
class MusicPreferencesDialog : BindingBottomSheetDialogFragment<DialogMusicPreferencesBinding>() {
|
||||
|
||||
|
|
|
@ -8,12 +8,12 @@ import androidx.core.content.edit
|
|||
import com.vanced.manager.R
|
||||
import com.vanced.manager.core.ui.base.BindingDialogFragment
|
||||
import com.vanced.manager.databinding.DialogServicedTimerBinding
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.Extensions.writeServiceDScript
|
||||
import com.vanced.manager.utils.PackageHelper
|
||||
import com.vanced.manager.utils.PackageHelper.getPackageDir
|
||||
import com.vanced.manager.utils.PackageHelper.getPkgNameRoot
|
||||
import com.vanced.manager.utils.PackageHelper.scriptExists
|
||||
import com.vanced.manager.utils.getDefaultPrefs
|
||||
import com.vanced.manager.utils.writeServiceDScript
|
||||
import java.io.IOException
|
||||
import java.util.*
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@ import androidx.lifecycle.lifecycleScope
|
|||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
||||
import com.vanced.manager.core.ui.base.BindingDialogFragment
|
||||
import com.vanced.manager.databinding.DialogCustomUrlBinding
|
||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||
import com.vanced.manager.utils.InternetTools.loadJson
|
||||
import com.vanced.manager.utils.baseUrl
|
||||
import com.vanced.manager.utils.loadJson
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class URLChangeDialog : BindingDialogFragment<DialogCustomUrlBinding>() {
|
||||
|
|
|
@ -17,8 +17,8 @@ import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
|||
import com.vanced.manager.core.ui.ext.showDialog
|
||||
import com.vanced.manager.databinding.DialogVancedLanguageSelectionBinding
|
||||
import com.vanced.manager.ui.core.ThemedMaterialCheckbox
|
||||
import com.vanced.manager.utils.InternetTools.vanced
|
||||
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
|
||||
import com.vanced.manager.utils.getDefaultVancedLanguages
|
||||
import com.vanced.manager.utils.vanced
|
||||
import java.util.*
|
||||
|
||||
class VancedLanguageSelectionDialog : BindingBottomSheetDialogFragment<DialogVancedLanguageSelectionBinding>() {
|
||||
|
|
|
@ -9,11 +9,7 @@ import com.vanced.manager.R
|
|||
import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
||||
import com.vanced.manager.core.ui.ext.showDialog
|
||||
import com.vanced.manager.databinding.DialogVancedPreferencesBinding
|
||||
import com.vanced.manager.utils.Extensions.convertToAppTheme
|
||||
import com.vanced.manager.utils.Extensions.convertToAppVersions
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import com.vanced.manager.utils.InternetTools.vancedVersions
|
||||
import com.vanced.manager.utils.LanguageHelper.getDefaultVancedLanguages
|
||||
import com.vanced.manager.utils.*
|
||||
import java.util.*
|
||||
|
||||
class VancedPreferencesDialog : BindingBottomSheetDialogFragment<DialogVancedPreferencesBinding>() {
|
||||
|
|
|
@ -11,9 +11,9 @@ import com.vanced.manager.core.ui.base.BindingBottomSheetDialogFragment
|
|||
import com.vanced.manager.core.ui.ext.showDialog
|
||||
import com.vanced.manager.databinding.DialogBottomRadioButtonBinding
|
||||
import com.vanced.manager.ui.core.ThemedMaterialRadioButton
|
||||
import com.vanced.manager.utils.Extensions.convertToAppTheme
|
||||
import com.vanced.manager.utils.Extensions.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.InternetTools.vanced
|
||||
import com.vanced.manager.utils.convertToAppTheme
|
||||
import com.vanced.manager.utils.getCheckedButtonTag
|
||||
import com.vanced.manager.utils.vanced
|
||||
|
||||
class VancedThemeSelectorDialog : BindingBottomSheetDialogFragment<DialogBottomRadioButtonBinding>() {
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ import com.vanced.manager.core.ui.ext.showDialog
|
|||
import com.vanced.manager.databinding.FragmentAboutBinding
|
||||
import com.vanced.manager.ui.dialogs.AppInfoDialog
|
||||
import com.vanced.manager.ui.viewmodels.AboutViewModel
|
||||
import com.vanced.manager.utils.InternetTools.manager
|
||||
import com.vanced.manager.utils.manager
|
||||
|
||||
class AboutFragment : BindingFragment<FragmentAboutBinding>() {
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import com.vanced.manager.databinding.FragmentDevSettingsBinding
|
|||
import com.vanced.manager.ui.WelcomeActivity
|
||||
import com.vanced.manager.ui.dialogs.ManagerUpdateDialog
|
||||
import com.vanced.manager.ui.dialogs.URLChangeDialog
|
||||
import com.vanced.manager.utils.LanguageHelper.authCrowdin
|
||||
import com.vanced.manager.utils.authCrowdin
|
||||
|
||||
class DevSettingsFragment : BindingFragment<FragmentDevSettingsBinding>() {
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ import com.vanced.manager.databinding.FragmentHomeBinding
|
|||
import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModel
|
||||
import com.vanced.manager.ui.viewmodels.HomeViewModelFactory
|
||||
import com.vanced.manager.utils.InternetTools.isFetching
|
||||
import com.vanced.manager.utils.isFetching
|
||||
|
||||
open class HomeFragment : BindingFragment<FragmentHomeBinding>() {
|
||||
|
||||
|
|
|
@ -18,10 +18,10 @@ import com.vanced.manager.core.ui.base.BindingFragment
|
|||
import com.vanced.manager.core.ui.ext.showDialog
|
||||
import com.vanced.manager.databinding.FragmentSettingsBinding
|
||||
import com.vanced.manager.ui.dialogs.*
|
||||
import com.vanced.manager.utils.Extensions.toHex
|
||||
import com.vanced.manager.utils.LanguageHelper.getLanguageFormat
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import com.vanced.manager.utils.accentColor
|
||||
import com.vanced.manager.utils.defAccentColor
|
||||
import com.vanced.manager.utils.getLanguageFormat
|
||||
import com.vanced.manager.utils.toHex
|
||||
import java.io.File
|
||||
|
||||
class SettingsFragment : BindingFragment<FragmentSettingsBinding>() {
|
||||
|
|
|
@ -3,12 +3,12 @@ package com.vanced.manager.ui.viewmodels
|
|||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.InternetTools
|
||||
import com.vanced.manager.utils.openUrl
|
||||
|
||||
class AboutViewModel(application: Application): AndroidViewModel(application) {
|
||||
|
||||
fun openUrl(url: String) {
|
||||
InternetTools.openUrl(url, R.color.GitHub, getApplication())
|
||||
openUrl(url, R.color.GitHub, getApplication())
|
||||
}
|
||||
|
||||
}
|
|
@ -26,15 +26,13 @@ import com.vanced.manager.ui.dialogs.AppDownloadDialog
|
|||
import com.vanced.manager.ui.dialogs.InstallationFilesDetectedDialog
|
||||
import com.vanced.manager.ui.dialogs.MusicPreferencesDialog
|
||||
import com.vanced.manager.ui.dialogs.VancedPreferencesDialog
|
||||
import com.vanced.manager.utils.*
|
||||
import com.vanced.manager.utils.AppUtils.managerPkg
|
||||
import com.vanced.manager.utils.AppUtils.microgPkg
|
||||
import com.vanced.manager.utils.AppUtils.musicPkg
|
||||
import com.vanced.manager.utils.AppUtils.musicRootPkg
|
||||
import com.vanced.manager.utils.AppUtils.vancedPkg
|
||||
import com.vanced.manager.utils.AppUtils.vancedRootPkg
|
||||
import com.vanced.manager.utils.Extensions.show
|
||||
import com.vanced.manager.utils.InternetTools
|
||||
import com.vanced.manager.utils.InternetTools.loadJson
|
||||
import com.vanced.manager.utils.PackageHelper.apkExist
|
||||
import com.vanced.manager.utils.PackageHelper.musicApkExists
|
||||
import com.vanced.manager.utils.PackageHelper.uninstallApk
|
||||
|
@ -46,12 +44,12 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
|
|||
|
||||
private val prefs = getDefaultSharedPreferences(activity)
|
||||
|
||||
val vanced = MutableLiveData<DataModel>()
|
||||
val vancedRoot = MutableLiveData<RootDataModel>()
|
||||
val microg = MutableLiveData<DataModel>()
|
||||
val music = MutableLiveData<DataModel>()
|
||||
val musicRoot = MutableLiveData<RootDataModel>()
|
||||
val manager = MutableLiveData<DataModel>()
|
||||
val vancedModel = MutableLiveData<DataModel>()
|
||||
val vancedRootModel = MutableLiveData<RootDataModel>()
|
||||
val microgModel = MutableLiveData<DataModel>()
|
||||
val musicModel = MutableLiveData<DataModel>()
|
||||
val musicRootModel = MutableLiveData<RootDataModel>()
|
||||
val managerModel = MutableLiveData<DataModel>()
|
||||
|
||||
fun fetchData() {
|
||||
viewModelScope.launch {
|
||||
|
@ -73,7 +71,7 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
|
|||
else -> R.color.Vanced
|
||||
}
|
||||
|
||||
InternetTools.openUrl(url, color, activity)
|
||||
openUrl(url, color, activity)
|
||||
}
|
||||
|
||||
fun launchApp(app: String, isRoot: Boolean) {
|
||||
|
@ -93,7 +91,7 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
|
|||
|
||||
fun openInstallDialog(view: View, app: String) {
|
||||
val variant = prefs.getString("vanced_variant", "nonroot")
|
||||
if (variant == "nonroot" && app != activity.getString(R.string.microg) && !microg.value?.isAppInstalled?.value!!) {
|
||||
if (variant == "nonroot" && app != activity.getString(R.string.microg) && !microgModel.value?.isAppInstalled?.value!!) {
|
||||
microgToast.show()
|
||||
return
|
||||
}
|
||||
|
@ -157,11 +155,11 @@ open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
|
|||
}
|
||||
|
||||
init {
|
||||
vanced.value = DataModel(InternetTools.vanced, activity, vancedPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced))
|
||||
vancedRoot.value = RootDataModel(InternetTools.vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced), "vanced")
|
||||
music.value = DataModel(InternetTools.music, activity, musicPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music))
|
||||
musicRoot.value = RootDataModel(InternetTools.music, activity, musicRootPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music), "music")
|
||||
microg.value = DataModel(InternetTools.microg, activity, microgPkg, activity.getString(R.string.microg), AppCompatResources.getDrawable(activity, R.drawable.ic_microg))
|
||||
manager.value = DataModel(InternetTools.manager, activity, managerPkg, activity.getString(R.string.app_name), AppCompatResources.getDrawable(activity, R.mipmap.ic_launcher))
|
||||
vancedModel.value = DataModel(vanced, activity, vancedPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced))
|
||||
vancedRootModel.value = RootDataModel(vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), AppCompatResources.getDrawable(activity, R.drawable.ic_vanced), "vanced")
|
||||
musicModel.value = DataModel(music, activity, musicPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music))
|
||||
musicRootModel.value = RootDataModel(music, activity, musicRootPkg, activity.getString(R.string.music), AppCompatResources.getDrawable(activity, R.drawable.ic_music), "music")
|
||||
microgModel.value = DataModel(microg, activity, microgPkg, activity.getString(R.string.microg), AppCompatResources.getDrawable(activity, R.drawable.ic_microg))
|
||||
managerModel.value = DataModel(manager, activity, managerPkg, activity.getString(R.string.app_name), AppCompatResources.getDrawable(activity, R.mipmap.ic_launcher))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,6 @@ import com.vanced.manager.R
|
|||
import com.vanced.manager.ui.dialogs.AppDownloadDialog
|
||||
import com.vanced.manager.ui.fragments.HomeFragment
|
||||
import com.vanced.manager.utils.DownloadHelper.downloadProgress
|
||||
import com.vanced.manager.utils.InternetTools.getSha256
|
||||
import kotlinx.coroutines.*
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
|
@ -92,7 +91,7 @@ object AppUtils: CoroutineScope by CoroutineScope(Dispatchers.IO) {
|
|||
context: Context,
|
||||
): Boolean {
|
||||
val themeF = File(downloadPath, "$apk.apk")
|
||||
return runBlocking { InternetTools.checkSHA256(getSha256(hashUrl, apk, context), themeF) }
|
||||
return runBlocking { checkSHA256(getSha256(hashUrl, apk, context), themeF) }
|
||||
}
|
||||
|
||||
private fun getErrorMessage(status: String, context: Context): String {
|
||||
|
@ -111,7 +110,7 @@ object AppUtils: CoroutineScope by CoroutineScope(Dispatchers.IO) {
|
|||
status.contains("Files_Missing_VA") -> context.getString(R.string.files_missing_va)
|
||||
status.contains("Path_Missing") -> context.getString(R.string.path_missing)
|
||||
else ->
|
||||
if (MiuiHelper.isMiui())
|
||||
if (isMiui())
|
||||
context.getString(R.string.installation_miui)
|
||||
else
|
||||
context.getString(R.string.installation_failed)
|
||||
|
@ -127,7 +126,7 @@ object AppUtils: CoroutineScope by CoroutineScope(Dispatchers.IO) {
|
|||
PackageInstaller.STATUS_FAILURE_INVALID -> context.getString(R.string.installation_invalid)
|
||||
PackageInstaller.STATUS_FAILURE_STORAGE -> context.getString(R.string.installation_storage)
|
||||
else ->
|
||||
if (MiuiHelper.isMiui())
|
||||
if (isMiui())
|
||||
context.getString(R.string.installation_miui)
|
||||
else
|
||||
context.getString(R.string.installation_failed)
|
||||
|
|
|
@ -2,12 +2,8 @@ package com.vanced.manager.utils
|
|||
|
||||
import android.os.Build
|
||||
|
||||
object DeviceUtils {
|
||||
|
||||
fun getArch(): String = when {
|
||||
Build.SUPPORTED_ABIS.contains("x86") -> "x86"
|
||||
Build.SUPPORTED_ABIS.contains("arm64-v8a") -> "arm64_v8a"
|
||||
else -> "armeabi_v7a"
|
||||
}
|
||||
|
||||
fun getArch(): String = when {
|
||||
Build.SUPPORTED_ABIS.contains("x86") -> "x86"
|
||||
Build.SUPPORTED_ABIS.contains("arm64-v8a") -> "arm64_v8a"
|
||||
else -> "armeabi_v7a"
|
||||
}
|
|
@ -17,88 +17,81 @@ import com.google.android.material.radiobutton.MaterialRadioButton
|
|||
import com.topjohnwu.superuser.io.SuFile
|
||||
import com.topjohnwu.superuser.io.SuFileOutputStream
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.InternetTools.baseUrl
|
||||
import com.vanced.manager.utils.ThemeHelper.accentColor
|
||||
import com.vanced.manager.utils.ThemeHelper.defAccentColor
|
||||
import java.util.*
|
||||
|
||||
object Extensions {
|
||||
fun RadioGroup.getCheckedButtonTag(): String? {
|
||||
return findViewById<MaterialRadioButton>(checkedRadioButtonId)?.tag?.toString()
|
||||
}
|
||||
|
||||
fun RadioGroup.getCheckedButtonTag(): String? {
|
||||
return findViewById<MaterialRadioButton>(checkedRadioButtonId)?.tag?.toString()
|
||||
fun DialogFragment.show(activity: FragmentActivity) {
|
||||
try {
|
||||
show(activity.supportFragmentManager, "")
|
||||
} catch (e: Exception) {
|
||||
Log.d("VMUI", e.stackTraceToString())
|
||||
}
|
||||
|
||||
fun DialogFragment.show(activity: FragmentActivity) {
|
||||
try {
|
||||
show(activity.supportFragmentManager, "")
|
||||
} catch (e: Exception) {
|
||||
Log.d("VMUI", e.stackTraceToString())
|
||||
}
|
||||
}
|
||||
|
||||
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(): List<String> {
|
||||
val versionsModel = arrayListOf("latest")
|
||||
for (i in reversed().indices) {
|
||||
versionsModel.add(this[i])
|
||||
}
|
||||
return versionsModel
|
||||
}
|
||||
|
||||
fun Context.getDefaultPrefs(): SharedPreferences = getDefaultSharedPreferences(this)
|
||||
fun String.convertToAppTheme(context: Context): String {
|
||||
return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT))
|
||||
}
|
||||
|
||||
//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(): List<String> {
|
||||
val versionsModel = arrayListOf("latest")
|
||||
for (i in reversed().indices) {
|
||||
versionsModel.add(this[i])
|
||||
}
|
||||
return versionsModel
|
||||
fun String.getLatestAppVersion(versions: List<String>): String {
|
||||
return if (this == "latest") versions.reversed()[0] else this
|
||||
}
|
||||
|
||||
fun SharedPreferences.getInstallUrl() = getString("install_url", baseUrl)
|
||||
|
||||
fun Context.lifecycleOwner(): LifecycleOwner? {
|
||||
var curContext = this
|
||||
var maxDepth = 20
|
||||
while (maxDepth-- > 0 && curContext !is LifecycleOwner) {
|
||||
curContext = (curContext as ContextWrapper).baseContext
|
||||
}
|
||||
|
||||
fun String.convertToAppTheme(context: Context): String {
|
||||
return context.getString(R.string.light_plus_other, this.capitalize(Locale.ROOT))
|
||||
return if (curContext is LifecycleOwner) {
|
||||
curContext
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun String.getLatestAppVersion(versions: List<String>): String {
|
||||
return if (this == "latest") versions.reversed()[0] else this
|
||||
fun Int.toHex(): String = java.lang.String.format("#%06X", 0xFFFFFF and this)
|
||||
|
||||
//Material team decided to keep their LinearProgressIndicator final
|
||||
//At least extension methods exist
|
||||
fun LinearProgressIndicator.applyAccent() {
|
||||
with(accentColor.value ?: context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) {
|
||||
setIndicatorColor(this)
|
||||
trackColor = ColorUtils.setAlphaComponent(this, 70)
|
||||
}
|
||||
}
|
||||
|
||||
fun SharedPreferences.getInstallUrl() = getString("install_url", baseUrl)
|
||||
|
||||
fun Context.lifecycleOwner(): LifecycleOwner? {
|
||||
var curContext = this
|
||||
var maxDepth = 20
|
||||
while (maxDepth-- > 0 && curContext !is LifecycleOwner) {
|
||||
curContext = (curContext as ContextWrapper).baseContext
|
||||
}
|
||||
return if (curContext is LifecycleOwner) {
|
||||
curContext
|
||||
} else {
|
||||
null
|
||||
fun MaterialAlertDialogBuilder.applyAccent() {
|
||||
with(accentColor.value ?: context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) {
|
||||
show().apply {
|
||||
getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(this@with)
|
||||
getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(this@with)
|
||||
getButton(DialogInterface.BUTTON_NEUTRAL).setTextColor(this@with)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Int.toHex(): String = java.lang.String.format("#%06X", 0xFFFFFF and this)
|
||||
|
||||
//Material team decided to keep their LinearProgressIndicator final
|
||||
//At least extension methods exist
|
||||
fun LinearProgressIndicator.applyAccent() {
|
||||
with(accentColor.value ?: context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) {
|
||||
setIndicatorColor(this)
|
||||
trackColor = ColorUtils.setAlphaComponent(this, 70)
|
||||
}
|
||||
}
|
||||
|
||||
fun MaterialAlertDialogBuilder.applyAccent() {
|
||||
with(accentColor.value ?: context.getDefaultPrefs().getInt("manager_accent_color", defAccentColor)) {
|
||||
show().apply {
|
||||
getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(this@with)
|
||||
getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(this@with)
|
||||
getButton(DialogInterface.BUTTON_NEUTRAL).setTextColor(this@with)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun Context.writeServiceDScript(apkFPath: String, path: String, app: String) {
|
||||
val shellFileZ = SuFile.open("/data/adb/service.d/$app.sh")
|
||||
shellFileZ.createNewFile()
|
||||
val code = """#!/system/bin/sh${"\n"}while [ "`getprop sys.boot_completed | tr -d '\r' `" != "1" ]; do sleep ${getDefaultPrefs().getInt("serviced_sleep_timer", 1)}; done${"\n"}chcon u:object_r:apk_data_file:s0 $apkFPath${"\n"}mount -o bind $apkFPath $path"""
|
||||
SuFileOutputStream(shellFileZ).use { out -> out.write(code.toByteArray())}
|
||||
}
|
||||
|
||||
}
|
||||
fun Context.writeServiceDScript(apkFPath: String, path: String, app: String) {
|
||||
val shellFileZ = SuFile.open("/data/adb/service.d/$app.sh")
|
||||
shellFileZ.createNewFile()
|
||||
val code = """#!/system/bin/sh${"\n"}while [ "`getprop sys.boot_completed | tr -d '\r' `" != "1" ]; do sleep ${getDefaultPrefs().getInt("serviced_sleep_timer", 1)}; done${"\n"}chcon u:object_r:apk_data_file:s0 $apkFPath${"\n"}mount -o bind $apkFPath $path"""
|
||||
SuFileOutputStream(shellFileZ).use { out -> out.write(code.toByteArray())}
|
||||
}
|
||||
|
|
|
@ -14,101 +14,95 @@ import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
|||
import com.beust.klaxon.JsonArray
|
||||
import com.beust.klaxon.JsonObject
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.library.network.okhttp.interceptors.LOG_INTERCEPTOR
|
||||
import com.vanced.manager.utils.AppUtils.generateChecksum
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
object InternetTools {
|
||||
private const val TAG = "VMNetTools"
|
||||
|
||||
private const val TAG = "VMNetTools"
|
||||
val vanced = MutableLiveData<JsonObject?>()
|
||||
val music = MutableLiveData<JsonObject?>()
|
||||
val microg = MutableLiveData<JsonObject?>()
|
||||
val manager = MutableLiveData<JsonObject?>()
|
||||
|
||||
val vanced = MutableLiveData<JsonObject?>()
|
||||
val music = MutableLiveData<JsonObject?>()
|
||||
val microg = MutableLiveData<JsonObject?>()
|
||||
val manager = MutableLiveData<JsonObject?>()
|
||||
val vancedVersions = MutableLiveData<JsonArray<String>>()
|
||||
val musicVersions = MutableLiveData<JsonArray<String>>()
|
||||
|
||||
val vancedVersions = MutableLiveData<JsonArray<String>>()
|
||||
val musicVersions = MutableLiveData<JsonArray<String>>()
|
||||
val isFetching = MutableLiveData<Boolean>()
|
||||
|
||||
val isFetching = MutableLiveData<Boolean>()
|
||||
//var braveTiers = MutableLiveData<JsonObject?>()
|
||||
|
||||
//var braveTiers = MutableLiveData<JsonObject?>()
|
||||
fun openUrl(url: String, color: Int, context: Context) {
|
||||
try {
|
||||
val customTabPrefs = getDefaultSharedPreferences(context).getBoolean("use_custom_tabs", true)
|
||||
if (customTabPrefs) {
|
||||
val builder = CustomTabsIntent.Builder()
|
||||
val params = CustomTabColorSchemeParams.Builder().setToolbarColor(ContextCompat.getColor(context, color))
|
||||
builder.setDefaultColorSchemeParams(params.build())
|
||||
val customTabsIntent = builder.build()
|
||||
customTabsIntent.intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
customTabsIntent.launchUrl(context, url.toUri())
|
||||
} else
|
||||
context.startActivity(Intent(Intent.ACTION_VIEW, url.toUri()).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
|
||||
|
||||
fun openUrl(url: String, color: Int, context: Context) {
|
||||
try {
|
||||
val customTabPrefs = getDefaultSharedPreferences(context).getBoolean("use_custom_tabs", true)
|
||||
if (customTabPrefs) {
|
||||
val builder = CustomTabsIntent.Builder()
|
||||
val params = CustomTabColorSchemeParams.Builder().setToolbarColor(ContextCompat.getColor(context, color))
|
||||
builder.setDefaultColorSchemeParams(params.build())
|
||||
val customTabsIntent = builder.build()
|
||||
customTabsIntent.intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
customTabsIntent.launchUrl(context, url.toUri())
|
||||
} else
|
||||
context.startActivity(Intent(Intent.ACTION_VIEW, url.toUri()).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
|
||||
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
Toast.makeText(context, R.string.error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
} catch (e: ActivityNotFoundException) {
|
||||
Toast.makeText(context, R.string.error, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/') + 1, url.length)
|
||||
fun getFileNameFromUrl(url: String) = url.substring(url.lastIndexOf('/') + 1, url.length)
|
||||
|
||||
suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) {
|
||||
isFetching.postValue(true)
|
||||
val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
|
||||
val calendar = Calendar.getInstance()
|
||||
val hour = calendar.get(Calendar.HOUR_OF_DAY)
|
||||
val minute = calendar.get(Calendar.MINUTE)
|
||||
val second = calendar.get(Calendar.SECOND)
|
||||
val fetchTime = "fetchTime=$hour$minute$second"
|
||||
val latest = JsonHelper.getJson("$installUrl/latest.json?$fetchTime")
|
||||
val versions = JsonHelper.getJson("$installUrl/versions.json?$fetchTime")
|
||||
suspend fun loadJson(context: Context) = withContext(Dispatchers.IO) {
|
||||
isFetching.postValue(true)
|
||||
val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
|
||||
val calendar = Calendar.getInstance()
|
||||
val hour = calendar.get(Calendar.HOUR_OF_DAY)
|
||||
val minute = calendar.get(Calendar.MINUTE)
|
||||
val second = calendar.get(Calendar.SECOND)
|
||||
val fetchTime = "fetchTime=$hour$minute$second"
|
||||
val latest = getJson("$installUrl/latest.json?$fetchTime")
|
||||
val versions = getJson("$installUrl/versions.json?$fetchTime")
|
||||
// braveTiers.apply {
|
||||
// set(getJson("$installUrl/sponsor.json"))
|
||||
// notifyChange()
|
||||
// }
|
||||
|
||||
vanced.postValue(latest?.obj("vanced"))
|
||||
vancedVersions.postValue(versions?.array("vanced") )
|
||||
music.postValue(latest?.obj("music"))
|
||||
musicVersions.postValue(versions?.array("music"))
|
||||
microg.postValue(latest?.obj("microg"))
|
||||
manager.postValue(latest?.obj("manager"))
|
||||
isFetching.postValue(false)
|
||||
vanced.postValue(latest?.obj("vanced"))
|
||||
vancedVersions.postValue(versions?.array("vanced") )
|
||||
music.postValue(latest?.obj("music"))
|
||||
musicVersions.postValue(versions?.array("music"))
|
||||
microg.postValue(latest?.obj("microg"))
|
||||
manager.postValue(latest?.obj("manager"))
|
||||
isFetching.postValue(false)
|
||||
}
|
||||
|
||||
private suspend fun getJsonString(file: String, obj: String, context: Context): String {
|
||||
val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
|
||||
return try {
|
||||
getJson("$installUrl/$file")?.string(obj) ?: context.getString(R.string.unavailable)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Error: ", e)
|
||||
context.getString(R.string.unavailable)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getJsonString(file: String, obj: String, context: Context): String {
|
||||
val installUrl = context.getDefaultPrefs().getString("install_url", baseUrl)
|
||||
return try {
|
||||
JsonHelper.getJson("$installUrl/$file")?.string(obj) ?: context.getString(R.string.unavailable)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Error: ", e)
|
||||
context.getString(R.string.unavailable)
|
||||
}
|
||||
suspend fun getSha256(hashUrl: String, obj: String, context: Context): String {
|
||||
return getJsonString(hashUrl, obj, context)
|
||||
}
|
||||
|
||||
fun checkSHA256(sha256: String, updateFile: File): Boolean {
|
||||
return try {
|
||||
val dataBuffer = updateFile.readBytes()
|
||||
// Generate the checksum
|
||||
val sum = generateChecksum(dataBuffer)
|
||||
|
||||
sum.equals(sha256, ignoreCase = true)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getSha256(hashUrl: String, obj: String, context: Context): String {
|
||||
return getJsonString(hashUrl, obj, context)
|
||||
}
|
||||
|
||||
fun checkSHA256(sha256: String, updateFile: File): Boolean {
|
||||
return try {
|
||||
val dataBuffer = updateFile.readBytes()
|
||||
// Generate the checksum
|
||||
val sum = generateChecksum(dataBuffer)
|
||||
|
||||
sum.equals(sha256, ignoreCase = true)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
const val baseUrl = "https://vancedapp.com/api/v1"
|
||||
|
||||
}
|
||||
const val baseUrl = "https://vancedapp.com/api/v1"
|
|
@ -7,32 +7,28 @@ import com.beust.klaxon.Parser
|
|||
import com.github.kittinunf.fuel.coroutines.awaitString
|
||||
import com.github.kittinunf.fuel.httpGet
|
||||
|
||||
object JsonHelper {
|
||||
private var dataMap: HashMap<String, JsonObject> = HashMap()
|
||||
|
||||
private var dataMap: HashMap<String, JsonObject> = HashMap()
|
||||
|
||||
suspend fun getJson(url: String): JsonObject? {
|
||||
return try {
|
||||
if (dataMap.containsKey(url)) {
|
||||
dataMap[url]
|
||||
} else {
|
||||
dataMap[url] = getSuspendJson(url)
|
||||
dataMap[url]
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
//This null is NEEDED, do NOT try to "fix" NPE here!!!
|
||||
null
|
||||
suspend fun getJson(url: String): JsonObject? {
|
||||
return try {
|
||||
if (dataMap.containsKey(url)) {
|
||||
dataMap[url]
|
||||
} else {
|
||||
dataMap[url] = getSuspendJson(url)
|
||||
dataMap[url]
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
//This null is NEEDED, do NOT try to "fix" NPE here!!!
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getSuspendJson(url: String): JsonObject =
|
||||
Parser.default().parse(
|
||||
StringBuilder(url.httpGet().awaitString())
|
||||
) as JsonObject
|
||||
private suspend fun getSuspendJson(url: String): JsonObject =
|
||||
Parser.default().parse(
|
||||
StringBuilder(url.httpGet().awaitString())
|
||||
) as JsonObject
|
||||
|
||||
suspend fun getJsonArray(url: String): JsonArray<String> =
|
||||
Klaxon().parseArray<String>(
|
||||
url.httpGet().awaitString()
|
||||
) as JsonArray<String>
|
||||
|
||||
}
|
||||
suspend fun getJsonArray(url: String): JsonArray<String> =
|
||||
Klaxon().parseArray<String>(
|
||||
url.httpGet().awaitString()
|
||||
) as JsonArray<String>
|
||||
|
|
|
@ -11,73 +11,68 @@ import android.provider.Settings
|
|||
import androidx.annotation.RequiresApi
|
||||
import com.crowdin.platform.Crowdin
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.InternetTools.vanced
|
||||
import java.util.*
|
||||
|
||||
object LanguageHelper {
|
||||
|
||||
fun getLanguageFormat(context: Context, language: String): String {
|
||||
return when {
|
||||
language == "System Default" -> context.getString(R.string.system_default)
|
||||
language.length > 2 -> {
|
||||
val loc = Locale(
|
||||
language.substring(0, language.length - 3),
|
||||
language.substring(language.length - 2)
|
||||
)
|
||||
loc.getDisplayName(loc).capitalize(Locale.ENGLISH)
|
||||
}
|
||||
else -> {
|
||||
val loc = Locale(language)
|
||||
loc.getDisplayName(loc).capitalize(Locale.ENGLISH)
|
||||
}
|
||||
fun getLanguageFormat(context: Context, language: String): String {
|
||||
return when {
|
||||
language == "System Default" -> context.getString(R.string.system_default)
|
||||
language.length > 2 -> {
|
||||
val loc = Locale(
|
||||
language.substring(0, language.length - 3),
|
||||
language.substring(language.length - 2)
|
||||
)
|
||||
loc.getDisplayName(loc).capitalize(Locale.ENGLISH)
|
||||
}
|
||||
else -> {
|
||||
val loc = Locale(language)
|
||||
loc.getDisplayName(loc).capitalize(Locale.ENGLISH)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
fun getDefaultVancedLanguages(): String {
|
||||
val serverLangs = vanced.value?.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 finalLangs = mutableListOf<String>()
|
||||
sysLocales.forEach { sysLocale ->
|
||||
when {
|
||||
sysLocale == "en" -> finalLangs.add(sysLocale)
|
||||
serverLangs.contains(sysLocale) -> finalLangs.add(sysLocale)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return finalLangs.distinct().sorted().joinToString(", ")
|
||||
@Suppress("DEPRECATION")
|
||||
fun getDefaultVancedLanguages(): String {
|
||||
val serverLangs = vanced.value?.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 finalLangs = mutableListOf<String>()
|
||||
sysLocales.forEach { sysLocale ->
|
||||
when {
|
||||
sysLocale == "en" -> finalLangs.add(sysLocale)
|
||||
serverLangs.contains(sysLocale) -> finalLangs.add(sysLocale)
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun LocaleList.toLangTags(): Array<String> {
|
||||
val langTags: Array<String> = this.toLanguageTags().split(",").toTypedArray()
|
||||
for (i in 0 until this.size()) {
|
||||
langTags[i] = langTags[i].substring(0, 2)
|
||||
}
|
||||
return langTags
|
||||
}
|
||||
return finalLangs.distinct().sorted().joinToString(", ")
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun LocaleList.toLangTags(): Array<String> {
|
||||
val langTags: Array<String> = this.toLanguageTags().split(",").toTypedArray()
|
||||
for (i in 0 until this.size()) {
|
||||
langTags[i] = langTags[i].substring(0, 2)
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
fun Activity.onActivityResult(requestCode: Int) {
|
||||
if (requestCode == 69 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (Settings.canDrawOverlays(this)) {
|
||||
Crowdin.authorize(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -4,22 +4,19 @@ import java.io.BufferedReader
|
|||
import java.io.IOException
|
||||
import java.io.InputStreamReader
|
||||
|
||||
object MiuiHelper {
|
||||
private const val MIUI_PROP_NAME = "ro.miui.ui.version.name"
|
||||
|
||||
private const val MIUI_PROP_NAME = "ro.miui.ui.version.name"
|
||||
fun isMiui(): Boolean = !getSystemProps(MIUI_PROP_NAME).isNullOrEmpty()
|
||||
|
||||
fun isMiui(): Boolean = !getSystemProps(MIUI_PROP_NAME).isNullOrEmpty()
|
||||
|
||||
private fun getSystemProps(propname: String): String? {
|
||||
var input: BufferedReader? = null
|
||||
return try {
|
||||
val process = Runtime.getRuntime().exec("getprop $propname")
|
||||
input = BufferedReader(InputStreamReader(process.inputStream), 1024)
|
||||
input.readLine()
|
||||
} catch (e: IOException) {
|
||||
null
|
||||
} finally {
|
||||
input?.close()
|
||||
}
|
||||
private fun getSystemProps(propname: String): String? {
|
||||
var input: BufferedReader? = null
|
||||
return try {
|
||||
val process = Runtime.getRuntime().exec("getprop $propname")
|
||||
input = BufferedReader(InputStreamReader(process.inputStream), 1024)
|
||||
input.readLine()
|
||||
} catch (e: IOException) {
|
||||
null
|
||||
} finally {
|
||||
input?.close()
|
||||
}
|
||||
}
|
|
@ -18,9 +18,6 @@ import com.vanced.manager.utils.AppUtils.sendCloseDialog
|
|||
import com.vanced.manager.utils.AppUtils.sendFailure
|
||||
import com.vanced.manager.utils.AppUtils.sendRefresh
|
||||
import com.vanced.manager.utils.AppUtils.vancedRootPkg
|
||||
import com.vanced.manager.utils.Extensions.writeServiceDScript
|
||||
import com.vanced.manager.utils.InternetTools.music
|
||||
import com.vanced.manager.utils.InternetTools.vanced
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
|
@ -5,27 +5,22 @@ import android.content.res.Configuration
|
|||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.vanced.manager.R
|
||||
import com.vanced.manager.utils.Extensions.getDefaultPrefs
|
||||
|
||||
object ThemeHelper {
|
||||
const val defAccentColor: Int = -13732865
|
||||
|
||||
const val defAccentColor: Int = -13732865
|
||||
val mutableAccentColor = MutableLiveData<Int>()
|
||||
val accentColor: LiveData<Int> = mutableAccentColor
|
||||
|
||||
val mutableAccentColor = MutableLiveData<Int>()
|
||||
val accentColor: LiveData<Int> = mutableAccentColor
|
||||
|
||||
fun Activity.setFinalTheme() {
|
||||
when (getDefaultPrefs().getString("manager_theme", "System Default")) {
|
||||
"Light" -> setTheme(R.style.LightTheme)
|
||||
"Dark" -> setTheme(R.style.DarkTheme)
|
||||
"System Default" -> {
|
||||
when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
|
||||
Configuration.UI_MODE_NIGHT_YES -> setTheme(R.style.DarkTheme)
|
||||
Configuration.UI_MODE_NIGHT_NO -> setTheme(R.style.LightTheme)
|
||||
}
|
||||
fun Activity.setFinalTheme() {
|
||||
when (getDefaultPrefs().getString("manager_theme", "System Default")) {
|
||||
"Light" -> setTheme(R.style.LightTheme)
|
||||
"Dark" -> setTheme(R.style.DarkTheme)
|
||||
"System Default" -> {
|
||||
when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
|
||||
Configuration.UI_MODE_NIGHT_YES -> setTheme(R.style.DarkTheme)
|
||||
Configuration.UI_MODE_NIGHT_NO -> setTheme(R.style.LightTheme)
|
||||
}
|
||||
else -> setTheme(R.style.LightTheme)
|
||||
}
|
||||
else -> setTheme(R.style.LightTheme)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue