diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 848515e9..50e511ee 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -37,7 +37,7 @@ + android:theme="@style/DarkTheme.Blue"/> 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 diff --git a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt index 5bbacb74..c7869c3b 100644 --- a/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt +++ b/app/src/main/java/com/vanced/manager/core/downloader/VancedDownloadService.kt @@ -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 } diff --git a/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt b/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt index d282e875..0c94390a 100644 --- a/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt +++ b/app/src/main/java/com/vanced/manager/core/installer/AppInstallerService.kt @@ -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.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 } diff --git a/app/src/main/java/com/vanced/manager/core/installer/RootSplitInstallerService.kt b/app/src/main/java/com/vanced/manager/core/installer/RootSplitInstallerService.kt index 2caf9824..ad203c65 100644 --- a/app/src/main/java/com/vanced/manager/core/installer/RootSplitInstallerService.kt +++ b/app/src/main/java/com/vanced/manager/core/installer/RootSplitInstallerService.kt @@ -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) { - 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) } } diff --git a/app/src/main/java/com/vanced/manager/core/installer/SplitInstallerService.kt b/app/src/main/java/com/vanced/manager/core/installer/SplitInstallerService.kt index 334e6d64..ceef6493 100644 --- a/app/src/main/java/com/vanced/manager/core/installer/SplitInstallerService.kt +++ b/app/src/main/java/com/vanced/manager/core/installer/SplitInstallerService.kt @@ -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.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 } diff --git a/app/src/main/java/com/vanced/manager/ui/MainActivity.kt b/app/src/main/java/com/vanced/manager/ui/MainActivity.kt index 9c3b0fd2..6cfb3b6c 100644 --- a/app/src/main/java/com/vanced/manager/ui/MainActivity.kt +++ b/app/src/main/java/com/vanced/manager/ui/MainActivity.kt @@ -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" } } diff --git a/app/src/main/java/com/vanced/manager/ui/dialogs/DialogContainer.kt b/app/src/main/java/com/vanced/manager/ui/dialogs/DialogContainer.kt index b4d116ba..29426046 100644 --- a/app/src/main/java/com/vanced/manager/ui/dialogs/DialogContainer.kt +++ b/app/src/main/java/com/vanced/manager/ui/dialogs/DialogContainer.kt @@ -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() } diff --git a/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt b/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt index 370a4c42..43104677 100644 --- a/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt +++ b/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt @@ -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" } } diff --git a/app/src/main/java/com/vanced/manager/utils/AppUtils.kt b/app/src/main/java/com/vanced/manager/utils/AppUtils.kt index 01b0b515..95dba728 100644 --- a/app/src/main/java/com/vanced/manager/utils/AppUtils.kt +++ b/app/src/main/java/com/vanced/manager/utils/AppUtils.kt @@ -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 { diff --git a/app/src/main/java/com/vanced/manager/utils/NotificationHelper.kt b/app/src/main/java/com/vanced/manager/utils/NotificationHelper.kt deleted file mode 100644 index c7d56217..00000000 --- a/app/src/main/java/com/vanced/manager/utils/NotificationHelper.kt +++ /dev/null @@ -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) - } - -} \ No newline at end of file diff --git a/app/src/main/res/layout/include_microg.xml b/app/src/main/res/layout/include_microg.xml index 211b2e09..720d493f 100644 --- a/app/src/main/res/layout/include_microg.xml +++ b/app/src/main/res/layout/include_microg.xml @@ -120,6 +120,21 @@ + + + + + + + +