From ad0dc626e1026098511c8865ee305336d2e3b93b Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Fri, 13 May 2022 11:14:08 +0200 Subject: [PATCH] UPdate: Abstract Action(s) to SubEntity --- .../com/looker/droidify/entity/SubEntities.kt | 13 ++++++++ .../droidify/ui/adapters/AppDetailAdapter.kt | 15 ++------- .../looker/droidify/ui/fragments/AppSheetX.kt | 33 +++++++------------ 3 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt b/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt index 5a50a435..e5acebe2 100644 --- a/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt +++ b/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt @@ -1,5 +1,8 @@ package com.looker.droidify.entity +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import com.looker.droidify.R import kotlinx.serialization.Serializable import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString @@ -57,4 +60,14 @@ class Screenshot(val locale: String, val type: Type, val path: String) { companion object { fun fromJson(json: String) = Json.decodeFromString(json) } +} + +enum class Action(@StringRes val titleResId: Int, @DrawableRes val iconResId: Int) { + INSTALL(R.string.install, R.drawable.ic_download), + UPDATE(R.string.update, R.drawable.ic_download), + LAUNCH(R.string.launch, R.drawable.ic_launch), + DETAILS(R.string.details, R.drawable.ic_tune), + UNINSTALL(R.string.uninstall, R.drawable.ic_delete), + CANCEL(R.string.cancel, R.drawable.ic_cancel), + SHARE(R.string.share, R.drawable.ic_share) } \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt b/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt index ce057836..683dc030 100644 --- a/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt +++ b/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt @@ -22,8 +22,6 @@ import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.widget.LinearLayout -import androidx.annotation.DrawableRes -import androidx.annotation.StringRes import androidx.core.content.res.ResourcesCompat import androidx.core.net.toUri import androidx.core.text.HtmlCompat @@ -47,6 +45,7 @@ import com.looker.droidify.database.entity.Installed import com.looker.droidify.database.entity.Product import com.looker.droidify.database.entity.Release import com.looker.droidify.database.entity.Repository +import com.looker.droidify.entity.Action import com.looker.droidify.entity.ProductPreference import com.looker.droidify.entity.Screenshot import com.looker.droidify.network.CoilDownloader @@ -86,16 +85,6 @@ class AppDetailAdapter(private val callbacks: Callbacks) : fun onUriClick(uri: Uri, shouldConfirm: Boolean): Boolean } - enum class Action(@StringRes val titleResId: Int, @DrawableRes val iconResId: Int) { - INSTALL(R.string.install, R.drawable.ic_download), - UPDATE(R.string.update, R.drawable.ic_download), - LAUNCH(R.string.launch, R.drawable.ic_launch), - DETAILS(R.string.details, R.drawable.ic_tune), - UNINSTALL(R.string.uninstall, R.drawable.ic_delete), - CANCEL(R.string.cancel, R.drawable.ic_cancel), - SHARE(R.string.share, R.drawable.ic_share) - } - sealed class Status { object Pending : Status() object Connecting : Status() @@ -955,7 +944,7 @@ class AppDetailAdapter(private val callbacks: Callbacks) : this@AppDetailAdapter.secondaryAction?.let(callbacks::onActionClick) } info.setOnClickListener { - AppDetailAdapter.Action.DETAILS?.let(callbacks::onActionClick) + Action.DETAILS?.let(callbacks::onActionClick) } } ViewType.SCREENSHOT -> ScreenShotViewHolder(parent.context) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/AppSheetX.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/AppSheetX.kt index 59ff80ee..d31a00d6 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/AppSheetX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/AppSheetX.kt @@ -21,6 +21,7 @@ import com.looker.droidify.database.entity.Product import com.looker.droidify.database.entity.Release import com.looker.droidify.database.entity.Repository import com.looker.droidify.databinding.SheetAppXBinding +import com.looker.droidify.entity.Action import com.looker.droidify.entity.ProductPreference import com.looker.droidify.entity.Screenshot import com.looker.droidify.installer.AppInstaller @@ -224,9 +225,9 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call launch(Dispatchers.Main) { val adapterAction = - if (downloading) AppDetailAdapter.Action.CANCEL else primaryAction?.adapterAction + if (downloading) Action.CANCEL else primaryAction val adapterSecondaryAction = - if (downloading) null else secondaryAction?.adapterAction + if (downloading) null else secondaryAction (binding.recyclerView.adapter as? AppDetailAdapter) ?.setAction(adapterAction) (binding.recyclerView.adapter as? AppDetailAdapter) @@ -258,10 +259,10 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call } } - override fun onActionClick(action: AppDetailAdapter.Action) { + override fun onActionClick(action: Action) { when (action) { - AppDetailAdapter.Action.INSTALL, - AppDetailAdapter.Action.UPDATE, + Action.INSTALL, + Action.UPDATE, -> { val installedItem = installed lifecycleScope.launch { @@ -274,7 +275,6 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call } Unit } - AppDetailAdapter.Action.LAUNCH -> { val launcherActivities = installed?.launcherActivities.orEmpty() if (launcherActivities.size >= 2) { LaunchDialog(launcherActivities).show( @@ -284,27 +284,28 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call } else { launcherActivities.firstOrNull()?.let { startLauncherActivity(it.first) } } + Action.LAUNCH -> { Unit } - AppDetailAdapter.Action.DETAILS -> { + Action.DETAILS -> { startActivity( Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) .setData(Uri.parse("package:$packageName")) ) } - AppDetailAdapter.Action.UNINSTALL -> { + Action.UNINSTALL -> { lifecycleScope.launch { AppInstaller.getInstance(context)?.defaultInstaller?.uninstall(packageName) } Unit } - AppDetailAdapter.Action.CANCEL -> { + Action.CANCEL -> { val binder = downloadConnection.binder if (downloading && binder != null) { binder.cancel(packageName) } else Unit } - AppDetailAdapter.Action.SHARE -> { + Action.SHARE -> { shareIntent(packageName, productRepos[0].first.label) } }::class @@ -442,16 +443,4 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call .create() } } - - private enum class Action( - val id: Int, - val adapterAction: AppDetailAdapter.Action, - ) { - INSTALL(1, AppDetailAdapter.Action.INSTALL), - UPDATE(2, AppDetailAdapter.Action.UPDATE), - LAUNCH(3, AppDetailAdapter.Action.LAUNCH), - DETAILS(4, AppDetailAdapter.Action.DETAILS), - UNINSTALL(5, AppDetailAdapter.Action.UNINSTALL), - SHARE(6, AppDetailAdapter.Action.SHARE) - } }