From de522b9b19668789efe0f9fd7f256a2981b05e67 Mon Sep 17 00:00:00 2001 From: zt515 Date: Sat, 17 Jun 2017 09:28:56 +0800 Subject: [PATCH] Feature: Improve EKS --- .../java/io/neoterm/customize/NeoTermPath.kt | 1 + .../customize/shortcut/ShortcutConfig.kt | 5 +- .../shortcut/ShortcutConfigLoader.kt | 9 + .../shortcut/ShortcutConfigParser.kt | 13 +- .../customize/shortcut/ShortcutKeysManager.kt | 2 +- .../shortcut/builtin/BuiltinShortcutKeys.kt | 4 +- .../neoterm/preference/NeoTermPreference.kt | 2 +- .../io/neoterm/services/NeoTermService.kt | 4 +- .../java/io/neoterm/view/ExtraKeysView.java | 243 +++++++----------- .../io/neoterm/view/eks/ControlButton.java | 20 ++ .../java/io/neoterm/view/eks/ExtraButton.java | 14 + .../neoterm/view/eks/StatedControlButton.java | 34 +++ .../java/io/neoterm/view/eks/TextButton.java | 30 +++ .../main/java/io/neoterm/view/tab/TermTab.kt | 2 + .../io/neoterm/view/tab/TermViewClient.kt | 6 +- app/src/main/res/layout/term.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 + app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/preference_keys.xml | 1 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/settings_ui.xml | 6 + build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 23 files changed, 250 insertions(+), 160 deletions(-) create mode 100644 app/src/main/java/io/neoterm/view/eks/ControlButton.java create mode 100644 app/src/main/java/io/neoterm/view/eks/ExtraButton.java create mode 100644 app/src/main/java/io/neoterm/view/eks/StatedControlButton.java create mode 100644 app/src/main/java/io/neoterm/view/eks/TextButton.java diff --git a/app/src/main/java/io/neoterm/customize/NeoTermPath.kt b/app/src/main/java/io/neoterm/customize/NeoTermPath.kt index 56cf176..fda6454 100644 --- a/app/src/main/java/io/neoterm/customize/NeoTermPath.kt +++ b/app/src/main/java/io/neoterm/customize/NeoTermPath.kt @@ -9,4 +9,5 @@ object NeoTermPath { const val HOME_PATH = "$ROOT_PATH/home" const val EKS_PATH = "$USR_PATH/share/eks" + const val EKS_DEFAULT_FILE = "$EKS_PATH/default.eks" } \ No newline at end of file diff --git a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfig.kt b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfig.kt index 112120f..2391a00 100644 --- a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfig.kt +++ b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfig.kt @@ -1,6 +1,6 @@ package io.neoterm.customize.shortcut -import io.neoterm.view.ExtraKeysView +import io.neoterm.view.eks.ExtraButton /** * @author kiva @@ -8,5 +8,6 @@ import io.neoterm.view.ExtraKeysView class ShortcutConfig { var version: Int = -1 val programNames: MutableList = mutableListOf() - val shortcutKeys: MutableList = mutableListOf() + val shortcutKeys: MutableList = mutableListOf() + var withDefaultKeys: Boolean = true } \ No newline at end of file diff --git a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigLoader.kt b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigLoader.kt index 019c006..593ca64 100644 --- a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigLoader.kt +++ b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigLoader.kt @@ -11,6 +11,9 @@ import java.io.File object ShortcutConfigLoader { class ConfiguredShortcutKey(val config: ShortcutConfig) : ShortcutKey { override fun applyShortcutKeys(extraKeysView: ExtraKeysView) { + if (config.withDefaultKeys) { + extraKeysView.loadDefaultUserDefinedExtraKeys() + } for (button in config.shortcutKeys) { extraKeysView.addExternalButton(button) } @@ -26,6 +29,12 @@ object ShortcutConfigLoader { try { parser.setInput(file) val config = parser.parse() + + // "default" is a reserved program used for default extra keys + // see ExtraKeysView.loadDefaultUserDefinedExtraKeys() + if (config.programNames.contains("default")) { + continue + } registerConfig(config) } catch (e: Exception) { Log.e("NeoTerm-EKS", "Load $file failed: " + e.toString()) diff --git a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigParser.kt b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigParser.kt index 52c9b05..f7ebc9c 100644 --- a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigParser.kt +++ b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutConfigParser.kt @@ -1,6 +1,6 @@ package io.neoterm.customize.shortcut -import io.neoterm.view.ExtraKeysView +import io.neoterm.view.eks.TextButton import java.io.* /** @@ -8,7 +8,7 @@ import java.io.* */ class ShortcutConfigParser { companion object { - const val PARSER_VERSION = 1 + const val PARSER_VERSION = 2 } private lateinit var source: BufferedReader @@ -42,6 +42,8 @@ class ShortcutConfigParser { parseProgram(line, config) } else if (line.startsWith("define")) { parseKeyDefine(line, config) + } else if (line.startsWith("with-default")) { + parseWithDefault(line, config) } line = source.readLine() } @@ -55,6 +57,11 @@ class ShortcutConfigParser { return config } + private fun parseWithDefault(line: String, config: ShortcutConfig) { + val value = line.substring("with-default".length).trim().trimEnd() + config.withDefaultKeys = value == "true" + } + private fun parseKeyDefine(line: String, config: ShortcutConfig) { val keyDefine = line.substring("define".length).trim().trimEnd() val keyValues = keyDefine.split(" ") @@ -65,7 +72,7 @@ class ShortcutConfigParser { val buttonText = keyValues[0] val withEnter = keyValues[1] == "true" - config.shortcutKeys.add(ExtraKeysView.TextButton(buttonText, withEnter)) + config.shortcutKeys.add(TextButton(buttonText, withEnter)) } private fun parseProgram(line: String, config: ShortcutConfig) { diff --git a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutKeysManager.kt b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutKeysManager.kt index 91a0165..31516ba 100644 --- a/app/src/main/java/io/neoterm/customize/shortcut/ShortcutKeysManager.kt +++ b/app/src/main/java/io/neoterm/customize/shortcut/ShortcutKeysManager.kt @@ -19,7 +19,7 @@ object ShortcutKeysManager { return } - extraKeysView.resetExternalButtons() + extraKeysView.loadDefaultUserDefinedExtraKeys() } fun registerShortcutKeys(program: String, shortcutKey: ShortcutKey?) { diff --git a/app/src/main/java/io/neoterm/customize/shortcut/builtin/BuiltinShortcutKeys.kt b/app/src/main/java/io/neoterm/customize/shortcut/builtin/BuiltinShortcutKeys.kt index 9954f74..05ed625 100644 --- a/app/src/main/java/io/neoterm/customize/shortcut/builtin/BuiltinShortcutKeys.kt +++ b/app/src/main/java/io/neoterm/customize/shortcut/builtin/BuiltinShortcutKeys.kt @@ -11,9 +11,9 @@ import java.io.File object BuiltinShortcutKeys { private const val vimKeys = "version ${ShortcutConfigParser.PARSER_VERSION}\n" + "program vim neovim vi\n" + - "define / false\n" + - "define :w true\n" + "define dd true\n" + + "define :x true\n" + + "define :w true\n" + "define :q true\n" private const val moreKeys = "version ${ShortcutConfigParser.PARSER_VERSION}\n" + diff --git a/app/src/main/java/io/neoterm/preference/NeoTermPreference.kt b/app/src/main/java/io/neoterm/preference/NeoTermPreference.kt index cdbb45f..c66346a 100644 --- a/app/src/main/java/io/neoterm/preference/NeoTermPreference.kt +++ b/app/src/main/java/io/neoterm/preference/NeoTermPreference.kt @@ -84,7 +84,7 @@ object NeoTermPreference { return null } - fun buildEnvironment(cwd: String?, systemShell: Boolean): Array { + fun buildEnvironment(cwd: String?, systemShell: Boolean, executablePath: String): Array { var cwd = cwd File(NeoTermPath.HOME_PATH).mkdirs() diff --git a/app/src/main/java/io/neoterm/services/NeoTermService.kt b/app/src/main/java/io/neoterm/services/NeoTermService.kt index 04a54ce..e4de39c 100644 --- a/app/src/main/java/io/neoterm/services/NeoTermService.kt +++ b/app/src/main/java/io/neoterm/services/NeoTermService.kt @@ -93,7 +93,9 @@ class NeoTermService : Service() { arguments = arrayOf(executablePath) } - val session = TerminalSession(executablePath, cwd, arguments, env ?: NeoTermPreference.buildEnvironment(cwd, systemShell), sessionCallback) + val session = TerminalSession(executablePath, cwd, arguments, + env ?: NeoTermPreference.buildEnvironment(cwd, systemShell, executablePath), + sessionCallback) mTerminalSessions.add(session) updateNotification() return session diff --git a/app/src/main/java/io/neoterm/view/ExtraKeysView.java b/app/src/main/java/io/neoterm/view/ExtraKeysView.java index 7934302..fb3d3a8 100755 --- a/app/src/main/java/io/neoterm/view/ExtraKeysView.java +++ b/app/src/main/java/io/neoterm/view/ExtraKeysView.java @@ -2,7 +2,6 @@ package io.neoterm.view; import android.content.Context; import android.util.AttributeSet; -import android.util.Log; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.KeyEvent; @@ -11,121 +10,67 @@ import android.widget.Button; import android.widget.GridLayout; import android.widget.ToggleButton; +import java.io.File; import java.util.ArrayList; import java.util.List; import io.neoterm.R; import io.neoterm.backend.TerminalSession; +import io.neoterm.customize.NeoTermPath; +import io.neoterm.customize.shortcut.ShortcutConfig; +import io.neoterm.customize.shortcut.ShortcutConfigParser; +import io.neoterm.preference.NeoTermPreference; +import io.neoterm.utils.FileUtils; +import io.neoterm.view.eks.ControlButton; +import io.neoterm.view.eks.ExtraButton; +import io.neoterm.view.eks.StatedControlButton; /** * A view showing extra keys (such as Escape, Ctrl, Alt) not normally available on an Android soft * keyboard. */ public final class ExtraKeysView extends GridLayout { - public static abstract class ExtraButton implements OnClickListener { - public String buttonText; + public static final String KEY_ESC = "Esc"; + public static final String KEY_TAB = "Tab"; + public static final String KEY_CTRL = "Ctrl"; - @Override - public abstract void onClick(View view); - } - - public static class ControlButton extends ExtraButton { - public ControlButton(String text) { - buttonText = text; - } - - @Override - public void onClick(View view) { - ExtraKeysView.sendKey(view, buttonText); - } - } - - public static class TextButton extends ExtraButton { - boolean withEnter = false; - - public TextButton(String text) { - this(text, false); - } - - public TextButton(String text, boolean withEnter) { - this.buttonText = text; - this.withEnter = withEnter; - } - - @Override - public void onClick(View view) { - ExtraKeysView.sendKey(view, buttonText); - if (withEnter) { - ExtraKeysView.sendKey(view, "\n"); - } - } - } - - public static class StatedControlButton extends ControlButton { - public ToggleButton toggleButton; - - public StatedControlButton(String text) { - super(text); - } - - @Override - public void onClick(View view) { - toggleButton.setChecked(toggleButton.isChecked()); - toggleButton.setTextColor(toggleButton.isChecked() ? 0xFF80DEEA : TEXT_COLOR); - } - - public boolean readState() { - if (toggleButton.isPressed()) return true; - boolean result = toggleButton.isChecked(); - if (result) { - toggleButton.setChecked(false); - toggleButton.setTextColor(TEXT_COLOR); - } - return result; - } - } - - public static final ControlButton ESC = new ControlButton("ESC"); - public static final ControlButton TAB = new ControlButton("TAB"); - public static final StatedControlButton CTRL = new StatedControlButton("CTRL"); - public static final StatedControlButton ALT = new StatedControlButton("ALT"); - public static final StatedControlButton FN = new StatedControlButton("FN"); + public static final ControlButton ESC = new ControlButton(KEY_ESC); + public static final ControlButton TAB = new ControlButton(KEY_TAB); + public static final StatedControlButton CTRL = new StatedControlButton(KEY_CTRL); public static final ControlButton ARROW_UP = new ControlButton("▲"); public static final ControlButton ARROW_DOWN = new ControlButton("▼"); public static final ControlButton ARROW_LEFT = new ControlButton("◀"); public static final ControlButton ARROW_RIGHT = new ControlButton("▶"); - public static final TextButton HORIZONTAL = new TextButton("-"); - public static final TextButton SLASH = new TextButton("/"); - public static final TextButton PIPE = new TextButton("|"); + public static final String DEFAULT_FILE_CONTENT = "version " + ShortcutConfigParser.PARSER_VERSION + "\n" + + "program default\n" + + "define - false\n" + + "define / false\n" + + "define | false\n"; - private static final int TEXT_COLOR = 0xFFFFFFFF; + public static final int NORMAL_TEXT_COLOR = 0xFFFFFFFF; - private List extraButtons; - private List externalButtons; + private List builtinExtraKeys; + private List userDefinedExtraKeys; public ExtraKeysView(Context context, AttributeSet attrs) { super(context, attrs); - try { - externalButtons = new ArrayList<>(3); - extraButtons = new ArrayList<>(); - resetExternalButtons(); - updateButtons(); - } catch (Throwable e) { - Log.e("NeoTerm", e.toString()); - throw e; - } + builtinExtraKeys = new ArrayList<>(7); + userDefinedExtraKeys = new ArrayList<>(7); + loadDefaultBuiltinExtraKeys(); + loadDefaultUserDefinedExtraKeys(); + updateButtons(); } public static void sendKey(View view, String keyName) { int keyCode = 0; String chars = null; switch (keyName) { - case "ESC": + case KEY_ESC: keyCode = KeyEvent.KEYCODE_ESCAPE; break; - case "TAB": + case KEY_TAB: keyCode = KeyEvent.KEYCODE_TAB; break; case "▲": @@ -162,89 +107,97 @@ public final class ExtraKeysView extends GridLayout { } public boolean readAltButton() { - return ALT.readState(); - } - - public boolean readFnButton() { - return FN.readState(); + return false; } public void addExternalButton(ExtraButton button) { - externalButtons.add(button); - } - - public void removeExternalButton(ExtraButton button) { - externalButtons.remove(button); + userDefinedExtraKeys.add(button); } public void clearExternalButton() { - externalButtons.clear(); + userDefinedExtraKeys.clear(); } - public void resetExternalButtons() { + public void loadDefaultUserDefinedExtraKeys() { + File defaultFile = new File(NeoTermPath.EKS_DEFAULT_FILE); + if (!defaultFile.exists()) { + generateDefaultFile(defaultFile); + } + clearExternalButton(); - externalButtons.add(ALT); - externalButtons.add(HORIZONTAL); - externalButtons.add(SLASH); - externalButtons.add(PIPE); + try { + ShortcutConfigParser parser = new ShortcutConfigParser(); + parser.setInput(defaultFile); + ShortcutConfig config = parser.parse(); + userDefinedExtraKeys.addAll(config.getShortcutKeys()); + } catch (Exception ignore) { + } } - void loadDefaultButtons(List buttons) { - buttons.add(ESC); - buttons.add(CTRL); - buttons.add(TAB); + private void generateDefaultFile(File defaultFile) { + FileUtils.INSTANCE.writeFile(defaultFile, DEFAULT_FILE_CONTENT.getBytes()); } - void loadExternalButtons(List buttons) { - buttons.addAll(externalButtons); + void loadDefaultBuiltinExtraKeys() { + builtinExtraKeys.clear(); + builtinExtraKeys.add(ESC); + builtinExtraKeys.add(CTRL); + builtinExtraKeys.add(TAB); + builtinExtraKeys.add(ARROW_LEFT); + builtinExtraKeys.add(ARROW_RIGHT); + builtinExtraKeys.add(ARROW_UP); + builtinExtraKeys.add(ARROW_DOWN); } public void updateButtons() { removeAllViews(); + List[] buttons = new List[]{userDefinedExtraKeys, builtinExtraKeys}; - extraButtons.clear(); - loadDefaultButtons(extraButtons); - loadExternalButtons(extraButtons); + setRowCount(buttons[0].size() == 0 ? 1 : 2); + setColumnCount(buttons[1].size()); - setRowCount(1); - setColumnCount(extraButtons.size()); + for (int row = 0; row < buttons.length; row++) { + for (int col = 0; col < buttons[row].size(); col++) { + final ExtraButton extraButton = (ExtraButton) buttons[row].get(col); - for (int col = 0; col < extraButtons.size(); col++) { - final ExtraButton extraButton = extraButtons.get(col); - - Button button; - if (extraButton instanceof StatedControlButton) { - StatedControlButton btn = ((StatedControlButton) extraButton); - button = btn.toggleButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); - button.setClickable(true); - } else { - button = new Button(getContext(), null, android.R.attr.buttonBarButtonStyle); - } - - button.setText(extraButton.buttonText); - button.setTextColor(TEXT_COLOR); - button.setAllCaps(false); - - final Button finalButton = button; - button.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - finalButton.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP); - View root = getRootView(); - extraButton.onClick(root); + Button button; + if (extraButton instanceof StatedControlButton) { + StatedControlButton btn = ((StatedControlButton) extraButton); + button = btn.toggleButton = new ToggleButton(getContext(), null, android.R.attr.buttonBarButtonStyle); + button.setClickable(true); + } else { + button = new Button(getContext(), null, android.R.attr.buttonBarButtonStyle); } - }); - LayoutParams param = new LayoutParams(); - param.height = param.width = 0; - param.rightMargin = param.topMargin = 0; - param.setGravity(Gravity.START); - float weight = "▲▼◀▶".contains(extraButton.buttonText) ? 0.7f : 1.f; - param.columnSpec = GridLayout.spec(col, GridLayout.FILL, weight); - param.rowSpec = GridLayout.spec(0, GridLayout.FILL, 1.f); - button.setLayoutParams(param); + button.setText(extraButton.buttonText); + button.setTextColor(NORMAL_TEXT_COLOR); + button.setAllCaps(false); - addView(button); + final Button finalButton = button; + button.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + finalButton.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP); + View root = getRootView(); + extraButton.onClick(root); + } + }); + + LayoutParams param = new LayoutParams(); + param.height = param.width = 0; + param.rightMargin = param.topMargin = 0; + param.setGravity(Gravity.START); + + float weight = 1.f; + if (NeoTermPreference.INSTANCE.loadBoolean(R.string.key_ui_wide_char_weigh_explicit, false)) { + weight = "▲▼◀▶".contains(extraButton.buttonText) ? 0.7f : 1.f; + } + param.columnSpec = GridLayout.spec(col, GridLayout.FILL, weight); + param.rowSpec = GridLayout.spec(row, GridLayout.FILL, 1.f); + button.setLayoutParams(param); + + addView(button); + } } } diff --git a/app/src/main/java/io/neoterm/view/eks/ControlButton.java b/app/src/main/java/io/neoterm/view/eks/ControlButton.java new file mode 100644 index 0000000..3bbf942 --- /dev/null +++ b/app/src/main/java/io/neoterm/view/eks/ControlButton.java @@ -0,0 +1,20 @@ +package io.neoterm.view.eks; + +import android.view.View; + +import io.neoterm.view.ExtraKeysView; + +/** + * @author kiva + */ + +public class ControlButton extends ExtraButton { + public ControlButton(String text) { + buttonText = text; + } + + @Override + public void onClick(View view) { + ExtraKeysView.sendKey(view, buttonText); + } +} diff --git a/app/src/main/java/io/neoterm/view/eks/ExtraButton.java b/app/src/main/java/io/neoterm/view/eks/ExtraButton.java new file mode 100644 index 0000000..d4ee466 --- /dev/null +++ b/app/src/main/java/io/neoterm/view/eks/ExtraButton.java @@ -0,0 +1,14 @@ +package io.neoterm.view.eks; + +import android.view.View; + +/** + * @author kiva + */ + +public abstract class ExtraButton implements View.OnClickListener { + public String buttonText; + + @Override + public abstract void onClick(View view); +} \ No newline at end of file diff --git a/app/src/main/java/io/neoterm/view/eks/StatedControlButton.java b/app/src/main/java/io/neoterm/view/eks/StatedControlButton.java new file mode 100644 index 0000000..cdbc411 --- /dev/null +++ b/app/src/main/java/io/neoterm/view/eks/StatedControlButton.java @@ -0,0 +1,34 @@ +package io.neoterm.view.eks; + +import android.view.View; +import android.widget.ToggleButton; + +import io.neoterm.view.ExtraKeysView; + +/** + * @author kiva + */ + +public class StatedControlButton extends ControlButton { + public ToggleButton toggleButton; + + public StatedControlButton(String text) { + super(text); + } + + @Override + public void onClick(View view) { + toggleButton.setChecked(toggleButton.isChecked()); + toggleButton.setTextColor(toggleButton.isChecked() ? 0xFF80DEEA : ExtraKeysView.NORMAL_TEXT_COLOR); + } + + public boolean readState() { + if (toggleButton.isPressed()) return true; + boolean result = toggleButton.isChecked(); + if (result) { + toggleButton.setChecked(false); + toggleButton.setTextColor(ExtraKeysView.NORMAL_TEXT_COLOR); + } + return result; + } +} diff --git a/app/src/main/java/io/neoterm/view/eks/TextButton.java b/app/src/main/java/io/neoterm/view/eks/TextButton.java new file mode 100644 index 0000000..e931f80 --- /dev/null +++ b/app/src/main/java/io/neoterm/view/eks/TextButton.java @@ -0,0 +1,30 @@ +package io.neoterm.view.eks; + +import android.view.View; + +import io.neoterm.view.ExtraKeysView; + +/** + * @author kiva + */ + +public class TextButton extends ExtraButton { + boolean withEnter = false; + + public TextButton(String text) { + this(text, false); + } + + public TextButton(String text, boolean withEnter) { + this.buttonText = text; + this.withEnter = withEnter; + } + + @Override + public void onClick(View view) { + ExtraKeysView.sendKey(view, buttonText); + if (withEnter) { + ExtraKeysView.sendKey(view, "\n"); + } + } +} diff --git a/app/src/main/java/io/neoterm/view/tab/TermTab.kt b/app/src/main/java/io/neoterm/view/tab/TermTab.kt index e1cc70c..0937020 100644 --- a/app/src/main/java/io/neoterm/view/tab/TermTab.kt +++ b/app/src/main/java/io/neoterm/view/tab/TermTab.kt @@ -41,6 +41,8 @@ class TermTab(title: CharSequence) : Tab(title) { toolbar?.title = title if (NeoTermPreference.loadBoolean(R.string.key_ui_suggestions, true)) { viewClient?.updateSuggestions(title) + } else { + viewClient?.removeSuggestions() } } diff --git a/app/src/main/java/io/neoterm/view/tab/TermViewClient.kt b/app/src/main/java/io/neoterm/view/tab/TermViewClient.kt index 802153e..4f9e0c7 100644 --- a/app/src/main/java/io/neoterm/view/tab/TermViewClient.kt +++ b/app/src/main/java/io/neoterm/view/tab/TermViewClient.kt @@ -110,11 +110,15 @@ class TermViewClient(val context: Context) : TerminalViewClient { } if (lastTitle != title || force) { - extraKeysView?.clearExternalButton() + removeSuggestions() ShortcutKeysManager.showShortcutKeys(title, extraKeysView) extraKeysView?.updateButtons() lastTitle = title } } + fun removeSuggestions() { + extraKeysView?.clearExternalButton() + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/term.xml b/app/src/main/res/layout/term.xml index 415e498..c4fad6b 100644 --- a/app/src/main/res/layout/term.xml +++ b/app/src/main/res/layout/term.xml @@ -17,7 +17,7 @@ android:id="@+id/extra_keys" style="?android:buttonBarStyle" android:layout_width="match_parent" - android:layout_height="36dp" + android:layout_height="@dimen/eks_height_two_line" android:layout_alignParentBottom="true" android:background="@color/terminal_background" android:orientation="horizontal" /> diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index ba1844e..584f7b5 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -22,6 +22,8 @@ 全屏 显示建议 (需要 oh-my-zsh) 使用一些软件时,屏幕下方显示快捷键 + 为宽字符设置权重 + 如果快捷输入栏显示不正确,请勾选本项 设置 更多 切换输入法 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index da62b5f..f268952 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,4 +2,6 @@ 180dp 16dp 16dp + 36dp + 72dp diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index d35adb6..ae487ec 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -10,6 +10,7 @@ neoterm_ui_color_scheme neoterm_ui_next_tab_anim neoterm_ui_suggestions + neoterm_ui_wide_char_explicit neoterm_package_source \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8dbee9a..8a424f2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,6 +28,8 @@ Switch to the next tab instead of the previous tab when closing tab Show Suggestions (oh-my-zsh required) When using some programs, show shortcut keys + Use explicit weight for wide char + If suggestion bar show incorrect, please enable this Source Toggle IME diff --git a/app/src/main/res/xml/settings_ui.xml b/app/src/main/res/xml/settings_ui.xml index e886e01..8f81c1a 100644 --- a/app/src/main/res/xml/settings_ui.xml +++ b/app/src/main/res/xml/settings_ui.xml @@ -18,6 +18,12 @@ android:summary="@string/pref_ui_suggestions_desc" android:title="@string/pref_ui_suggestions" /> + + diff --git a/build.gradle b/build.gradle index af7204d..08da148 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-alpha3' + classpath 'com.android.tools.build:gradle:3.0.0-alpha4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4f7af6d..aa3c5c5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jun 11 16:46:54 CST 2017 +#Fri Jun 16 12:14:31 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-rc-1-all.zip