VancedManager/app/src/main/java/com/vanced/manager/ui/viewmodels/HomeViewModel.kt

150 lines
6.6 KiB
Kotlin

package com.vanced.manager.ui.viewmodels
import android.content.ActivityNotFoundException
import android.content.ComponentName
import android.content.Intent
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.startActivity
import androidx.databinding.ObservableBoolean
import androidx.databinding.ObservableField
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import com.crowdin.platform.Crowdin
import com.google.android.material.button.MaterialButton
import com.vanced.manager.R
import com.vanced.manager.core.App
import com.vanced.manager.model.DataModel
import com.vanced.manager.ui.dialogs.AppDownloadDialog
import com.vanced.manager.ui.dialogs.InstallationFilesDetectedDialog
import com.vanced.manager.ui.dialogs.VancedPreferencesDialog
import com.vanced.manager.ui.events.Event
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.PackageHelper.apkExist
import com.vanced.manager.utils.PackageHelper.musicApkExists
import com.vanced.manager.utils.PackageHelper.musicRootApkExists
import com.vanced.manager.utils.PackageHelper.uninstallApk
import com.vanced.manager.utils.PackageHelper.vancedInstallFilesExist
import com.vanced.manager.utils.PackageHelper.vancedRootInstallFilesExist
open class HomeViewModel(private val activity: FragmentActivity): ViewModel() {
private val app = activity.application as App
private val prefs = getDefaultSharedPreferences(activity)
val vanced = ObservableField<DataModel>()
val vancedRoot = ObservableField<DataModel>()
val microg = ObservableField<DataModel>()
val music = ObservableField<DataModel>()
val musicRoot = ObservableField<DataModel>()
val manager = ObservableField<DataModel>()
val fetching = ObservableBoolean(true)
private var _navigateDestination = MutableLiveData<Event<Int>>()
val navigateDestination : LiveData<Event<Int>> = _navigateDestination
fun fetchData() {
fetching.set(true)
app.loadJsonAsync()
Crowdin.forceUpdate(activity)
fetching.set(false)
}
//private val microgSnackbar = Snackbar.make(, R.string.no_microg, Snackbar.LENGTH_LONG).setAction(R.string.install) { downloadMicrog(activity) }
private val microgToast = Toast.makeText(activity, R.string.no_microg, Toast.LENGTH_LONG)
fun openMicrogSettings() {
try {
val intent = Intent()
intent.component = ComponentName(
"com.mgoogle.android.gms",
"org.microg.gms.ui.SettingsActivity"
)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(activity, intent, null)
} catch (e: ActivityNotFoundException) {
Toast.makeText(activity, "Error", Toast.LENGTH_SHORT).show()
}
}
fun openUrl(url: String) {
val color: Int =
when (url) {
"https://discord.gg/TUVd7rd" -> R.color.Discord
"https://t.me/joinchat/AAAAAEHf-pi4jH1SDlAL4w" -> R.color.Telegram
"https://twitter.com/YTVanced" -> R.color.Twitter
"https://reddit.com/r/vanced" -> R.color.Reddit
"https://vanced.activity" -> R.color.Vanced
"https://brave.com/van874" -> R.color.Brave
else -> R.color.Vanced
}
InternetTools.openUrl(url, color, activity)
}
fun openInstallDialog(view: View, app: String) {
val variant = prefs.getString("vanced_variant", "nonroot")
if (variant == "nonroot" && app != activity.getString(R.string.microg) && !microg.get()?.isAppInstalled?.get()!!) {
microgToast.show()
return
}
if ((view as MaterialButton).text == activity.getString(R.string.update)) {
if (app == activity.getString(R.string.vanced))
VancedPreferencesDialog().show(activity)
else
AppDownloadDialog(app).show(activity)
return
}
when (app) {
activity.getString(R.string.vanced) -> {
when (variant) {
"nonroot" -> if (vancedInstallFilesExist(activity)) InstallationFilesDetectedDialog(app).show(activity) else VancedPreferencesDialog().show(activity)
"root" -> VancedPreferencesDialog().show(activity)
}
}
activity.getString(R.string.music) -> {
when (variant) {
"nonroot" -> if (musicApkExists(activity)) InstallationFilesDetectedDialog(app).show(activity) else AppDownloadDialog(app).show(activity)
"root" -> AppDownloadDialog(app).show(activity)
}
}
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)
}
}
}
fun uninstallPackage(pkg: String) = uninstallApk(pkg, activity)
init {
fetching.set(true)
vanced.set(DataModel(app.vanced, activity, vancedPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced)))
vancedRoot.set(DataModel(app.vanced, activity, vancedRootPkg, activity.getString(R.string.vanced), ContextCompat.getDrawable(activity, R.drawable.ic_vanced)))
music.set(DataModel(app.music, activity, musicPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music)))
musicRoot.set(DataModel(app.music, activity, musicRootPkg, activity.getString(R.string.music), ContextCompat.getDrawable(activity, R.drawable.ic_music)))
microg.set(DataModel(app.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)))
fetching.set(false)
}
}