/* * 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 * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.pitchedapps.frost.prefs 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.ShowcasePrefs import com.pitchedapps.frost.prefs.sections.ShowcasePrefsImpl import com.pitchedapps.frost.prefs.sections.ThemePrefs import com.pitchedapps.frost.prefs.sections.ThemePrefsImpl import org.koin.core.context.GlobalContext import org.koin.dsl.module /** * [Prefs] is no longer an actual pref, but we will expose the reset function as it is used elsewhere */ interface PrefsBase { fun reset() fun deleteKeys(vararg keys: String) } interface Prefs : BehaviourPrefs, CorePrefs, FeedPrefs, NotifPrefs, ThemePrefs, ShowcasePrefs, PrefsBase { companion object { fun get(): Prefs = GlobalContext.get().get() fun module() = module { single { BehaviourPrefsImpl(factory = get()) } single { CorePrefsImpl(factory = get()) } single { FeedPrefsImpl(factory = get()) } single { NotifPrefsImpl(factory = get()) } single { ThemePrefsImpl(factory = get()) } single { ShowcasePrefsImpl(factory = get()) } single { PrefsImpl( behaviourPrefs = get(), corePrefs = get(), feedPrefs = get(), notifPrefs = get(), themePrefs = get(), showcasePrefs = get() ) } // Needed for migration single { OldPrefs(factory = get()) } } } } class PrefsImpl( private val behaviourPrefs: BehaviourPrefs, private val corePrefs: CorePrefs, private val feedPrefs: FeedPrefs, private val notifPrefs: NotifPrefs, private val themePrefs: ThemePrefs, private val showcasePrefs: ShowcasePrefs ) : Prefs, BehaviourPrefs by behaviourPrefs, CorePrefs by corePrefs, FeedPrefs by feedPrefs, NotifPrefs by notifPrefs, ThemePrefs by themePrefs, ShowcasePrefs by showcasePrefs { override fun reset() { behaviourPrefs.reset() corePrefs.reset() feedPrefs.reset() notifPrefs.reset() themePrefs.reset() showcasePrefs.reset() } override fun deleteKeys(vararg keys: String) { behaviourPrefs.deleteKeys() corePrefs.deleteKeys() feedPrefs.deleteKeys() notifPrefs.deleteKeys() themePrefs.deleteKeys() showcasePrefs.deleteKeys() } }