VancedManager/app/src/main/java/com/vanced/manager/utils/AppUtils.kt

69 lines
3.0 KiB
Kotlin
Raw Normal View History

2020-07-15 14:52:31 +00:00
package com.vanced.manager.utils
2020-08-05 11:52:09 +00:00
import android.app.ActivityManager
2020-08-06 18:06:19 +00:00
import android.app.Service
2020-07-15 14:52:31 +00:00
import android.content.Context
2020-07-16 21:05:31 +00:00
import android.content.Intent
import android.content.pm.PackageInstaller
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.vanced.manager.R
import com.vanced.manager.core.downloader.*
import com.vanced.manager.core.installer.*
2020-07-16 21:05:31 +00:00
import com.vanced.manager.ui.fragments.HomeFragment
import kotlinx.coroutines.*
2020-07-15 14:52:31 +00:00
object AppUtils {
2020-08-05 11:52:09 +00:00
fun isInstallationRunning(context: Context): Boolean {
val serviceClasses = listOf(VancedDownloadService::class.java, MicrogDownloadService::class.java, AppInstaller::class.java, AppInstallerService::class.java, SplitInstaller::class.java, SplitInstallerService::class.java, RootSplitInstallerService::class.java)
2020-08-06 18:06:19 +00:00
serviceClasses.forEach { service ->
return isServiceRunning(service, context)
}
return false
}
@Suppress("DEPRECATION")
private fun isServiceRunning(cls: Class<out Service>, context: Context): Boolean {
2020-08-05 11:52:09 +00:00
val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val runningServices = activityManager.getRunningServices(Int.MAX_VALUE)
2020-08-06 18:06:19 +00:00
runningServices.forEach { info ->
2020-08-07 06:18:23 +00:00
return info.service.className == cls.name
2020-08-05 11:52:09 +00:00
}
return false
}
2020-08-07 06:18:23 +00:00
fun sendFailure(status: Int, context: Context) {
//Delay error broadcast until activity (and fragment) get back to the screen
CoroutineScope(Dispatchers.IO).launch {
delay(500)
val intent = Intent(HomeFragment.INSTALL_FAILED)
intent.putExtra("errorMsg", getErrorMessage(status, context))
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
2020-08-08 07:56:59 +00:00
}
}
fun sendFailure(error: MutableList<String>, context: Context) {
CoroutineScope(Dispatchers.IO).launch {
val intent = Intent(HomeFragment.INSTALL_FAILED)
intent.putExtra("errorMsg", error.joinToString())
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
}
2020-07-15 14:52:31 +00:00
}
private fun getErrorMessage(status: Int, context: Context): String {
2020-07-16 21:05:31 +00:00
return when (status) {
PackageInstaller.STATUS_FAILURE_ABORTED -> context.getString(R.string.installation_aborted)
PackageInstaller.STATUS_FAILURE_BLOCKED -> context.getString(R.string.installation_blocked)
PackageInstaller.STATUS_FAILURE_STORAGE -> context.getString(R.string.installation_storage)
PackageInstaller.STATUS_FAILURE_INVALID -> context.getString(R.string.installation_invalid)
PackageInstaller.STATUS_FAILURE_INCOMPATIBLE -> context.getString(R.string.installation_incompatible)
PackageInstaller.STATUS_FAILURE_CONFLICT -> context.getString(R.string.installation_conflict)
else ->
if (MiuiHelper.isMiui())
context.getString(R.string.installation_miui)
else
context.getString(R.string.installation_failed)
}
2020-07-15 14:52:31 +00:00
}
}