UPdate: Abstract Action(s) to SubEntity

This commit is contained in:
machiav3lli 2022-05-13 11:14:08 +02:00
parent c1e3d857f3
commit ad0dc626e1
3 changed files with 26 additions and 35 deletions

View File

@ -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<Screenshot>(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)
}

View File

@ -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)

View File

@ -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)
}
}