summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorAleksandr Granin <aleksandr@mullvad.net>2021-03-01 13:36:09 +0100
committerAleksandr Granin <aleksandr@mullvad.net>2021-03-02 09:55:27 +0100
commitffb93ba062602c7af3c045467183d45855917adf (patch)
tree95e070b9018b8be600985fdad968c7009a51103b /android
parent946113d1ce9be660990bdd4bb6e4c023166bcee6 (diff)
downloadmullvadvpn-ffb93ba062602c7af3c045467183d45855917adf.tar.xz
mullvadvpn-ffb93ba062602c7af3c045467183d45855917adf.zip
Create universal list item container
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/ListItemData.kt59
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/WidgetState.kt8
2 files changed, 67 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/ListItemData.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/ListItemData.kt
new file mode 100644
index 0000000000..465669a08f
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/ListItemData.kt
@@ -0,0 +1,59 @@
+package net.mullvad.mullvadvpn.model
+
+import androidx.annotation.DrawableRes
+import androidx.annotation.IntDef
+import androidx.annotation.StringRes
+import java.lang.IllegalArgumentException
+
+data class ListItemData
+private constructor(
+ val identifier: String,
+ val text: String? = null,
+ @StringRes val textRes: Int? = null,
+ @DrawableRes val iconRes: Int?,
+ val isSelected: Boolean,
+ @ItemType val type: Int,
+ val widget: WidgetState? = null,
+ val action: ItemAction? = null
+) {
+
+ @Retention
+ @IntDef(DIVIDER, PLAIN, ACTION)
+ annotation class ItemType
+
+ class Builder(private val identifier: String) {
+ var text: String? = null
+ @StringRes
+ var textRes: Int? = null
+ @DrawableRes
+ var iconRes: Int? = null
+ var isSelected: Boolean = false
+ @ItemType
+ var type: Int = 0
+ var widget: WidgetState? = null
+ var action: ItemAction? = null
+
+ fun build(): ListItemData {
+ if ((this.text == null && this.textRes == null) && type > PROGRESS)
+ throw IllegalArgumentException("ListItem should be configured with text")
+
+ return ListItemData(
+ this.identifier, this.text, this.textRes, this.iconRes,
+ this.isSelected, this.type, this.widget, this.action
+ )
+ }
+ }
+
+ data class ItemAction(val identifier: String)
+
+ companion object {
+ const val DIVIDER = 0
+ const val PROGRESS = 1
+ const val PLAIN = 2
+ const val ACTION = 3
+ const val DOUBLE_ACTION = 4
+ const val APPLICATION = 5
+ fun build(identifier: String, setUp: Builder.() -> Unit): ListItemData =
+ Builder(identifier).also(setUp).build()
+ }
+}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/WidgetState.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/WidgetState.kt
new file mode 100644
index 0000000000..3877c2d564
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/WidgetState.kt
@@ -0,0 +1,8 @@
+package net.mullvad.mullvadvpn.model
+
+import androidx.annotation.DrawableRes
+
+sealed class WidgetState {
+ data class ImageState(@DrawableRes val imageRes: Int) : WidgetState()
+ data class SwitchState(val isChecked: Boolean) : WidgetState()
+}