aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/utils/EnumUtils.kt
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2017-12-29 19:39:04 -0500
committerGitHub <noreply@github.com>2017-12-29 19:39:04 -0500
commit32e6b5be0e662bbac22806bcc87259fd1a2e2ed0 (patch)
treec97f7ef11b60231bbe7337f5960413b95da0a8c2 /app/src/main/kotlin/com/pitchedapps/frost/utils/EnumUtils.kt
parent8fee0629c27edee847358efc82309118f3a9a3a5 (diff)
downloadfrost-32e6b5be0e662bbac22806bcc87259fd1a2e2ed0.tar.gz
frost-32e6b5be0e662bbac22806bcc87259fd1a2e2ed0.tar.bz2
frost-32e6b5be0e662bbac22806bcc87259fd1a2e2ed0.zip
Feature/native notifs (#579)
* Improve parser and add zip test * Remove ActivityOptionsCompat, resolves #555 * Create native notifs * Add animations * Add image rounder * Improve glide transformations * Add request service * Fix parser * Fix parser * Add thumbnail and fix notification text * Update parsers and regex * Auto mark as read * Add request implementation in pending intent * Remove unnecessary return data * Simplify command retrieval * Use name keys instead * Revamp all bundle calls * Fix up thumbnail layout
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/utils/EnumUtils.kt')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/utils/EnumUtils.kt57
1 files changed, 57 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/EnumUtils.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/EnumUtils.kt
new file mode 100644
index 00000000..d20d1573
--- /dev/null
+++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/EnumUtils.kt
@@ -0,0 +1,57 @@
+package com.pitchedapps.frost.utils
+
+import android.content.Intent
+import android.os.BaseBundle
+
+/**
+ * Created by Allan Wang on 29/12/17.
+ *
+ * Helper to set enum using its name rather than the serialized version
+ * Name is used in case the enum is involved in persistent data, where updates may shift indices
+ */
+interface EnumBundle<E : Enum<E>> {
+
+ val bundleContract: EnumBundleCompanion<E>
+
+ val name: String
+
+ val ordinal: Int
+
+ fun put(intent: Intent) {
+ intent.putExtra(bundleContract.argTag, name)
+ }
+
+ fun put(bundle: BaseBundle?) {
+ bundle?.putString(bundleContract.argTag, name)
+ }
+}
+
+interface EnumBundleCompanion<E : Enum<E>> {
+
+ val argTag: String
+
+ val values: Array<E>
+
+ val valueMap: Map<String, E>
+
+ operator fun get(name: String?) = if (name == null) null else valueMap[name]
+
+ operator fun get(bundle: BaseBundle?) = get(bundle?.getString(argTag))
+
+ operator fun get(intent: Intent?) = get(intent?.getStringExtra(argTag))
+
+}
+
+open class EnumCompanion<E : Enum<E>>(
+ override final val argTag: String,
+ override final val values: Array<E>) : EnumBundleCompanion<E> {
+
+ override final val valueMap: Map<String, E> = values.map { it.name to it }.toMap()
+
+ override final fun get(name: String?) = super.get(name)
+
+ override final fun get(bundle: BaseBundle?) = super.get(bundle)
+
+ override final fun get(intent: Intent?) = super.get(intent)
+
+} \ No newline at end of file