diff --git a/app/src/main/java/com/aurora/store/data/event/BusEvent.kt b/app/src/main/java/com/aurora/store/data/event/BusEvent.kt index 95ffd4df0..dd266875e 100644 --- a/app/src/main/java/com/aurora/store/data/event/BusEvent.kt +++ b/app/src/main/java/com/aurora/store/data/event/BusEvent.kt @@ -20,9 +20,21 @@ package com.aurora.store.data.event sealed class BusEvent { - data class InstallEvent(var packageName: String, var error: String = String()) : BusEvent() - data class UninstallEvent(var packageName: String, var error: String = String()) : BusEvent() - data class Blacklisted(var packageName: String, var error: String = String()) : BusEvent() + data class InstallEvent( + var packageName: String, + var extra: String? = "" + ) : BusEvent() + + data class UninstallEvent( + var packageName: String, + var extra: String? = "" + ) : BusEvent() + + data class Blacklisted( + var packageName: String, + var error: String? = "" + ) : BusEvent() + data class GoogleAAS( var success: Boolean, var email: String = String(), @@ -30,15 +42,15 @@ sealed class BusEvent { ) : BusEvent() } -sealed class SessionEvent { +sealed class InstallerEvent { data class Success( var packageName: String? = "", var extra: String? = "" - ) : SessionEvent() + ) : InstallerEvent() data class Failed( var packageName: String? = "", var error: String? = "", var extra: String? = "" - ) : SessionEvent() + ) : InstallerEvent() } \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt b/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt index 86283a885..3272241da 100644 --- a/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt +++ b/app/src/main/java/com/aurora/store/data/installer/InstallerService.kt @@ -26,7 +26,7 @@ import android.os.Build import android.os.IBinder import androidx.annotation.RequiresApi import com.aurora.store.R -import com.aurora.store.data.event.SessionEvent +import com.aurora.store.data.event.InstallerEvent import com.aurora.store.util.Log import org.greenrobot.eventbus.EventBus @@ -65,12 +65,12 @@ class InstallerService : Service() { private fun postStatus(status: Int, packageName: String?, extra: String?) { when (status) { PackageInstaller.STATUS_SUCCESS -> { - EventBus.getDefault().post(SessionEvent.Success(packageName, "Success")) + EventBus.getDefault().post(InstallerEvent.Success(packageName, "Success")) } else -> { val errorString = getErrorString(status) Log.e("$packageName : $errorString") - EventBus.getDefault().post(SessionEvent.Failed(packageName, errorString, extra)) + EventBus.getDefault().post(InstallerEvent.Failed(packageName, errorString, extra)) } } } diff --git a/app/src/main/java/com/aurora/store/data/installer/RootInstaller.kt b/app/src/main/java/com/aurora/store/data/installer/RootInstaller.kt index 0f734ecc8..11a442ccb 100644 --- a/app/src/main/java/com/aurora/store/data/installer/RootInstaller.kt +++ b/app/src/main/java/com/aurora/store/data/installer/RootInstaller.kt @@ -21,9 +21,8 @@ package com.aurora.store.data.installer import android.content.Context import com.aurora.extensions.isLAndAbove -import com.aurora.extensions.toast import com.aurora.store.R -import com.aurora.store.data.event.SessionEvent +import com.aurora.store.data.event.InstallerEvent import com.aurora.store.util.Log import com.topjohnwu.superuser.Shell import org.greenrobot.eventbus.EventBus @@ -52,7 +51,7 @@ class RootInstaller(context: Context) : InstallerBase(context) { xInstallLegacy(packageName, it) } } else { - val event = SessionEvent.Failed( + val event = InstallerEvent.Failed( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_root_unavailable) @@ -91,7 +90,7 @@ class RootInstaller(context: Context) : InstallerBase(context) { if (!shellResult.isSuccess) { removeFromInstallQueue(packageName) - val event = SessionEvent.Failed( + val event = InstallerEvent.Failed( packageName, context.getString(R.string.installer_status_failure), parseError(shellResult) @@ -100,7 +99,7 @@ class RootInstaller(context: Context) : InstallerBase(context) { } } else { removeFromInstallQueue(packageName) - val event = SessionEvent.Failed( + val event = InstallerEvent.Failed( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_root_unavailable) @@ -109,7 +108,7 @@ class RootInstaller(context: Context) : InstallerBase(context) { } } else { removeFromInstallQueue(packageName) - val event = SessionEvent.Failed( + val event = InstallerEvent.Failed( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_status_failure_session) diff --git a/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt b/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt index e40d3679d..591125aac 100644 --- a/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt +++ b/app/src/main/java/com/aurora/store/data/installer/ServiceInstaller.kt @@ -33,7 +33,7 @@ import com.aurora.services.IPrivilegedCallback import com.aurora.services.IPrivilegedService import com.aurora.store.BuildConfig import com.aurora.store.R -import com.aurora.store.data.event.SessionEvent +import com.aurora.store.data.event.InstallerEvent import com.aurora.store.util.Log import com.aurora.store.util.PackageUtil import org.greenrobot.eventbus.EventBus @@ -70,7 +70,7 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { xInstall(packageName, uriList) } else -> { - val event = SessionEvent.Failed( + val event = InstallerEvent.Failed( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_service_unavailable) @@ -108,7 +108,7 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { EventBus .getDefault() .post( - SessionEvent.Failed( + InstallerEvent.Failed( packageName, e.localizedMessage, e.stackTraceToString() @@ -118,7 +118,7 @@ class ServiceInstaller(context: Context) : InstallerBase(context) { } } else { Log.e(context.getString(R.string.installer_service_misconfigured)) - val event = SessionEvent.Failed( + val event = InstallerEvent.Failed( packageName, context.getString(R.string.installer_status_failure), context.getString(R.string.installer_service_misconfigured) diff --git a/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt b/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt index 70c5125ae..63e72e17b 100644 --- a/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt +++ b/app/src/main/java/com/aurora/store/data/installer/SessionInstaller.kt @@ -29,7 +29,7 @@ import androidx.annotation.RequiresApi import androidx.core.content.FileProvider import com.aurora.extensions.isNAndAbove import com.aurora.store.BuildConfig -import com.aurora.store.data.event.SessionEvent +import com.aurora.store.data.event.InstallerEvent import com.aurora.store.util.Log import org.apache.commons.io.IOUtils import org.greenrobot.eventbus.EventBus @@ -102,7 +102,7 @@ class SessionInstaller(context: Context) : InstallerBase(context) { } catch (e: Exception) { session.abandon() removeFromInstallQueue(packageName) - val event = SessionEvent.Failed( + val event = InstallerEvent.Failed( packageName, e.localizedMessage, e.stackTraceToString() diff --git a/app/src/main/java/com/aurora/store/data/receiver/PackageManagerReceiver.kt b/app/src/main/java/com/aurora/store/data/receiver/PackageManagerReceiver.kt index c78fcc70a..90854ac28 100644 --- a/app/src/main/java/com/aurora/store/data/receiver/PackageManagerReceiver.kt +++ b/app/src/main/java/com/aurora/store/data/receiver/PackageManagerReceiver.kt @@ -28,6 +28,7 @@ import com.aurora.store.data.event.BusEvent.UninstallEvent import com.aurora.store.data.installer.AppInstaller import com.aurora.store.util.PathUtil import com.aurora.store.util.Preferences +import com.aurora.store.util.isExternalStorageEnable import org.greenrobot.eventbus.EventBus import java.io.File @@ -39,19 +40,20 @@ open class PackageManagerReceiver : BroadcastReceiver() { when (intent.action) { Intent.ACTION_PACKAGE_ADDED -> { - EventBus.getDefault() - .post(InstallEvent(packageName, "")) - - //Clear installation queue - AppInstaller(context) - .getPreferredInstaller() - .removeFromInstallQueue(packageName) + EventBus.getDefault().post(InstallEvent(packageName, "")) + } + + Intent.ACTION_PACKAGE_REMOVED -> { + EventBus.getDefault().post(UninstallEvent(packageName, "")) } - Intent.ACTION_PACKAGE_REMOVED -> EventBus.getDefault() - .post(UninstallEvent(packageName, "")) } - clearNotification(context, packageName) + //Clear installation queue + AppInstaller(context) + .getPreferredInstaller() + .removeFromInstallQueue(packageName) + + //clearNotification(context, packageName) val isAutoDeleteAPKEnabled = Preferences.getBoolean( context, diff --git a/app/src/main/java/com/aurora/store/data/service/NotificationService.kt b/app/src/main/java/com/aurora/store/data/service/NotificationService.kt index 591048cda..98677e079 100644 --- a/app/src/main/java/com/aurora/store/data/service/NotificationService.kt +++ b/app/src/main/java/com/aurora/store/data/service/NotificationService.kt @@ -34,7 +34,7 @@ import com.aurora.extensions.isLAndAbove import com.aurora.gplayapi.data.models.App import com.aurora.store.R import com.aurora.store.data.downloader.DownloadManager -import com.aurora.store.data.event.SessionEvent +import com.aurora.store.data.event.InstallerEvent import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.receiver.DownloadCancelReceiver import com.aurora.store.data.receiver.DownloadPauseReceiver @@ -361,12 +361,12 @@ class NotificationService : Service() { @Subscribe() fun onEventMainThread(event: Any) { when (event) { - is SessionEvent.Success -> { + is InstallerEvent.Success -> { val app = appMap[event.packageName.hashCode()] if (app != null) notifyInstallationStatus(app, event.extra) } - is SessionEvent.Failed -> { + is InstallerEvent.Failed -> { val app = appMap[event.packageName.hashCode()] if (app != null) notifyInstallationStatus(app, event.error) diff --git a/app/src/main/java/com/aurora/store/util/PathUtil.kt b/app/src/main/java/com/aurora/store/util/PathUtil.kt index 3f4f740ea..c23dafc66 100644 --- a/app/src/main/java/com/aurora/store/util/PathUtil.kt +++ b/app/src/main/java/com/aurora/store/util/PathUtil.kt @@ -21,9 +21,9 @@ package com.aurora.store.util import android.content.Context import android.os.Environment +import com.aurora.extensions.isLAndAbove import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.File -import com.aurora.extensions.isLAndAbove fun Context.getInternalBaseDirectory(): String { return filesDir.path @@ -33,7 +33,7 @@ object PathUtil { private fun getDownloadDirectory(context: Context): String { return if (isLAndAbove()) { - if (Preferences.getBoolean(context, Preferences.PREFERENCE_DOWNLOAD_EXTERNAL)) + if (context.isExternalStorageEnable()) getExternalPath() else context.getInternalBaseDirectory() + "/Downloads" @@ -79,4 +79,8 @@ object PathUtil { val obbDir = getObbDownloadPath(context, app) return "$obbDir/${file.name}" } +} + +fun Context.isExternalStorageEnable(): Boolean { + return Preferences.getBoolean(this, Preferences.PREFERENCE_DOWNLOAD_EXTERNAL) } \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt index 77a2137e5..e495c27ad 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt @@ -40,7 +40,7 @@ import com.aurora.store.R import com.aurora.store.data.downloader.DownloadManager import com.aurora.store.data.downloader.RequestBuilder import com.aurora.store.data.event.BusEvent -import com.aurora.store.data.event.SessionEvent +import com.aurora.store.data.event.InstallerEvent import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.network.HttpClient import com.aurora.store.data.providers.AuthProvider @@ -114,7 +114,7 @@ class AppDetailsActivity : BaseDetailsActivity() { attachActions() } } - is SessionEvent.Failed -> { + is InstallerEvent.Failed -> { if (app.packageName == event.packageName) { InstallErrorDialogSheet.newInstance( app, diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/DownloadPreference.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/DownloadPreference.kt index f1cb2a0c5..814a8ad9a 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/DownloadPreference.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/DownloadPreference.kt @@ -20,12 +20,44 @@ package com.aurora.store.view.ui.preferences import android.os.Bundle +import android.view.View +import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import androidx.preference.SwitchPreferenceCompat import com.aurora.store.R +import com.aurora.store.util.Preferences class DownloadPreference : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences_download, rootKey) } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val downloadExternalPreference: SwitchPreferenceCompat? = + findPreference(Preferences.PREFERENCE_DOWNLOAD_EXTERNAL) + + val autoDeletePreference: SwitchPreferenceCompat? = + findPreference(Preferences.PREFERENCE_AUTO_DELETE) + + + downloadExternalPreference?.let { switchPreferenceCompat -> + switchPreferenceCompat.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, newValue -> + val checked = newValue.toString().toBoolean() + autoDeletePreference?.let { + if (checked) { + it.isEnabled = true + } else { + it.isEnabled = false + it.isChecked = true + } + } + + true + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/xml/preferences_download.xml b/app/src/main/res/xml/preferences_download.xml index 80ae20ac7..8b8eac87e 100644 --- a/app/src/main/res/xml/preferences_download.xml +++ b/app/src/main/res/xml/preferences_download.xml @@ -27,6 +27,13 @@ app:summary="@string/pref_downloader_external_desc" app:title="@string/pref_downloader_external" /> + + - -