From dad5f57a036e3f0ad7278ccee5bd248192cbbad2 Mon Sep 17 00:00:00 2001
From: Jules Aguillon
Date: Sat, 29 Jul 2023 18:37:06 +0200
Subject: Allow more than 2 layouts
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.
---
check_layout.py | 4 +-
gen_layouts.py | 4 +-
res/layout/pref_layouts_add_btn.xml | 4 ++
res/values-cs/strings.xml | 3 +-
res/values-de/strings.xml | 3 +-
res/values-es/strings.xml | 3 +-
res/values-fa/strings.xml | 3 +-
res/values-fr/strings.xml | 3 +-
res/values-it/strings.xml | 3 +-
res/values-ko/strings.xml | 3 +-
res/values-lv/strings.xml | 3 +-
res/values-pl/strings.xml | 3 +-
res/values-pt/strings.xml | 3 +-
res/values-ro/strings.xml | 3 +-
res/values-ru/strings.xml | 3 +-
res/values-tr/strings.xml | 3 +-
res/values-vi/strings.xml | 3 +-
res/values-zh-rCN/strings.xml | 3 +-
res/values/layouts.xml | 4 +-
res/values/strings.xml | 3 +-
res/xml/bottom_row.xml | 2 +-
res/xml/latn_bone.xml | 2 +-
res/xml/latn_neo2.xml | 2 +-
res/xml/settings.xml | 3 +-
srcs/juloo.keyboard2/Config.java | 36 ++++--------
srcs/juloo.keyboard2/KeyValue.java | 8 +--
srcs/juloo.keyboard2/Keyboard2.java | 51 +++++++----------
srcs/juloo.keyboard2/LayoutsPreference.java | 89 +++++++++++++++++++++++++++++
28 files changed, 172 insertions(+), 85 deletions(-)
create mode 100644 res/layout/pref_layouts_add_btn.xml
create mode 100644 srcs/juloo.keyboard2/LayoutsPreference.java
diff --git a/check_layout.py b/check_layout.py
index f0c1a34..27a1f36 100644
--- a/check_layout.py
+++ b/check_layout.py
@@ -50,8 +50,8 @@ def check_layout(layout):
bottom_row_keys = [
"ctrl", "fn", "switch_numeric", "change_method", "switch_emoji",
- "config", "switch_second", "enter", "action", "left", "up", "right",
- "down", "space"
+ "config", "switch_forward", "switch_backward", "enter", "action",
+ "left", "up", "right", "down", "space"
]
if root.get("bottom_row") == "false":
diff --git a/gen_layouts.py b/gen_layouts.py
index a8f13c8..44c3563 100644
--- a/gen_layouts.py
+++ b/gen_layouts.py
@@ -54,10 +54,10 @@ def generate_arrays(out, layouts):
item.text = s
elem.append(item)
return elem
- none_item = [ ("none", "None") ]
+ none_item = [ ("system", "@string/pref_layout_e_system") ]
custom_item = [ ("custom", "@string/pref_layout_e_custom") ]
values_items, entries_items = zip(*(none_item + layouts + custom_item)) # unzip
- ids_items = map(lambda s: "@xml/%s" % s if s not in ["none", "custom"] else "-1", values_items)
+ ids_items = map(lambda s: "@xml/%s" % s if s not in ["system", "custom"] else "-1", values_items)
root = XML.Element("resources")
root.append(XML.Comment(text="DO NOT EDIT. This file is generated, see gen_layouts.py."))
root.append(mk_array("string-array", "pref_layout_values", values_items))
diff --git a/res/layout/pref_layouts_add_btn.xml b/res/layout/pref_layouts_add_btn.xml
new file mode 100644
index 0000000..ab1b271
--- /dev/null
+++ b/res/layout/pref_layouts_add_btn.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 45f74d2..3288b73 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -10,9 +10,10 @@
Upravit průhlednost pozadí klávesnice
Upravit průhlednost kláves
Upravit průhlednost stisknutých kláves
- Změnit rozvržení klávesnice
Dle nastavení systému
Vlastní rozvržení
+
+
(Univerzální) Diakritická znaménka
Zobrazovat znaménka pro všechny instalované systémové jazyky
Zobrazovat znaménka pouze pro současně zvolený jazyk
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index f6ee617..b7adf18 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -10,9 +10,10 @@
Deckkraft des Tastaturhintergrunds anpassen
Deckkraft der Tasten anpassen
Deckkraft gedrückter Tasten anpassen
- Tastaturlayout ändern
Systemeinstellung
Eigenes Layout
+
+
Akzente
Akzente für alle installierten Sprachen anzeigen
Akzente nur für die gewählte Sprache anzeigen
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index c54106b..76ea16a 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -10,9 +10,10 @@
Ajustar opacidad del fondo del teclado
Ajustar opacidad de teclas
Ajustar opacidad de teclas apretadas
- Cambiar formato de teclado
Ajustes del sistema
Formato personalizado
+
+
Acentos
Mostrar acentos para todos los lenguajes instalados
Solo mostrar acentos para el lenguaje seleccionado
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 0104a3c..b8203e7 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -10,9 +10,10 @@
تنظیم کدر بودن پسزمینه صفحه کلید
تنظیم کدر بودن کلید
تنظیم کدر بودن کلید فشرده شده
- تغییر طرح صفحه کلید
تنظیمات سامانه
طرح صفارشی
+
+
لهجهها
نمایش لهجهها برای تمام زبانهی نصب شده
فقط نمایش لهجهها برای زبانهای انتخاب شده
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 4619ca4..0245dce 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -10,9 +10,10 @@
Transparence du clavier
Transparence des touches
Transparence des touches pressées
- Disposition des touches
Paramètre système
Disposition personnalisée
+
+
Accents
Afficher les accents pour les langues installées
Afficher les accents pour la langue sélectionnée
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 51643df..8d3f23a 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -10,9 +10,10 @@
- Cambia layout tastiera
Impostazioni di sistema
+
+
Accenti
Mostra accenti per tutte le lingue installate
Mostra accenti solo per le lingue selezionate
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 686532b..9e95e5d 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -10,9 +10,10 @@
- 키보드 레이아웃 변경
시스템 세팅
+
+
악센트
설치된 모든 언어의 악센트 표시
선택한 언어의 악센트만 표시
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 10ec311..31ce651 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -10,9 +10,10 @@
Pielāgot tastatūras fona necaurredzamību
Pielāgot taustiņu necaurredzamību
Pielāgot piespiesta taustiņa necaurredzamību
- Mainīt tastatūras izkārtojumu
Ierīces iestatījumi
Pielāgots izkārtojums
+
+
Uzsvara zīmes
Rādīt uzsvara zīmes visām uzstādītajām valodām
Rādīt uzsvara zīmes tikai atlasītajām valodām
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index f5e4e7b..fed2600 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -10,9 +10,10 @@
Nieprzezroczystość tła klawiatury
Nieprzezroczystość klawisza
Nieprzezroczystość naciśniętego klawisza
- Zmień układ klawiatury
Systemowy
Własny układ
+
+
Znaki diakrytyczne
Pokaż znaki diakryt. dla wszystkich zainstalowanych języków
Pokaż znaki diakryt. tylko dla wybranego języka
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index cc5a21c..991a58b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -10,9 +10,10 @@
Ajustar opacidade do fundo do teclado
Ajustar opacidade das teclas
Ajustar opacidade das teclas pressionadas
- Mudar layout do teclado
Mesmo do sistema
Layout personalizado
+
+
Acentos
Mostrar acentos para todos os idiomas instalados
Mostrar acentos só para o idioma selecionado
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 3347004..d56bda3 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -10,9 +10,10 @@
Modifică opacitatea fundalului tastaturii
Modifică opacitatea tastelor
Modifică opacitatea tastei apăsate
- Schimbă aranjamentul tastaturii
Setări de Sistem
Aranjament personalizat
+
+
Accente
Arată accentele pentru toate limbile instalate
Aratp accentele doar pentru limba selectată
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index ed6caed..a8d38f8 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -10,9 +10,10 @@
Изменить прозрачность фона
Изменить прозрачность клавиш
Изменить прозрачность нажатой клавиши
- Изменить раскладку клавиатуры
Системные настройки
Пользовательская раскладка
+
+
Акцент
Показывать акценты для всех установленных языков
Показывать акценты только для выбранного языка
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index b318866..8c729a0 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -10,9 +10,10 @@
- Klavye Düzenini Değiştir
Sistem Ayarları
+
+
Aksanlar
Yüklü tüm dillerin aksanlarını göster
Sadece seçili dilin aksanlarını göster
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 96fadbe..991fa60 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -10,9 +10,10 @@
Tùy chỉnh độ trong suốt của bàn phím
Tùy chỉnh độ trong suốt của phím
Tùy chỉnh độ trong suốt của phím khi nhấn
- Thay đổi bố cục bàn phím
Hệ thống
Tùy chỉnh bố cục
+
+
Dấu phụ
Hiển thị cho các ngôn ngữ đã cài đặt
Chỉ hiển thị cho các ngôn ngữ đã chọn
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 01bc65d..6140208 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -10,9 +10,10 @@
调整键盘背景透明度
调整按键透明度
调整按下的按键的透明度
- 改变键盘布局
系统设置
自定义布局
+
+
声调
显示所有安装的语言的声调符号
只显示选择的语言的声调符号
diff --git a/res/values/layouts.xml b/res/values/layouts.xml
index 3a972be..4c9779f 100644
--- a/res/values/layouts.xml
+++ b/res/values/layouts.xml
@@ -2,7 +2,7 @@
- - none
+ - system
- latn_qwerty_us
- latn_colemak
- latn_dvorak
@@ -43,7 +43,7 @@
- custom
- - None
+ - @string/pref_layout_e_system
- QWERTY (US)
- Colemak
- Dvorak
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6a280f5..a3e50d3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10,9 +10,10 @@
Adjust keyboard background opacity
Adjust key opacity
Adjust pressed key opacity
- Change keyboard layout
System settings
Custom layout
+ Add an alternate layout
+ Layout %1$d: %2$s
Accents
Show accents for all installed languages
Only show accents for the selected language
diff --git a/res/xml/bottom_row.xml b/res/xml/bottom_row.xml
index 56493dc..24705e1 100644
--- a/res/xml/bottom_row.xml
+++ b/res/xml/bottom_row.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/res/xml/latn_bone.xml b/res/xml/latn_bone.xml
index ea31131..9078f79 100644
--- a/res/xml/latn_bone.xml
+++ b/res/xml/latn_bone.xml
@@ -39,7 +39,7 @@
-
+
diff --git a/res/xml/latn_neo2.xml b/res/xml/latn_neo2.xml
index 939e131..f8904f1 100644
--- a/res/xml/latn_neo2.xml
+++ b/res/xml/latn_neo2.xml
@@ -42,7 +42,7 @@
-
+
diff --git a/res/xml/settings.xml b/res/xml/settings.xml
index e21e6a7..b735e5a 100644
--- a/res/xml/settings.xml
+++ b/res/xml/settings.xml
@@ -1,8 +1,7 @@
-
-
+
diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java
index 09db10d..b38604b 100644
--- a/srcs/juloo.keyboard2/Config.java
+++ b/srcs/juloo.keyboard2/Config.java
@@ -8,6 +8,7 @@ import android.os.Build;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.KeyEvent;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -25,8 +26,8 @@ final class Config
public final float sublabelTextSize;
// From preferences
- public KeyboardData layout; // Or 'null' for the system defaults
- public KeyboardData second_layout; // Or 'null' for none
+ /** [null] represent the [system] layout. */
+ public List layouts;
public KeyboardData custom_layout; // Might be 'null'
public boolean show_numpad = false;
// From the 'numpad_layout' option, also apply to the numeric pane.
@@ -56,7 +57,6 @@ final class Config
// Dynamically set
public boolean shouldOfferSwitchingToNextInputMethod;
- public boolean shouldOfferSwitchingToSecond;
public boolean shouldOfferVoiceTyping;
public String actionLabel; // Might be 'null'
public int actionId; // Meaningful only when 'actionLabel' isn't 'null'
@@ -80,7 +80,6 @@ final class Config
refresh(res);
// initialized later
shouldOfferSwitchingToNextInputMethod = false;
- shouldOfferSwitchingToSecond = false;
shouldOfferVoiceTyping = false;
actionLabel = null;
actionId = 0;
@@ -116,8 +115,10 @@ final class Config
{
keyboardHeightPercent = _prefs.getInt("keyboard_height", 35);
}
- layout = layout_of_string(res, _prefs.getString("layout", "none"));
- second_layout = tweak_secondary_layout(layout_of_string(res, _prefs.getString("second_layout", "none")));
+ List layout_names = LayoutsPreference.load_from_preferences(_prefs);
+ layouts = new ArrayList();
+ for (String l : layout_names)
+ layouts.add(layout_of_string(res, l));
custom_layout = KeyboardData.load_string(_prefs.getString("custom_layout", ""));
inverse_numpad = _prefs.getString("numpad_layout", "default").equals("low_first");
number_row = _prefs.getBoolean("number_row", false);
@@ -214,8 +215,10 @@ final class Config
case ACTION:
return (swapEnterActionKey && action_key != null) ?
KeyValue.getKeyByName("enter") : action_key;
- case SWITCH_SECOND:
- return shouldOfferSwitchingToSecond ? key : null;
+ case SWITCH_FORWARD:
+ return (layouts.size() > 1) ? key : null;
+ case SWITCH_BACKWARD:
+ return (layouts.size() > 2) ? key : null;
case SWITCH_VOICE_TYPING:
return shouldOfferVoiceTyping ? key : null;
}
@@ -287,23 +290,6 @@ final class Config
});
}
- /** Modify a layout to turn it into a secondary layout by changing the
- "switch_second" key. */
- KeyboardData tweak_secondary_layout(KeyboardData layout)
- {
- if (layout == null)
- return null;
- return layout.mapKeys(new KeyboardData.MapKeyValues() {
- public KeyValue apply(KeyValue key, boolean localized)
- {
- if (key.getKind() == KeyValue.Kind.Event
- && key.getEvent() == KeyValue.Event.SWITCH_SECOND)
- return KeyValue.getKeyByName("switch_second_back");
- return key;
- }
- });
- }
-
private float get_dip_pref(DisplayMetrics dm, String pref_name, float def)
{
float value;
diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java
index b3008ca..84a214b 100644
--- a/srcs/juloo.keyboard2/KeyValue.java
+++ b/srcs/juloo.keyboard2/KeyValue.java
@@ -15,8 +15,8 @@ final class KeyValue
CHANGE_METHOD,
CHANGE_METHOD_PREV,
ACTION,
- SWITCH_SECOND,
- SWITCH_SECOND_BACK,
+ SWITCH_FORWARD,
+ SWITCH_BACKWARD,
SWITCH_GREEKMATH,
CAPS_LOCK,
SWITCH_VOICE_TYPING,
@@ -346,8 +346,8 @@ final class KeyValue
case "switch_numeric": return eventKey("123+", Event.SWITCH_NUMERIC, FLAG_SMALLER_FONT);
case "switch_emoji": return eventKey(0x01, Event.SWITCH_EMOJI, FLAG_SMALLER_FONT);
case "switch_back_emoji": return eventKey("ABC", Event.SWITCH_BACK_EMOJI, 0);
- case "switch_second": return eventKey(0x13, Event.SWITCH_SECOND, FLAG_SMALLER_FONT);
- case "switch_second_back": return eventKey(0x14, Event.SWITCH_SECOND_BACK, FLAG_SMALLER_FONT);
+ case "switch_forward": return eventKey(0x13, Event.SWITCH_FORWARD, FLAG_SMALLER_FONT);
+ case "switch_backward": return eventKey(0x14, Event.SWITCH_BACKWARD, FLAG_SMALLER_FONT);
case "switch_greekmath": return eventKey("πλ∇¬", Event.SWITCH_GREEKMATH, FLAG_SMALLER_FONT);
case "change_method": return eventKey(0x09, Event.CHANGE_METHOD, FLAG_SMALLER_FONT);
case "change_method_prev": return eventKey(0x09, Event.CHANGE_METHOD_PREV, FLAG_SMALLER_FONT);
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java
index 3606213..1b59e5e 100644
--- a/srcs/juloo.keyboard2/Keyboard2.java
+++ b/srcs/juloo.keyboard2/Keyboard2.java
@@ -30,7 +30,8 @@ public class Keyboard2 extends InputMethodService
private KeyEventHandler _keyeventhandler;
// If not 'null', the layout to use instead of [_currentTextLayout].
private KeyboardData _currentSpecialLayout;
- private Current_text_layout _currentTextLayout;
+ /** Current layout index in [Config.layouts]. */
+ private int _currentTextLayout;
// Layout associated with the currently selected locale. Not 'null'.
private KeyboardData _localeTextLayout;
private ViewGroup _emojiPane = null;
@@ -43,23 +44,31 @@ public class Keyboard2 extends InputMethodService
{
if (_currentSpecialLayout != null)
return _currentSpecialLayout;
- KeyboardData layout;
- if (_currentTextLayout == Current_text_layout.SECONDARY)
- layout = _config.second_layout;
- else if (_config.layout == null)
+ KeyboardData layout = null;
+ if (_currentTextLayout >= _config.layouts.size())
+ _currentTextLayout = 0;
+ if (_currentTextLayout < _config.layouts.size())
+ layout = _config.layouts.get(_currentTextLayout);
+ if (layout == null)
layout = _localeTextLayout;
- else
- layout = _config.layout;
return _config.modify_layout(layout);
}
- void setTextLayout(Current_text_layout layout)
+ void setTextLayout(int l)
{
- _currentTextLayout = layout;
+ if (l == _currentTextLayout)
+ return;
+ _currentTextLayout = l;
_currentSpecialLayout = null;
_keyboardView.setKeyboard(current_layout());
}
+ void incrTextLayout(int delta)
+ {
+ int s = _config.layouts.size();
+ setTextLayout((_currentTextLayout + delta + s) % s);
+ }
+
void setSpecialLayout(KeyboardData l)
{
_currentSpecialLayout = l;
@@ -162,15 +171,6 @@ public class Keyboard2 extends InputMethodService
if (default_layout == null)
default_layout = loadLayout(R.xml.latn_qwerty_us);
_localeTextLayout = default_layout;
- if (_config.second_layout == null)
- {
- _config.shouldOfferSwitchingToSecond = false;
- _currentTextLayout = Current_text_layout.PRIMARY;
- }
- else
- {
- _config.shouldOfferSwitchingToSecond = true;
- }
}
private String actionLabel_of_imeAction(int action)
@@ -419,13 +419,12 @@ public class Keyboard2 extends InputMethodService
conn.performEditorAction(actionId);
break;
- case SWITCH_SECOND:
- if (_config.second_layout != null)
- setTextLayout(Current_text_layout.SECONDARY);
+ case SWITCH_FORWARD:
+ incrTextLayout(1);
break;
- case SWITCH_SECOND_BACK:
- setTextLayout(Current_text_layout.PRIMARY);
+ case SWITCH_BACKWARD:
+ incrTextLayout(-1);
break;
case SWITCH_GREEKMATH:
@@ -469,10 +468,4 @@ public class Keyboard2 extends InputMethodService
{
return View.inflate(new ContextThemeWrapper(this, _config.theme), layout, null);
}
-
- private static enum Current_text_layout
- {
- PRIMARY,
- SECONDARY
- }
}
diff --git a/srcs/juloo.keyboard2/LayoutsPreference.java b/srcs/juloo.keyboard2/LayoutsPreference.java
new file mode 100644
index 0000000..5d1d566
--- /dev/null
+++ b/srcs/juloo.keyboard2/LayoutsPreference.java
@@ -0,0 +1,89 @@
+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 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 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(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);
+ }
+ }
+}
--
cgit v1.2.3