forked from extern/Unexpected-Keyboard
9f22e53a3b
This allows to add new kinds of keys that need more data without making KeyValue's footprint bigger for common keys. This changes the [_symbol] field into [_payload], which holds the same as the previous field for more common keys but can hold bigger objects for keys of the new "Complex" kind. This also adds a complex key: String keys with a symbol different than the outputted string. Unit tests are added as the Java language is not helpful in making robust code.
71 lines
2.3 KiB
Java
71 lines
2.3 KiB
Java
package juloo.keyboard2.prefs;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.content.SharedPreferences;
|
|
import android.preference.Preference;
|
|
import android.preference.PreferenceCategory;
|
|
import android.util.AttributeSet;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.EditText;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import juloo.keyboard2.*;
|
|
import org.json.JSONArray;
|
|
import org.json.JSONException;
|
|
|
|
/** Allows to enter custom keys to be added to the keyboard. This shows up at
|
|
the top of the "Add keys to the keyboard" option. */
|
|
public class CustomExtraKeysPreference extends ListGroupPreference<String>
|
|
{
|
|
/** This pref stores a list of strings encoded as JSON. */
|
|
static final String KEY = "custom_extra_keys";
|
|
static final ListGroupPreference.Serializer<String> SERIALIZER =
|
|
new ListGroupPreference.StringSerializer();
|
|
|
|
public CustomExtraKeysPreference(Context context, AttributeSet attrs)
|
|
{
|
|
super(context, attrs);
|
|
setKey(KEY);
|
|
}
|
|
|
|
public static Map<KeyValue, KeyboardData.PreferredPos> get(SharedPreferences prefs)
|
|
{
|
|
Map<KeyValue, KeyboardData.PreferredPos> kvs =
|
|
new HashMap<KeyValue, KeyboardData.PreferredPos>();
|
|
List<String> key_names = load_from_preferences(KEY, prefs, null, SERIALIZER);
|
|
if (key_names != null)
|
|
{
|
|
for (String key_name : key_names)
|
|
kvs.put(KeyValue.parseKeyDefinition(key_name), KeyboardData.PreferredPos.DEFAULT);
|
|
}
|
|
return kvs;
|
|
}
|
|
|
|
String label_of_value(String value, int i) { return value; }
|
|
|
|
@Override
|
|
void select(final SelectionCallback<String> callback)
|
|
{
|
|
new AlertDialog.Builder(getContext())
|
|
.setView(View.inflate(getContext(), R.layout.dialog_edit_text, null))
|
|
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
|
|
public void onClick(DialogInterface dialog, int which)
|
|
{
|
|
EditText input = (EditText)((AlertDialog)dialog).findViewById(R.id.text);
|
|
final String k = input.getText().toString();
|
|
if (!k.equals(""))
|
|
callback.select(k);
|
|
}
|
|
})
|
|
.setNegativeButton(android.R.string.cancel, null)
|
|
.show();
|
|
}
|
|
|
|
@Override
|
|
Serializer<String> get_serializer() { return SERIALIZER; }
|
|
}
|