Improve: Root Installer will Install in background

This commit is contained in:
LooKeR 2021-11-17 00:15:34 +05:30
parent c842b4574a
commit 0fd8e3b8b7

View File

@ -14,11 +14,12 @@ import com.looker.droidify.Common
import com.looker.droidify.MainActivity import com.looker.droidify.MainActivity
import com.looker.droidify.R import com.looker.droidify.R
import com.looker.droidify.content.Cache import com.looker.droidify.content.Cache
import com.looker.droidify.content.Preferences
import com.looker.droidify.entity.Release import com.looker.droidify.entity.Release
import com.looker.droidify.entity.Repository import com.looker.droidify.entity.Repository
import com.looker.droidify.installer.AppInstaller
import com.looker.droidify.network.Downloader import com.looker.droidify.network.Downloader
import com.looker.droidify.utility.Utils import com.looker.droidify.utility.Utils
import com.looker.droidify.utility.Utils.rootInstallerEnabled
import com.looker.droidify.utility.extension.android.* import com.looker.droidify.utility.extension.android.*
import com.looker.droidify.utility.extension.resources.* import com.looker.droidify.utility.extension.resources.*
import com.looker.droidify.utility.extension.text.* import com.looker.droidify.utility.extension.text.*
@ -26,6 +27,8 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.disposables.Disposable
import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.io.File import java.io.File
import java.security.MessageDigest import java.security.MessageDigest
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -279,48 +282,37 @@ class DownloadService : ConnectionService<DownloadService.Binder>() {
.Builder(this, Common.NOTIFICATION_CHANNEL_DOWNLOADING) .Builder(this, Common.NOTIFICATION_CHANNEL_DOWNLOADING)
.setAutoCancel(true) .setAutoCancel(true)
.setSmallIcon(android.R.drawable.stat_sys_download_done) .setSmallIcon(android.R.drawable.stat_sys_download_done)
.setColor( .setColor(getColorFromAttr(android.R.attr.colorAccent).defaultColor)
ContextThemeWrapper(this, R.style.Theme_Main_Light) .setContentIntent(installIntent(task))
.getColorFromAttr(android.R.attr.colorAccent).defaultColor
)
.setContentIntent(
PendingIntent.getBroadcast(
this,
0,
Intent(this, Receiver::class.java)
.setAction("$ACTION_INSTALL.${task.packageName}")
.putExtra(EXTRA_CACHE_FILE_NAME, task.release.cacheFileName),
if (Android.sdk(23))
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
else
PendingIntent.FLAG_UPDATE_CURRENT
)
)
.setContentTitle(getString(R.string.downloaded_FORMAT, task.name)) .setContentTitle(getString(R.string.downloaded_FORMAT, task.name))
.setContentText(getString(R.string.tap_to_install_DESC)) .setContentText(getString(R.string.tap_to_install_DESC))
.build() .build()
) )
} }
private fun installIntent(task: Task): PendingIntent = PendingIntent.getBroadcast(
this,
0,
Intent(this, Receiver::class.java)
.setAction("$ACTION_INSTALL.${task.packageName}")
.putExtra(EXTRA_CACHE_FILE_NAME, task.release.cacheFileName),
if (Android.sdk(23)) PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
else PendingIntent.FLAG_UPDATE_CURRENT
)
private fun publishSuccess(task: Task) { private fun publishSuccess(task: Task) {
var consumed = false var consumed = false
stateSubject.onNext(State.Success(task.packageName, task.name, task.release) { stateSubject.onNext(State.Success(task.packageName, task.name, task.release) {
consumed = true consumed = true
}) })
if (consumed || (Preferences[Preferences.Key.RootPermission])) { if (!consumed) {
PendingIntent.getBroadcast( if (rootInstallerEnabled) {
this, MainScope().launch {
0, AppInstaller.getInstance(this@DownloadService)
Intent(this, Receiver::class.java) ?.defaultInstaller?.install(task.release.cacheFileName)
.setAction("$ACTION_INSTALL.${task.packageName}") }
.putExtra(EXTRA_CACHE_FILE_NAME, task.release.cacheFileName), } else showNotificationInstall(task)
if (Android.sdk(23)) }
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
else
PendingIntent.FLAG_UPDATE_CURRENT
)
.send()
} else showNotificationInstall(task)
} }
private fun validatePackage(task: Task, file: File): ValidationError? { private fun validatePackage(task: Task, file: File): ValidationError? {