forked from extern/Unexpected-Keyboard
15ce200ce3
As with the previous commit, remove casts of the context. The "handler" object is referenced in the "config" object for now.
141 lines
4.5 KiB
Java
141 lines
4.5 KiB
Java
package juloo.keyboard2;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.Resources;
|
|
import android.content.SharedPreferences;
|
|
import android.preference.PreferenceManager;
|
|
import android.util.DisplayMetrics;
|
|
import android.util.TypedValue;
|
|
|
|
final class Config
|
|
{
|
|
// From resources
|
|
public final float marginTop;
|
|
public final float keyPadding;
|
|
public final float keyVerticalInterval;
|
|
public final float keyHorizontalInterval;
|
|
public final float keyRound;
|
|
|
|
// From preferences
|
|
public int layout; // Or '-1' for the system defaults
|
|
public float subValueDist;
|
|
public boolean vibrateEnabled;
|
|
public long vibrateDuration;
|
|
public long longPressTimeout;
|
|
public long longPressInterval;
|
|
public float marginBottom;
|
|
public float keyHeight;
|
|
public float horizontalMargin;
|
|
public boolean preciseRepeat;
|
|
public float characterSize; // Ratio
|
|
public int accents; // Values are R.values.pref_accents_v_*
|
|
|
|
// Dynamically set
|
|
public boolean shouldOfferSwitchingToNextInputMethod;
|
|
public int accent_flags_to_remove;
|
|
|
|
public final IKeyEventHandler handler;
|
|
|
|
private Config(Context context, IKeyEventHandler h)
|
|
{
|
|
Resources res = context.getResources();
|
|
// static values
|
|
marginTop = res.getDimension(R.dimen.margin_top);
|
|
keyPadding = res.getDimension(R.dimen.key_padding);
|
|
keyVerticalInterval = res.getDimension(R.dimen.key_vertical_interval);
|
|
keyHorizontalInterval = res.getDimension(R.dimen.key_horizontal_interval);
|
|
keyRound = res.getDimension(R.dimen.key_round);
|
|
// default values
|
|
layout = -1;
|
|
subValueDist = 10f;
|
|
vibrateEnabled = true;
|
|
vibrateDuration = 20;
|
|
longPressTimeout = 600;
|
|
longPressInterval = 65;
|
|
marginBottom = res.getDimension(R.dimen.margin_bottom);
|
|
keyHeight = res.getDimension(R.dimen.key_height);
|
|
horizontalMargin = res.getDimension(R.dimen.horizontal_margin);
|
|
preciseRepeat = true;
|
|
characterSize = 1.f;
|
|
accents = 1;
|
|
// from prefs
|
|
refresh(context);
|
|
// initialized later
|
|
shouldOfferSwitchingToNextInputMethod = false;
|
|
accent_flags_to_remove = 0;
|
|
handler = h;
|
|
}
|
|
|
|
/*
|
|
** Reload prefs
|
|
*/
|
|
public void refresh(Context context)
|
|
{
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
DisplayMetrics dm = context.getResources().getDisplayMetrics();
|
|
layout = layoutId_of_string(prefs.getString("layout", "system"));
|
|
subValueDist = prefs.getFloat("sub_value_dist", subValueDist);
|
|
vibrateEnabled = prefs.getBoolean("vibrate_enabled", vibrateEnabled);
|
|
vibrateDuration = prefs.getInt("vibrate_duration", (int)vibrateDuration);
|
|
longPressTimeout = prefs.getInt("longpress_timeout", (int)longPressTimeout);
|
|
longPressInterval = prefs.getInt("longpress_interval", (int)longPressInterval);
|
|
marginBottom = getDipPref(dm, prefs, "margin_bottom", marginBottom);
|
|
keyHeight = getDipPref(dm, prefs, "key_height", keyHeight);
|
|
horizontalMargin = getDipPref(dm, prefs, "horizontal_margin", horizontalMargin);
|
|
preciseRepeat = prefs.getBoolean("precise_repeat", preciseRepeat);
|
|
characterSize = prefs.getFloat("character_size", characterSize);
|
|
accents = Integer.valueOf(prefs.getString("accents", "1"));
|
|
}
|
|
|
|
private float getDipPref(DisplayMetrics dm, SharedPreferences prefs, String pref_name, float def)
|
|
{
|
|
int value = prefs.getInt(pref_name, -1);
|
|
if (value < 0)
|
|
return (def);
|
|
return (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, dm));
|
|
}
|
|
|
|
public static int layoutId_of_string(String name)
|
|
{
|
|
switch (name)
|
|
{
|
|
case "azerty": return R.xml.azerty;
|
|
case "qwerty": return R.xml.qwerty;
|
|
case "system": default: return -1;
|
|
}
|
|
}
|
|
|
|
/* Used for the accents option. */
|
|
public static int accentFlag_of_name(String name)
|
|
{
|
|
switch (name)
|
|
{
|
|
case "grave": return KeyValue.FLAG_ACCENT1;
|
|
case "aigu": return KeyValue.FLAG_ACCENT2;
|
|
case "circonflexe": return KeyValue.FLAG_ACCENT3;
|
|
case "tilde": return KeyValue.FLAG_ACCENT4;
|
|
case "cedille": return KeyValue.FLAG_ACCENT5;
|
|
case "trema": return KeyValue.FLAG_ACCENT6;
|
|
case "ring": return KeyValue.FLAG_ACCENT_RING;
|
|
default: throw new RuntimeException(name);
|
|
}
|
|
}
|
|
|
|
private static Config _globalConfig = null;
|
|
|
|
public static void initGlobalConfig(Context context, IKeyEventHandler handler)
|
|
{
|
|
_globalConfig = new Config(context, handler);
|
|
}
|
|
|
|
public static Config globalConfig()
|
|
{
|
|
return _globalConfig;
|
|
}
|
|
|
|
public static interface IKeyEventHandler
|
|
{
|
|
public void handleKeyUp(KeyValue value, int flags);
|
|
}
|
|
}
|