diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/prefs/Prefs.kt')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/prefs/Prefs.kt | 226 |
1 files changed, 41 insertions, 185 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/prefs/Prefs.kt b/app/src/main/kotlin/com/pitchedapps/frost/prefs/Prefs.kt index a745c9b2..ec0a9cad 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/prefs/Prefs.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/prefs/Prefs.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 Allan Wang + * Copyright 2020 Allan Wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,197 +16,53 @@ */ package com.pitchedapps.frost.prefs -import android.graphics.Color -import ca.allanwang.kau.kotlin.lazyResettable -import ca.allanwang.kau.kpref.KPref -import ca.allanwang.kau.kpref.KPrefFactory -import ca.allanwang.kau.utils.colorToForeground -import ca.allanwang.kau.utils.isColorVisibleOn -import ca.allanwang.kau.utils.withAlpha -import com.pitchedapps.frost.BuildConfig -import com.pitchedapps.frost.enums.FACEBOOK_BLUE -import com.pitchedapps.frost.enums.FeedSort -import com.pitchedapps.frost.enums.MainActivityLayout -import com.pitchedapps.frost.enums.Theme -import com.pitchedapps.frost.injectors.InjectorContract +import com.pitchedapps.frost.prefs.sections.BehaviourPrefs +import com.pitchedapps.frost.prefs.sections.BehaviourPrefsImpl +import com.pitchedapps.frost.prefs.sections.CorePrefs +import com.pitchedapps.frost.prefs.sections.CorePrefsImpl +import com.pitchedapps.frost.prefs.sections.FeedPrefs +import com.pitchedapps.frost.prefs.sections.FeedPrefsImpl +import com.pitchedapps.frost.prefs.sections.NotifPrefs +import com.pitchedapps.frost.prefs.sections.NotifPrefsImpl +import com.pitchedapps.frost.prefs.sections.ThemePrefs +import com.pitchedapps.frost.prefs.sections.ThemePrefsImpl import org.koin.core.context.KoinContextHandler import org.koin.dsl.module -/** - * Created by Allan Wang on 2017-05-28. - * - * Shared Preference object with lazy cached retrievals - */ -class Prefs(factory: KPrefFactory) : KPref("${BuildConfig.APPLICATION_ID}.prefs", factory) { - - var lastLaunch: Long by kpref("last_launch", -1L) - - var userId: Long by kpref("user_id", -1L) - - var prevId: Long by kpref("prev_id", -1L) - - var theme: Int by kpref("theme", 0) { _: Int -> - loader.invalidate() - } - - var customTextColor: Int by kpref("color_text", 0xffeceff1.toInt()) - - var customAccentColor: Int by kpref("color_accent", 0xff0288d1.toInt()) - - var customBackgroundColor: Int by kpref("color_bg", 0xff212121.toInt()) - - var customHeaderColor: Int by kpref("color_header", 0xff01579b.toInt()) - - var customIconColor: Int by kpref("color_icons", 0xffeceff1.toInt()) - - var exitConfirmation: Boolean by kpref("exit_confirmation", true) - - var notificationFreq: Long by kpref("notification_freq", 15L) - - var versionCode: Int by kpref("version_code", -1) - - var prevVersionCode: Int by kpref("prev_version_code", -1) - - var installDate: Long by kpref("install_date", -1L) - - var identifier: Int by kpref("identifier", -1) - - private val loader = lazyResettable { Theme.values[theme] } - - val t: Theme by loader - - val textColor: Int - get() = t.textColorGetter(this) - - val accentColor: Int - get() = t.accentColorGetter(this) - - inline val accentColorForWhite: Int - get() = when { - accentColor.isColorVisibleOn(Color.WHITE) -> accentColor - textColor.isColorVisibleOn(Color.WHITE) -> textColor - else -> FACEBOOK_BLUE - } - - inline val nativeBgColor: Int - get() = bgColor.withAlpha(30) - - fun nativeBgColor(unread: Boolean) = bgColor - .colorToForeground(if (unread) 0.7f else 0.0f) - .withAlpha(30) - - val bgColor: Int - get() = t.backgroundColorGetter(this) - - val headerColor: Int - get() = t.headerColorGetter(this) - - val iconColor: Int - get() = t.iconColorGetter(this) - - val themeInjector: InjectorContract - get() = t.injector - - val isCustomTheme: Boolean - get() = t == Theme.CUSTOM - - inline val frostId: String - get() = "$installDate-$identifier" - - var tintNavBar: Boolean by kpref("tint_nav_bar", true) - - var webTextScaling: Int by kpref("web_text_scaling", 100) - - var feedSort: Int by kpref("feed_sort", FeedSort.DEFAULT.ordinal) - - var aggressiveRecents: Boolean by kpref("aggressive_recents", false) - - var showComposer: Boolean by kpref("status_composer_feed", true) - - var showSuggestedFriends: Boolean by kpref("suggested_friends_feed", true) - - var showSuggestedGroups: Boolean by kpref("suggested_groups_feed", true) - - var showFacebookAds: Boolean by kpref("facebook_ads", false) - - var showStories: Boolean by kpref("show_stories", true) - - var animate: Boolean by kpref("fancy_animations", true) - - var notificationKeywords: Set<String> by kpref("notification_keywords", mutableSetOf()) - - var notificationsGeneral: Boolean by kpref("notification_general", true) - - var notificationAllAccounts: Boolean by kpref("notification_all_accounts", true) - - var notificationsInstantMessages: Boolean by kpref("notification_im", true) - - var notificationsImAllAccounts: Boolean by kpref("notification_im_all_accounts", false) - - var notificationVibrate: Boolean by kpref("notification_vibrate", true) - - var notificationSound: Boolean by kpref("notification_sound", true) - - var notificationRingtone: String by kpref("notification_ringtone", "") - - var messageRingtone: String by kpref("message_ringtone", "") - - var notificationLights: Boolean by kpref("notification_lights", true) - - var messageScrollToBottom: Boolean by kpref("message_scroll_to_bottom", false) - - var enablePip: Boolean by kpref("enable_pip", true) - - /** - * Despite the naming, this toggle currently only enables debug logging. - * Verbose is never logged in release builds. - */ - var verboseLogging: Boolean by kpref("verbose_logging", false) - - var analytics: Boolean by kpref("analytics", false) { -// if (!BuildConfig.DEBUG) { -// if (it) { -// Bugsnag.setAutoCaptureSessions(true) -// Bugsnag.enableExceptionHandler() -// } else { -// Bugsnag.setAutoCaptureSessions(false) -// Bugsnag.disableExceptionHandler() -// } -// } - } - - var biometricsEnabled: Boolean by kpref("biometrics_enabled", false) - - var overlayEnabled: Boolean by kpref("overlay_enabled", true) - - var overlayFullScreenSwipe: Boolean by kpref("overlay_full_screen_swipe", true) - - var viewpagerSwipe: Boolean by kpref("viewpager_swipe", true) - - var loadMediaOnMeteredNetwork: Boolean by kpref("media_on_metered_network", true) - - var debugSettings: Boolean by kpref("debug_settings", false) - - var linksInDefaultApp: Boolean by kpref("link_in_default_app", false) - - var mainActivityLayoutType: Int by kpref("main_activity_layout_type", 0) - - var blackMediaBg: Boolean by kpref("black_media_bg", false) - - var autoRefreshFeed: Boolean by kpref("auto_refresh_feed", false) - - var showCreateFab: Boolean by kpref("show_create_fab", true) - - var fullSizeImage: Boolean by kpref("full_size_image", false) - - inline val mainActivityLayout: MainActivityLayout - get() = MainActivityLayout(mainActivityLayoutType) - +interface Prefs : BehaviourPrefs, CorePrefs, FeedPrefs, NotifPrefs, ThemePrefs { companion object { fun get(): Prefs = KoinContextHandler.get().get() fun module() = module { - single { Prefs(get()) } + single<BehaviourPrefs> { BehaviourPrefsImpl(factory = get()) } + single<CorePrefs> { CorePrefsImpl(factory = get()) } + single<FeedPrefs> { FeedPrefsImpl(factory = get()) } + single<NotifPrefs> { NotifPrefsImpl(factory = get()) } + single<ThemePrefs> { ThemePrefsImpl(factory = get()) } + single<Prefs> { + PrefsImpl( + behaviourPrefs = get(), + corePrefs = get(), + feedPrefs = get(), + notifPrefs = get(), + themePrefs = get() + ) + } + // Needed for migration + single<OldPrefs> { OldPrefs(factory = get()) } } } } + +class PrefsImpl( + behaviourPrefs: BehaviourPrefs, + corePrefs: CorePrefs, + feedPrefs: FeedPrefs, + notifPrefs: NotifPrefs, + themePrefs: ThemePrefs +) : Prefs, + BehaviourPrefs by behaviourPrefs, + CorePrefs by corePrefs, + FeedPrefs by feedPrefs, + NotifPrefs by notifPrefs, + ThemePrefs by themePrefs |