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 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.Serializable
import kotlinx.serialization.decodeFromString import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
@ -58,3 +61,13 @@ class Screenshot(val locale: String, val type: Type, val path: String) {
fun fromJson(json: String) = Json.decodeFromString<Screenshot>(json) 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.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.text.HtmlCompat 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.Product
import com.looker.droidify.database.entity.Release import com.looker.droidify.database.entity.Release
import com.looker.droidify.database.entity.Repository import com.looker.droidify.database.entity.Repository
import com.looker.droidify.entity.Action
import com.looker.droidify.entity.ProductPreference import com.looker.droidify.entity.ProductPreference
import com.looker.droidify.entity.Screenshot import com.looker.droidify.entity.Screenshot
import com.looker.droidify.network.CoilDownloader import com.looker.droidify.network.CoilDownloader
@ -86,16 +85,6 @@ class AppDetailAdapter(private val callbacks: Callbacks) :
fun onUriClick(uri: Uri, shouldConfirm: Boolean): Boolean 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 { sealed class Status {
object Pending : Status() object Pending : Status()
object Connecting : Status() object Connecting : Status()
@ -955,7 +944,7 @@ class AppDetailAdapter(private val callbacks: Callbacks) :
this@AppDetailAdapter.secondaryAction?.let(callbacks::onActionClick) this@AppDetailAdapter.secondaryAction?.let(callbacks::onActionClick)
} }
info.setOnClickListener { info.setOnClickListener {
AppDetailAdapter.Action.DETAILS?.let(callbacks::onActionClick) Action.DETAILS?.let(callbacks::onActionClick)
} }
} }
ViewType.SCREENSHOT -> ScreenShotViewHolder(parent.context) 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.Release
import com.looker.droidify.database.entity.Repository import com.looker.droidify.database.entity.Repository
import com.looker.droidify.databinding.SheetAppXBinding import com.looker.droidify.databinding.SheetAppXBinding
import com.looker.droidify.entity.Action
import com.looker.droidify.entity.ProductPreference import com.looker.droidify.entity.ProductPreference
import com.looker.droidify.entity.Screenshot import com.looker.droidify.entity.Screenshot
import com.looker.droidify.installer.AppInstaller import com.looker.droidify.installer.AppInstaller
@ -224,9 +225,9 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
val adapterAction = val adapterAction =
if (downloading) AppDetailAdapter.Action.CANCEL else primaryAction?.adapterAction if (downloading) Action.CANCEL else primaryAction
val adapterSecondaryAction = val adapterSecondaryAction =
if (downloading) null else secondaryAction?.adapterAction if (downloading) null else secondaryAction
(binding.recyclerView.adapter as? AppDetailAdapter) (binding.recyclerView.adapter as? AppDetailAdapter)
?.setAction(adapterAction) ?.setAction(adapterAction)
(binding.recyclerView.adapter as? AppDetailAdapter) (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) { when (action) {
AppDetailAdapter.Action.INSTALL, Action.INSTALL,
AppDetailAdapter.Action.UPDATE, Action.UPDATE,
-> { -> {
val installedItem = installed val installedItem = installed
lifecycleScope.launch { lifecycleScope.launch {
@ -274,7 +275,6 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call
} }
Unit Unit
} }
AppDetailAdapter.Action.LAUNCH -> {
val launcherActivities = installed?.launcherActivities.orEmpty() val launcherActivities = installed?.launcherActivities.orEmpty()
if (launcherActivities.size >= 2) { if (launcherActivities.size >= 2) {
LaunchDialog(launcherActivities).show( LaunchDialog(launcherActivities).show(
@ -284,27 +284,28 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call
} else { } else {
launcherActivities.firstOrNull()?.let { startLauncherActivity(it.first) } launcherActivities.firstOrNull()?.let { startLauncherActivity(it.first) }
} }
Action.LAUNCH -> {
Unit Unit
} }
AppDetailAdapter.Action.DETAILS -> { Action.DETAILS -> {
startActivity( startActivity(
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(Uri.parse("package:$packageName")) .setData(Uri.parse("package:$packageName"))
) )
} }
AppDetailAdapter.Action.UNINSTALL -> { Action.UNINSTALL -> {
lifecycleScope.launch { lifecycleScope.launch {
AppInstaller.getInstance(context)?.defaultInstaller?.uninstall(packageName) AppInstaller.getInstance(context)?.defaultInstaller?.uninstall(packageName)
} }
Unit Unit
} }
AppDetailAdapter.Action.CANCEL -> { Action.CANCEL -> {
val binder = downloadConnection.binder val binder = downloadConnection.binder
if (downloading && binder != null) { if (downloading && binder != null) {
binder.cancel(packageName) binder.cancel(packageName)
} else Unit } else Unit
} }
AppDetailAdapter.Action.SHARE -> { Action.SHARE -> {
shareIntent(packageName, productRepos[0].first.label) shareIntent(packageName, productRepos[0].first.label)
} }
}::class }::class
@ -442,16 +443,4 @@ class AppSheetX() : FullscreenBottomSheetDialogFragment(), AppDetailAdapter.Call
.create() .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)
}
} }