chnages to download system

This commit is contained in:
X1nto 2020-08-05 15:52:09 +04:00
parent 8e65ae8d95
commit 1a9575cf65
13 changed files with 190 additions and 293 deletions

View File

@ -37,7 +37,7 @@
<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.MaterialComponents"/>
android:theme="@style/DarkTheme.Blue"/>
<meta-data
android:name="preloaded_fonts"

View File

@ -1,27 +1,27 @@
package com.vanced.manager.core.downloader
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.IBinder
import android.widget.Toast
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager
import com.downloader.Error
import com.downloader.OnDownloadListener
import com.downloader.OnStartOrResumeListener
import com.downloader.PRDownloader
import com.vanced.manager.R
import com.vanced.manager.core.installer.AppInstaller
import com.vanced.manager.ui.fragments.HomeFragment
import com.vanced.manager.utils.InternetTools.baseUrl
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
import com.vanced.manager.utils.InternetTools.getObjectFromJson
import com.vanced.manager.utils.NotificationHelper
import com.vanced.manager.utils.NotificationHelper.cancelNotif
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
class MicrogDownloadService: Service() {
//private var downloadId: Long = 0
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
@ -34,7 +34,6 @@ class MicrogDownloadService: Service() {
val context = this
runBlocking {
launch {
val prefs = getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
val url = getObjectFromJson(
"${PreferenceManager.getDefaultSharedPreferences(context)
.getString("install_url", baseUrl)}/microg.json", "url"
@ -42,43 +41,23 @@ class MicrogDownloadService: Service() {
//downloadId = download(url, "apk", "microg.apk", this@MicrogDownloadService)
val channel = 420
PRDownloader.download(url, getExternalFilesDir("apk")?.path, "microg.apk")
.build()
.setOnStartOrResumeListener {
OnStartOrResumeListener {
prefs?.edit()?.putBoolean("isMicrogDownloading", true)?.apply()
}
}
.setOnProgressListener { progress ->
val mProgress = progress.currentBytes * 100 / progress.totalBytes
NotificationHelper.displayDownloadNotif(
channel,
mProgress.toInt(),
getFileNameFromUrl(url),
this@MicrogDownloadService
)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.MICROG_DOWNLOADING).putExtra("progress", mProgress).putExtra("file", getFileNameFromUrl(url)))
}
.start(object : OnDownloadListener {
override fun onDownloadComplete() {
prefs?.edit()?.putBoolean("isMicrogDownloading", false)?.apply()
cancelNotif(channel, this@MicrogDownloadService)
val intent = Intent(this@MicrogDownloadService, AppInstaller::class.java)
intent.putExtra("path", "${getExternalFilesDir("apk")}/microg.apk")
intent.putExtra("pkg", "com.mgoogle.android.gms")
//val mIntent = Intent(HomeFragment.MICROG_DOWNLOADED)
//mIntent.action = HomeFragment.MICROG_DOWNLOADED
//LocalBroadcastManager.getInstance(this@MicrogDownloadService).sendBroadcast(mIntent)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.MICROG_INSTALLING))
startService(intent)
}
override fun onError(error: com.downloader.Error?) {
prefs?.edit()?.putBoolean("isMicrogDownloading", false)?.apply()
createBasicNotif(
getString(R.string.error_downloading, "Microg"),
channel,
this@MicrogDownloadService
)
override fun onError(error: Error?) {
Toast.makeText(this@MicrogDownloadService, getString(R.string.error_downloading, "microG"), Toast.LENGTH_SHORT).show()
}
})
@ -102,11 +81,6 @@ class MicrogDownloadService: Service() {
}
*/
override fun onDestroy() {
super.onDestroy()
cancelNotif(420, this)
//unregisterReceiver(receiver)
}
override fun onBind(intent: Intent?): IBinder? {
return null

View File

@ -5,6 +5,7 @@ import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.IBinder
import android.widget.Toast
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager
import com.downloader.Error
@ -17,9 +18,6 @@ import com.vanced.manager.ui.fragments.HomeFragment
import com.vanced.manager.utils.InternetTools.baseUrl
import com.vanced.manager.utils.InternetTools.getFileNameFromUrl
import com.vanced.manager.utils.InternetTools.getObjectFromJson
import com.vanced.manager.utils.NotificationHelper.cancelNotif
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
import com.vanced.manager.utils.NotificationHelper.displayDownloadNotif
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@ -28,6 +26,7 @@ class VancedDownloadService: Service() {
//private var downloadId: Long = 0
//private var apkType: String = "arch"
private var count: Int = 0
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
//registerReceiver(receiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
@ -67,14 +66,12 @@ class VancedDownloadService: Service() {
//apkType = type
//downloadId = download(url, "apks", getFileNameFromUrl(url), this@VancedDownloadService)
val channel = 69
PRDownloader
.download(url, getExternalFilesDir("apks")?.path, getFileNameFromUrl(url))
.build()
//.setOnStartOrResumeListener { OnStartOrResumeListener { prefs?.edit()?.putBoolean("isVancedDownloading", true)?.apply() } }
.setOnProgressListener { progress ->
val mProgress = progress.currentBytes * 100 / progress.totalBytes
displayDownloadNotif(channel, mProgress.toInt(), getFileNameFromUrl(url), this@VancedDownloadService)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_DOWNLOADING).putExtra("progress", mProgress).putExtra("file", getFileNameFromUrl(url)))
}
.start(object : OnDownloadListener {
override fun onDownloadComplete() {
@ -83,18 +80,16 @@ class VancedDownloadService: Service() {
"theme" -> downloadSplits("lang")
"lang" -> {
count++
if (count < lang?.count()!!) {
if (count < lang?.count()!!)
downloadSplits("lang")
} else {
else
prepareInstall(variant!!)
cancelNotif(channel, this@VancedDownloadService)
}
}
}
}
override fun onError(error: Error?) {
createBasicNotif(getString(R.string.error_downloading, "Vanced"), channel, this@VancedDownloadService)
Toast.makeText(this@VancedDownloadService, getString(R.string.error_downloading, "Vanced"), Toast.LENGTH_SHORT).show()
}
})
}
@ -130,19 +125,13 @@ class VancedDownloadService: Service() {
*/
private fun prepareInstall(variant: String) {
//LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(HomeFragment.VANCED_DOWNLOADED))
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_INSTALLING))
if (variant == "root")
startService(Intent(this, RootSplitInstallerService::class.java))
else
startService(Intent(this, SplitInstaller::class.java))
}
override fun onDestroy() {
super.onDestroy()
cancelNotif(69, this)
//unregisterReceiver(receiver)
}
override fun onBind(intent: Intent?): IBinder? {
return null
}

View File

@ -1,27 +1,23 @@
package com.vanced.manager.core.installer
import android.app.Service
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import android.os.IBinder
import android.util.Log
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.vanced.manager.R
import com.vanced.manager.ui.MainActivity
import com.vanced.manager.ui.fragments.HomeFragment
import com.vanced.manager.utils.AppUtils.getErrorMessage
//import com.vanced.manager.utils.AppUtils.sendRefreshHome
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
import com.vanced.manager.utils.AppUtils.sendFailure
class AppInstallerService: Service() {
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
val notifId = 42
when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
Log.d(TAG, "Requesting user confirmation for installation")
createBasicNotif(getString(R.string.installing_app, "MicroG"), notifId, this)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.MICROG_INSTALLING))
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
confirmationIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
@ -32,32 +28,14 @@ class AppInstallerService: Service() {
}
PackageInstaller.STATUS_SUCCESS -> {
Log.d(TAG, "Installation succeed")
LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
createBasicNotif(getString(
R.string.successfully_installed,
"Microg"
), notifId, this)
}
else -> {
sendFailure(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
createBasicNotif(
getErrorMessage(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999), this),
notifId,
this
)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
}
else -> sendFailure(this, intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
}
stopSelf()
return START_NOT_STICKY
}
private fun sendFailure(status: Int) {
val mIntent = Intent(MainActivity.INSTALL_FAILED)
mIntent.action = MainActivity.INSTALL_FAILED
mIntent.putExtra("errorMsg", getErrorMessage(status, this))
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
override fun onBind(intent: Intent?): IBinder? {
return null
}

View File

@ -11,10 +11,8 @@ import androidx.annotation.WorkerThread
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.topjohnwu.superuser.Shell
import com.vanced.manager.R
import com.vanced.manager.ui.MainActivity
import com.vanced.manager.ui.fragments.HomeFragment
import com.vanced.manager.utils.FileInfo
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
import java.io.File
import java.nio.charset.Charset
import java.text.SimpleDateFormat
@ -24,10 +22,10 @@ import kotlin.collections.ArrayList
class RootSplitInstallerService: Service() {
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Shell.getShell {
val isRoot = it.isRoot
Log.d("AppLog", "isRoot ?$isRoot ")
AsyncTask.execute {
val apkFilesPath = getExternalFilesDir("apks")?.path
val fileInfoList = apkFilesPath?.let { it1 -> getFileInfoList(it1) }
@ -42,9 +40,7 @@ class RootSplitInstallerService: Service() {
@WorkerThread
private fun installSplitApkFiles(apkFiles: ArrayList<FileInfo>) {
val broadcast = LocalBroadcastManager.getInstance(this)
var sessionId: Int?
val notifId = 666
Log.d("AppLog", "installing split apk files:$apkFiles")
run {
val sessionIdResult = Shell.su("pm install-create -r -t").exec().out
@ -55,7 +51,6 @@ class RootSplitInstallerService: Service() {
}
for (apkFile in apkFiles) {
Log.d("AppLog", "installing APK : ${apkFile.name} ${apkFile.fileSize} ")
createBasicNotif(getString(R.string.installing_app, "Vanced"), notifId, this)
val command = arrayOf("su", "-c", "pm", "install-write", "-S", "${apkFile.fileSize}", "$sessionId", apkFile.name)
val process: Process = Runtime.getRuntime().exec(command)
val inputPipe = apkFile.getInputStream()
@ -78,14 +73,12 @@ class RootSplitInstallerService: Service() {
Log.d("AppLog", "committing...")
val installResult = Shell.su("pm install-commit $sessionId").exec()
if (installResult.isSuccess) {
broadcast.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
broadcast.sendBroadcast(Intent(MainActivity.INSTALL_COMPLETED).putExtra("pkg", "vanced"))
createBasicNotif(getString(R.string.successfully_installed, "Vanced"), notifId, this)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_INSTALLED).putExtra("pkg", "vanced"))
} else {
val mIntent = Intent(MainActivity.INSTALL_FAILED)
val mIntent = Intent(HomeFragment.INSTALL_FAILED)
mIntent.putExtra("errorMsg", getString(R.string.installation_signature))
broadcast.sendBroadcast(mIntent)
createBasicNotif(getString(R.string.installation_signature), notifId, this)
localBroadcastManager.sendBroadcast(mIntent)
}
}

View File

@ -1,26 +1,22 @@
package com.vanced.manager.core.installer
import android.app.Service
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import android.os.IBinder
import android.util.Log
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.vanced.manager.R
import com.vanced.manager.ui.MainActivity
import com.vanced.manager.ui.fragments.HomeFragment
import com.vanced.manager.utils.AppUtils.getErrorMessage
import com.vanced.manager.utils.AppUtils.sendRefreshHome
import com.vanced.manager.utils.NotificationHelper.createBasicNotif
import com.vanced.manager.utils.AppUtils.sendFailure
class SplitInstallerService: Service() {
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(this) }
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
val notifId = 666
when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
createBasicNotif(getString(R.string.installing_app, "Vanced"), notifId, this)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.VANCED_INSTALLING))
Log.d(TAG, "Requesting user confirmation for installation")
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
confirmationIntent?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
@ -31,32 +27,15 @@ class SplitInstallerService: Service() {
}
PackageInstaller.STATUS_SUCCESS -> {
Log.d(TAG, "Installation succeed")
LocalBroadcastManager.getInstance(this).sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
createBasicNotif(
getString(R.string.successfully_installed, "Vanced"),
notifId,
this
)
}
else -> {
sendFailure(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
createBasicNotif(
getErrorMessage(intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999), this),
notifId,
this
)
localBroadcastManager.sendBroadcast(Intent(HomeFragment.REFRESH_HOME))
}
else -> sendFailure(this, intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999))
}
stopSelf()
return START_NOT_STICKY
}
private fun sendFailure(status: Int) {
val mIntent = Intent(MainActivity.INSTALL_FAILED)
mIntent.putExtra("errorMsg", getErrorMessage(status, this))
LocalBroadcastManager.getInstance(this).sendBroadcast(mIntent)
}
override fun onBind(intent: Intent?): IBinder? {
return null
}

View File

@ -21,6 +21,7 @@ import com.vanced.manager.R
import com.vanced.manager.databinding.ActivityMainBinding
import com.vanced.manager.ui.dialogs.DialogContainer
import com.vanced.manager.ui.fragments.UpdateCheckFragment
import com.vanced.manager.utils.AppUtils.isInstallationRunning
import com.vanced.manager.utils.InternetTools
import com.vanced.manager.utils.PackageHelper
import com.vanced.manager.utils.ThemeHelper.setFinalTheme
@ -36,13 +37,6 @@ class MainActivity : AppCompatActivity() {
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
INSTALL_COMPLETED -> {
if (intent.getStringExtra("package") == "split")
DialogContainer.launchVanced(this@MainActivity)
else
DialogContainer.regularPackageInstalled(getString(R.string.successfully_installed, "MicroG"), this@MainActivity)
}
INSTALL_FAILED -> DialogContainer.installAlertBuilder(intent.getStringExtra("errorMsg") as String, this@MainActivity)
}
}
}
@ -94,25 +88,26 @@ class MainActivity : AppCompatActivity() {
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val navHost = findNavController(R.id.bottom_nav_host)
when (item.itemId) {
android.R.id.home -> {
onBackPressed()
return true
if (!isInstallationRunning(this)) {
when (item.itemId) {
android.R.id.home -> {
onBackPressed()
return true
}
R.id.toolbar_about -> {
navHost.navigate(R.id.toAboutFragment)
return true
}
R.id.toolbar_settings -> {
navHost.navigate(R.id.action_settingsFragment)
return true
}
R.id.dev_settings -> {
navHost.navigate(R.id.toDevSettingsFragment)
return true
}
else -> super.onOptionsItemSelected(item)
}
R.id.toolbar_about -> {
navHost.navigate(R.id.toAboutFragment)
return true
}
R.id.toolbar_settings -> {
navHost.navigate(R.id.action_settingsFragment)
return true
}
R.id.dev_settings -> {
navHost.navigate(R.id.toDevSettingsFragment)
return true
}
else -> super.onOptionsItemSelected(item)
}
return false
}
@ -127,8 +122,6 @@ class MainActivity : AppCompatActivity() {
private fun registerReceivers() {
val intentFilter = IntentFilter()
intentFilter.addAction(INSTALL_COMPLETED)
intentFilter.addAction(INSTALL_FAILED)
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
}
@ -178,7 +171,5 @@ class MainActivity : AppCompatActivity() {
}
companion object {
const val INSTALL_COMPLETED = "install_completed"
const val INSTALL_FAILED = "install_failed"
}
}

View File

@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat.startActivity
import androidx.preference.PreferenceManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.vanced.manager.R
import com.vanced.manager.ui.MainActivity
import com.vanced.manager.utils.InternetTools.openUrl
import com.vanced.manager.utils.MiuiHelper
@ -97,16 +96,6 @@ object DialogContainer {
}
}
fun regularPackageInstalled(msg: String, activity: MainActivity) {
MaterialAlertDialogBuilder(activity)
.setTitle(activity.getString(R.string.success))
.setMessage(msg)
.setPositiveButton(activity.getString(R.string.close)) { _, _ -> activity.restartActivity() }
.setCancelable(false)
.create()
.show()
}
fun basicDialog(title: String, msg: String, activity: Activity) {
MaterialAlertDialogBuilder(activity)
.setTitle(title)
@ -116,7 +105,7 @@ object DialogContainer {
.show()
}
fun launchVanced(activity: MainActivity) {
fun launchVanced(activity: Activity) {
val intent = Intent()
intent.component =
if (PreferenceManager.getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot") == "root")
@ -133,10 +122,6 @@ object DialogContainer {
}
}
.setNegativeButton(activity.getString(R.string.close)) { dialog, _ -> dialog.dismiss() }
.setOnDismissListener {
activity.restartActivity()
}
.setCancelable(false)
.create()
.show()
}

View File

@ -21,7 +21,10 @@ import com.vanced.manager.core.downloader.MicrogDownloadService
import com.vanced.manager.core.downloader.VancedDownloadService
import com.vanced.manager.databinding.FragmentHomeBinding
import com.vanced.manager.ui.MainActivity
import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
import com.vanced.manager.ui.dialogs.DialogContainer.launchVanced
import com.vanced.manager.ui.viewmodels.HomeViewModel
import com.vanced.manager.utils.AppUtils.isInstallationRunning
import com.vanced.manager.utils.PackageHelper
class HomeFragment : Fragment(), View.OnClickListener {
@ -45,7 +48,7 @@ class HomeFragment : Fragment(), View.OnClickListener {
super.onViewCreated(view, savedInstanceState)
binding.viewModel = viewModel
val variantPref = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
val variantPref = getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot")
with(binding) {
rootSwitch.setOnClickListener(this@HomeFragment)
@ -92,8 +95,8 @@ class HomeFragment : Fragment(), View.OnClickListener {
}
override fun onClick(v: View?) {
val prefs = activity?.getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
val variant = getDefaultSharedPreferences(activity).getString("vanced_variant", "nonroot")
val prefs = requireActivity().getSharedPreferences("installPrefs", Context.MODE_PRIVATE)
val variant = getDefaultSharedPreferences(requireActivity()).getString("vanced_variant", "nonroot")
val vancedPkgName =
if (variant == "root") {
"com.google.android.youtube"
@ -103,46 +106,44 @@ class HomeFragment : Fragment(), View.OnClickListener {
when (v?.id) {
R.id.vanced_installbtn -> {
if (viewModel.microgInstalled.get()!!) {
if (prefs?.getBoolean("valuesModified", false)!!) {
activity?.startService(
Intent(
activity,
VancedDownloadService::class.java
if (!isInstallationRunning(requireActivity())) {
if (viewModel.microgInstalled.get()!!) {
if (prefs?.getBoolean("valuesModified", false)!!) {
requireActivity().startService(
Intent(
requireActivity(),
VancedDownloadService::class.java
)
)
)
} else {
view?.findNavController()?.navigate(R.id.toInstallThemeFragment)
}
} else
Snackbar.make(binding.homeRefresh, R.string.no_microg, Snackbar.LENGTH_LONG)
.setAction(R.string.install) {
activity?.startService(Intent(activity, MicrogDownloadService::class.java))
}.show()
} else {
view?.findNavController()?.navigate(R.id.toInstallThemeFragment)
}
} else
Snackbar.make(binding.homeRefresh, R.string.no_microg, Snackbar.LENGTH_LONG)
.setAction(R.string.install) {
requireActivity().startService(
Intent(
requireActivity(),
MicrogDownloadService::class.java
)
)
}.show()
}
}
R.id.microg_installbtn -> {
activity?.startService(Intent(activity, MicrogDownloadService::class.java))
}
R.id.microg_uninstallbtn -> activity?.let {
PackageHelper.uninstallApk(
"com.mgoogle.android.gms",
it
)
}
R.id.vanced_uninstallbtn -> activity?.let {
PackageHelper.uninstallApk(
vancedPkgName,
it
)
if (!isInstallationRunning(requireActivity()))
requireActivity().startService(Intent(requireActivity(), MicrogDownloadService::class.java))
}
R.id.microg_uninstallbtn -> PackageHelper.uninstallApk("com.mgoogle.android.gms", requireActivity())
R.id.vanced_uninstallbtn -> PackageHelper.uninstallApk(vancedPkgName, requireActivity())
R.id.nonroot_switch -> writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
R.id.root_switch ->
if (Shell.rootAccess()) {
writeToVariantPref("root", R.anim.slide_in_right, R.anim.slide_out_left)
} else {
writeToVariantPref("nonroot", R.anim.slide_in_left, R.anim.slide_out_right)
Toast.makeText(activity, activity?.getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
Toast.makeText(requireActivity(), activity?.getString(R.string.root_not_granted), Toast.LENGTH_SHORT).show()
}
}
}
@ -189,8 +190,42 @@ class HomeFragment : Fragment(), View.OnClickListener {
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
MICROG_DOWNLOADED -> binding.includeMicrogLayout.microgInstalling.visibility = View.VISIBLE
VANCED_DOWNLOADED -> binding.includeVancedLayout.vancedInstalling.visibility = View.VISIBLE
VANCED_DOWNLOADING -> {
with(binding.includeVancedLayout) {
vancedDownloading.visibility = View.VISIBLE
vancedDownloading.progress = intent.getIntExtra("progress", 0)
vancedDownloadingTxt.visibility = View.VISIBLE
vancedDownloadingTxt.text = requireActivity().getString(R.string.downloading_file, intent.getStringExtra("file"))
}
}
MICROG_DOWNLOADING -> {
with(binding.includeMicrogLayout) {
microgDownloading.visibility = View.VISIBLE
microgDownloading.progress = intent.getIntExtra("progress", 0)
microgDownloadingTxt.visibility = View.VISIBLE
microgDownloadingTxt.text = requireActivity().getString(R.string.downloading_file, "microg.apk")
}
}
MICROG_INSTALLING -> {
with (binding.includeMicrogLayout) {
microgDownloading.visibility = View.GONE
microgDownloadingTxt.visibility = View.GONE
microgInstalling.visibility = View.VISIBLE
}
}
VANCED_INSTALLING -> {
with (binding.includeVancedLayout) {
vancedDownloading.visibility = View.GONE
vancedDownloadingTxt.visibility = View.GONE
vancedInstalling.visibility = View.VISIBLE
}
}
VANCED_INSTALLED -> {
binding.includeVancedLayout.vancedInstalling.visibility = View.GONE
launchVanced(requireActivity())
}
MICROG_INSTALLED -> binding.includeMicrogLayout.microgInstalling.visibility = View.GONE
INSTALL_FAILED -> installAlertBuilder(intent.getStringExtra("errorMsg") as String, requireActivity())
REFRESH_HOME -> {
Log.d("VMRefresh", "Refreshing home page")
viewModel.fetchData()
@ -201,8 +236,12 @@ class HomeFragment : Fragment(), View.OnClickListener {
private fun registerReceivers() {
val intentFilter = IntentFilter()
//intentFilter.addAction(VANCED_DOWNLOADED)
//intentFilter.addAction(MICROG_DOWNLOADED)
intentFilter.addAction(VANCED_DOWNLOADING)
intentFilter.addAction(MICROG_DOWNLOADING)
intentFilter.addAction(VANCED_INSTALLING)
intentFilter.addAction(MICROG_INSTALLING)
intentFilter.addAction(VANCED_INSTALLED)
intentFilter.addAction(MICROG_INSTALLED)
intentFilter.addAction(REFRESH_HOME)
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
}
@ -212,20 +251,14 @@ class HomeFragment : Fragment(), View.OnClickListener {
super.onCreateOptionsMenu(menu, inflater)
}
/*
private fun disableVancedButton() {
binding.includeVancedLayout.vancedInstallbtn.apply {
icon = null
isEnabled = false
backgroundTintList = ColorStateList.valueOf(Color.DKGRAY)
setTextColor(ColorStateList.valueOf(Color.GRAY))
}
}
*/
companion object {
const val VANCED_DOWNLOADED = "vanced_downloaded"
const val MICROG_DOWNLOADED = "microg_downloaded"
const val VANCED_DOWNLOADING = "vanced_downloading"
const val MICROG_DOWNLOADING = "microg_downloading"
const val VANCED_INSTALLING = "vanced_installing"
const val MICROG_INSTALLING = "microg_installing"
const val VANCED_INSTALLED = "vanced_installed"
const val MICROG_INSTALLED = "microg_installed"
const val INSTALL_FAILED = "install_failed"
const val REFRESH_HOME = "refresh_home"
}
}

View File

@ -1,5 +1,6 @@
package com.vanced.manager.utils
import android.app.ActivityManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
@ -9,10 +10,26 @@ import com.vanced.manager.ui.fragments.HomeFragment
object AppUtils {
fun sendRefreshHome(context: Context) {
val intent = Intent()
intent.action = HomeFragment.REFRESH_HOME
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
@Suppress("DEPRECATION")
fun isInstallationRunning(context: Context): Boolean {
val services = arrayOf("VancedDownloadService", "MicrogDownloadService", "AppInstaller", "SplitInstaller", "RootSplitInstallerService")
val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val runningServices = activityManager.getRunningServices(Int.MAX_VALUE)
services.forEach { name ->
runningServices.forEach { info ->
if (info.service.className == name) {
return true
}
}
}
return false
}
fun sendFailure(context: Context, status: Int) {
val mIntent = Intent(HomeFragment.INSTALL_FAILED)
mIntent.putExtra("errorMsg", getErrorMessage(status, context))
LocalBroadcastManager.getInstance(context).sendBroadcast(mIntent)
}
fun getErrorMessage(status: Int, context: Context): String {

View File

@ -1,72 +0,0 @@
package com.vanced.manager.utils
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import com.vanced.manager.R
object NotificationHelper {
fun createNotifChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notifChannel = NotificationChannel(
"69420",
context.getString(R.string.notif_channel_name),
NotificationManager.IMPORTANCE_HIGH
)
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(notifChannel)
}
}
fun displayDownloadNotif(channel: Int, progress:Int, filename: String, context: Context) {
val notifBuilder =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
Notification.Builder(context, channel.toString()).setChannelId("69420")
else
Notification.Builder(context).setPriority(Notification.PRIORITY_HIGH)
notifBuilder.apply {
setContentTitle(context.getString(R.string.app_name))
setContentText(context.getString(R.string.downloading_file, filename))
setSmallIcon(R.drawable.ic_stat_name)
setOnlyAlertOnce(true)
setOngoing(true)
}
val notif = notifBuilder.build()
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.apply {
notifBuilder.setProgress(100, progress, false)
notify(channel, notif)
}
}
fun createBasicNotif(text: String, channel: Int, context: Context) {
val notifBuilder =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
Notification.Builder(context, channel.toString()).setChannelId("69420")
else
Notification.Builder(context).setPriority(Notification.PRIORITY_DEFAULT)
notifBuilder.apply {
setContentTitle(context.getString(R.string.app_name))
setContentText(text)
style = Notification.BigTextStyle().bigText(text)
setSmallIcon(R.drawable.ic_stat_name)
}
val notif = notifBuilder.build()
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(channel, notif)
}
fun cancelNotif(id: Int, context: Context) {
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.cancel(id)
}
}

View File

@ -120,6 +120,21 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/microg_downloading_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible" />
<ProgressBar
android:id="@+id/microg_downloading"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible" />
<ProgressBar
android:id="@+id/microg_installing"
android:layout_width="match_parent"

View File

@ -110,6 +110,21 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/vanced_downloading_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible" />
<ProgressBar
android:id="@+id/vanced_downloading"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible" />
<ProgressBar
android:id="@+id/vanced_installing"
android:layout_width="match_parent"