package berlin.meshnet.cjdns.producer; import android.content.Context; import android.content.SharedPreferences; import berlin.meshnet.cjdns.R; import berlin.meshnet.cjdns.model.Theme; import rx.Observable; import rx.subjects.BehaviorSubject; /** * Producer of a settings stream. */ public interface SettingsProducer { Observable<Theme> themeStream(); /** * Minimalist implementation of a {@link SettingsProducer}. */ class MinimalMock implements SettingsProducer { @Override public Observable<Theme> themeStream() { return Observable.just(new Theme(false)); } } /** * Verbose implementation of a {@link SettingsProducer}. */ class VerboseMock implements SettingsProducer { @Override public Observable<Theme> themeStream() { return Observable.just(new Theme(true)); } } /** * Default implementation of a {@link SettingsProducer}. */ class Default implements SettingsProducer { private Context mContext; private SharedPreferences mSharedPreferences; public Default(Context context, SharedPreferences sharedPreferences) { mContext = context; mSharedPreferences = sharedPreferences; } @Override public Observable<Theme> themeStream() { BehaviorSubject<Theme> stream = BehaviorSubject.create(); return stream.startWith(new Theme(mSharedPreferences.getBoolean(mContext.getString(R.string.setting_verbose_enabled_key), false))); } } }