Add: AntiFeature, Link, Donate, Permission types and PackageState objects

This commit is contained in:
machiav3lli 2022-05-29 02:49:59 +02:00
parent c65fd53a96
commit 27c60372c9

View File

@ -1,7 +1,19 @@
package com.looker.droidify.entity
import android.content.Context
import android.content.pm.PermissionGroupInfo
import android.content.pm.PermissionInfo
import android.net.Uri
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Close
import androidx.compose.material.icons.rounded.Delete
import androidx.compose.material.icons.rounded.Download
import androidx.compose.material.icons.rounded.Launch
import androidx.compose.material.icons.rounded.Share
import androidx.compose.material.icons.rounded.Tune
import androidx.compose.ui.graphics.vector.ImageVector
import com.looker.droidify.R
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
@ -71,3 +83,87 @@ enum class Action(@StringRes val titleResId: Int, @DrawableRes val iconResId: In
CANCEL(R.string.cancel, R.drawable.ic_cancel),
SHARE(R.string.share, R.drawable.ic_share)
}
enum class AntiFeature(val key: String, @StringRes val titleResId: Int) {
ADS("Ads", R.string.has_advertising),
DEBUGGABLE("ApplicationDebuggable", R.string.compiled_for_debugging),
DISABLED_ALGORITHM("DisabledAlgorithm", R.string.signed_using_unsafe_algorithm),
KNOWN_VULN("KnownVuln", R.string.has_security_vulnerabilities),
NO_SOURCE_SINCE("NoSourceSince", R.string.source_code_no_longer_available),
NON_FREE_ADD("NonFreeAdd", R.string.promotes_non_free_software),
NON_FREE_ASSETS("NonFreeAssets", R.string.contains_non_free_media),
NON_FREE_DEP("NonFreeDep", R.string.has_non_free_dependencies),
NON_FREE_NET("NonFreeNet", R.string.promotes_non_free_network_services),
TRACKING("Tracking", R.string.tracks_or_reports_your_activity),
NON_FREE_UPSTREAM("UpstreamNonFree", R.string.upstream_source_code_is_not_free),
NSFW("NSFW", R.string.not_safe_for_work)
}
sealed interface PackageState {
val icon: ImageVector
val textId: Int
}
sealed class Cancelable(
@StringRes override val textId: Int,
override val icon: ImageVector = Icons.Rounded.Close,
val isIndeterminate: Boolean
) : PackageState
object Pending : Cancelable(R.string.pending, isIndeterminate = true)
object Connecting : Cancelable(R.string.connecting, isIndeterminate = true)
class Downloading(downloaded: Long, total: Long?) :
Cancelable(R.string.downloading, isIndeterminate = true)
class Installing(isIndeterminate: Boolean) :
Cancelable(R.string.installing, isIndeterminate = isIndeterminate)
sealed class ButtonWork(
@StringRes override val textId: Int,
override val icon: ImageVector = Icons.Rounded.Download
) : PackageState
object Install : ButtonWork(R.string.install, Icons.Rounded.Download)
object Update : ButtonWork(R.string.update, Icons.Rounded.Download)
object Uninstall : ButtonWork(R.string.uninstall, Icons.Rounded.Delete)
object Launch : ButtonWork(R.string.launch, Icons.Rounded.Launch)
object Details : ButtonWork(R.string.details, Icons.Rounded.Tune)
object Share : ButtonWork(R.string.share, Icons.Rounded.Share)
open class LinkType(
@DrawableRes val iconResId: Int,
val title: String,
val link: Uri? = null
)
class DonateType(donate: Donate, context: Context) : LinkType(
iconResId = when (donate) {
is Donate.Regular -> R.drawable.ic_donate_regular
is Donate.Bitcoin -> R.drawable.ic_donate_bitcoin
is Donate.Litecoin -> R.drawable.ic_donate_litecoin
is Donate.Flattr -> R.drawable.ic_donate_flattr
is Donate.Liberapay -> R.drawable.ic_donate_liberapay
is Donate.OpenCollective -> R.drawable.ic_donate_opencollective
},
title = when (donate) {
is Donate.Regular -> context.getString(R.string.website)
is Donate.Bitcoin -> "Bitcoin"
is Donate.Litecoin -> "Litecoin"
is Donate.Flattr -> "Flattr"
is Donate.Liberapay -> "Liberapay"
is Donate.OpenCollective -> "Open Collective"
},
link = when (donate) {
is Donate.Regular -> Uri.parse(donate.url)
is Donate.Bitcoin -> Uri.parse("bitcoin:${donate.address}")
is Donate.Litecoin -> Uri.parse("litecoin:${donate.address}")
is Donate.Flattr -> Uri.parse("https://flattr.com/thing/${donate.id}")
is Donate.Liberapay -> Uri.parse("https://liberapay.com/~${donate.id}")
is Donate.OpenCollective -> Uri.parse("https://opencollective.com/${donate.id}")
}
)
class PermissionsType(
val group: PermissionGroupInfo?,
val permissions: List<PermissionInfo>,
)