forked from extern/Unexpected-Keyboard
dad5f57a03
The two layout selection options are replaced by a ListGroupPreference that allow to enter an arbitrary amount of layouts. The "switch_second" and "switch_second_back" keys are replaced by "switch_forward" and "switch_backward", which allow to cycle through the selected layouts in two directions. Layouts are changed to place these two key on the space bar. The backward key is not shown if there's only two layouts.
90 lines
2.4 KiB
Java
90 lines
2.4 KiB
Java
package juloo.keyboard2;
|
|
|
|
import android.app.AlertDialog;
|
|
import android.content.Context;
|
|
import android.content.DialogInterface;
|
|
import android.content.SharedPreferences;
|
|
import android.content.res.Resources;
|
|
import android.util.AttributeSet;
|
|
import android.widget.ArrayAdapter;
|
|
import android.widget.EditText;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
|
|
public class LayoutsPreference extends ListGroupPreference
|
|
{
|
|
static final String KEY = "layouts";
|
|
static final List<String> DEFAULT = Collections.singletonList("system");
|
|
|
|
/** Layout names as stored in the preferences. */
|
|
String[] _layout_names;
|
|
/** Text displayed for each layout in the dialog list. */
|
|
String[] _layout_display_names;
|
|
|
|
public LayoutsPreference(Context ctx, AttributeSet attrs)
|
|
{
|
|
super(ctx, attrs);
|
|
setKey(KEY);
|
|
Resources res = ctx.getResources();
|
|
_layout_names = res.getStringArray(R.array.pref_layout_values);
|
|
_layout_display_names = res.getStringArray(R.array.pref_layout_entries);
|
|
}
|
|
|
|
public static List<String> load_from_preferences(SharedPreferences prefs)
|
|
{
|
|
return load_from_preferences(KEY, prefs, DEFAULT);
|
|
}
|
|
|
|
@Override
|
|
protected void onSetInitialValue(boolean restoreValue, Object defaultValue)
|
|
{
|
|
super.onSetInitialValue(restoreValue, defaultValue);
|
|
if (_values.size() == 0)
|
|
set_values(new ArrayList<String>(DEFAULT), false);
|
|
}
|
|
|
|
@Override
|
|
String label_of_value(String value, int i)
|
|
{
|
|
return getContext().getString(R.string.pref_layouts_item, i + 1, value);
|
|
}
|
|
|
|
@Override
|
|
AddButton on_attach_add_button(AddButton prev_btn)
|
|
{
|
|
if (prev_btn == null)
|
|
return new LayoutsAddButton(getContext());
|
|
return prev_btn;
|
|
}
|
|
|
|
@Override
|
|
boolean should_allow_remove_item()
|
|
{
|
|
return (_values.size() > 1);
|
|
}
|
|
|
|
void select(final SelectionCallback callback)
|
|
{
|
|
ArrayAdapter layouts = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, _layout_display_names);
|
|
new AlertDialog.Builder(getContext())
|
|
.setView(R.layout.custom_extra_key_add_dialog)
|
|
.setAdapter(layouts, new DialogInterface.OnClickListener(){
|
|
public void onClick(DialogInterface dialog, int which)
|
|
{
|
|
callback.select(_layout_names[which]);
|
|
}
|
|
})
|
|
.show();
|
|
}
|
|
|
|
class LayoutsAddButton extends AddButton
|
|
{
|
|
public LayoutsAddButton(Context ctx)
|
|
{
|
|
super(ctx);
|
|
setLayoutResource(R.layout.pref_layouts_add_btn);
|
|
}
|
|
}
|
|
}
|