package com.github.czyzby.lml.uedi.preferences; import java.lang.reflect.Member; import com.badlogic.gdx.Preferences; import com.github.czyzby.lml.uedi.preferences.impl.AbstractPreference; import com.github.czyzby.uedi.stereotype.Property; import com.github.czyzby.uedi.stereotype.impl.PropertyProvider; /** Default {@link String} provider. Stores and retrieves preferences from {@link Preferences} object specific to each * platform. * * @author MJ */ public class PreferenceProvider extends PropertyProvider { private final Preferences preferences; /** @param preferences will be used to store the properties. */ public PreferenceProvider(final Preferences preferences) { this.preferences = preferences; } @Override public String provide(final Object target, final Member member) { final String property = super.provide(target, member); return property == null ? preferences.getString(member.getName(), null) : property; } @Override public boolean hasProperty(final String key) { return super.hasProperty(key) || preferences.contains(key); } @Override public Property getProperty(final String key) { final Property property = super.getProperty(key); return property != null ? property : new AbstractPreference() { @Override public String getDefault() { return null; } @Override public String getKey() { return key; } }; } /** Saves all currently stored preferences. */ public void save() { preferences.flush(); } }