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
|
2020-08-06 17:17:40 +00:00
|
|
|
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
|
2020-08-07 19:24:35 +00:00
|
|
|
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 {
|
2020-08-06 17:17:40 +00:00
|
|
|
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
|
2020-08-07 19:24:35 +00:00
|
|
|
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)
|
2020-08-08 12:05:11 +00:00
|
|
|
intent.putExtra("errorMsg", getErrorMessage(error.joinToString(), context))
|
2020-08-08 07:56:59 +00:00
|
|
|
LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
|
2020-08-07 16:51:45 +00:00
|
|
|
}
|
2020-07-15 14:52:31 +00:00
|
|
|
}
|
|
|
|
|
2020-08-08 12:05:11 +00:00
|
|
|
private fun getErrorMessage(status: String, context: Context): String {
|
|
|
|
return when {
|
|
|
|
status.contains("INSTALL_FAILED_ABORTED") -> context.getString(R.string.installation_aborted)
|
|
|
|
status.contains("INSTALL_FAILED_ALREADY_EXISTS") -> context.getString(R.string.installation_conflict)
|
|
|
|
status.contains("INSTALL_FAILED_CPU_ABI_INCOMPATIBLE") -> context.getString(R.string.installation_incompatible)
|
|
|
|
status.contains("INSTALL_FAILED_INSUFFICIENT_STORAGE") -> context.getString(R.string.installation_storage)
|
|
|
|
status.contains("INSTALL_FAILED_INVALID_APK") -> context.getString(R.string.installation_invalid)
|
2020-08-08 12:22:32 +00:00
|
|
|
status.contains("INSTALL_FAILED_VERSION_DOWNGRADE") -> context.getString(R.string.installation_downgrade)
|
2020-08-08 12:05:11 +00:00
|
|
|
status.contains("INSTALL_PARSE_FAILED_NO_CERTIFICATES") -> context.getString(R.string.installation_signature)
|
|
|
|
else ->
|
|
|
|
if (MiuiHelper.isMiui())
|
|
|
|
context.getString(R.string.installation_miui)
|
|
|
|
else
|
|
|
|
context.getString(R.string.installation_failed)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-06 17:17:40 +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_CONFLICT -> context.getString(R.string.installation_conflict)
|
2020-08-08 12:22:32 +00:00
|
|
|
PackageInstaller.STATUS_FAILURE_INCOMPATIBLE -> context.getString(R.string.installation_incompatible)
|
|
|
|
PackageInstaller.STATUS_FAILURE_INVALID -> context.getString(R.string.installation_invalid)
|
|
|
|
PackageInstaller.STATUS_FAILURE_STORAGE -> context.getString(R.string.installation_storage)
|
2020-07-16 21:05:31 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
|
|
|
|
}
|