diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/utils')
3 files changed, 62 insertions, 11 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 diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt index cc5ee733..f14039b7 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/Prefs.kt @@ -102,7 +102,7 @@ object Prefs : KPref() { var animate: Boolean by kpref("fancy_animations", true) - var notificationKeywords: StringSet by kpref("notification_keywords", mutableSetOf<String>()) + var notificationKeywords: StringSet by kpref("notification_keywords", mutableSetOf()) var notificationAllAccounts: Boolean by kpref("notification_all_accounts", true) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt index 0ca068b5..592dd4fc 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/Utils.kt @@ -2,6 +2,7 @@ package com.pitchedapps.frost.utils import android.annotation.SuppressLint import android.app.Activity +import android.app.ActivityOptions import android.content.Context import android.content.Intent import android.graphics.Color @@ -10,7 +11,6 @@ import android.net.Uri import android.support.annotation.StringRes import android.support.design.internal.SnackbarContentLayout import android.support.design.widget.Snackbar -import android.support.v4.app.ActivityOptionsCompat import android.support.v7.widget.Toolbar import android.view.View import android.widget.FrameLayout @@ -22,9 +22,6 @@ import ca.allanwang.kau.mediapicker.createPrivateMediaFile import ca.allanwang.kau.utils.* import ca.allanwang.kau.xml.showChangelog import com.afollestad.materialdialogs.MaterialDialog -import com.bumptech.glide.RequestBuilder -import com.bumptech.glide.load.resource.bitmap.CircleCrop -import com.bumptech.glide.request.RequestOptions import com.crashlytics.android.answers.Answers import com.crashlytics.android.answers.CustomEvent import com.pitchedapps.frost.BuildConfig @@ -47,7 +44,6 @@ const val ARG_URL = "arg_url" const val ARG_USER_ID = "arg_user_id" const val ARG_IMAGE_URL = "arg_image_url" const val ARG_TEXT = "arg_text" -const val ARG_OVERLAY_CONTEXT = "arg_overlay_context" fun Context.launchNewTask(clazz: Class<out Activity>, cookieList: ArrayList<CookieModel> = arrayListOf(), clearStack: Boolean = false) { startActivity(clazz, clearStack, intentBuilder = { @@ -61,7 +57,7 @@ fun Context.launchLogin(cookieList: ArrayList<CookieModel>, clearStack: Boolean } fun Activity.cookies(): ArrayList<CookieModel> { - return intent?.extras?.getParcelableArrayList<CookieModel>(EXTRA_COOKIES) ?: arrayListOf() + return intent?.getParcelableArrayListExtra<CookieModel>(EXTRA_COOKIES) ?: arrayListOf() } /** @@ -81,7 +77,7 @@ fun Context.launchWebOverlay(url: String, clazz: Class<out WebOverlayActivityBas }) } -private fun Context.fadeBundle() = ActivityOptionsCompat.makeCustomAnimation(this, +private fun Context.fadeBundle() = ActivityOptions.makeCustomAnimation(this, android.R.anim.fade_in, android.R.anim.fade_out).toBundle() fun Context.launchImageActivity(imageUrl: String, text: String?) { @@ -103,7 +99,7 @@ fun Activity.launchIntroActivity(cookieList: ArrayList<CookieModel>) = launchNewTask(IntroActivity::class.java, cookieList, true) fun WebOverlayActivity.url(): String { - return intent.extras?.getString(ARG_URL) ?: FbItem.FEED.url + return intent.getStringExtra(ARG_URL) ?: FbItem.FEED.url } fun Context.materialDialogThemed(action: MaterialDialog.Builder.() -> Unit): MaterialDialog { @@ -192,8 +188,6 @@ fun Activity.frostNavigationBar() { navigationBarColor = if (Prefs.tintNavBar) Prefs.headerColor else Color.BLACK } -fun <T> RequestBuilder<T>.withRoundIcon() = apply(RequestOptions().transform(CircleCrop()))!! - @Throws(IOException::class) fun createMediaFile(extension: String) = createMediaFile("Frost", extension) |