diff --git a/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt b/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt index e5acebe2..d73abedf 100644 --- a/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt +++ b/src/main/kotlin/com/looker/droidify/entity/SubEntities.kt @@ -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 @@ -70,4 +82,88 @@ enum class Action(@StringRes val titleResId: Int, @DrawableRes val iconResId: In 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 +} + +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, +)