Feature: Add more extra keys

Feature: Quit button in notification
Feature: Support for choose program location when a program is found in both /system and NeoTerm
This commit is contained in:
zt515
2017-06-23 00:00:26 +08:00
parent ad9f63b7e7
commit 57f3345d1e
9 changed files with 120 additions and 13 deletions

View File

@ -19,6 +19,10 @@ object NeoPreference {
const val KEY_FONT_SIZE = "neoterm_general_font_size" const val KEY_FONT_SIZE = "neoterm_general_font_size"
const val KEY_CURRENT_SESSION = "neoterm_service_current_session" const val KEY_CURRENT_SESSION = "neoterm_service_current_session"
const val VALUE_NEOTERM_ONLY = "NeoTermOnly"
const val VALUE_NEOTERM_FIRST = "NeoTermFirst"
const val VALUE_SYSTEM_FIRST = "SystemFirst"
var preference: SharedPreferences? = null var preference: SharedPreferences? = null
var context: Context? = null var context: Context? = null
@ -114,11 +118,10 @@ object NeoPreference {
return arrayOf(termEnv, homeEnv, androidRootEnv, androidDataEnv, externalStorageEnv, pathEnv) return arrayOf(termEnv, homeEnv, androidRootEnv, androidDataEnv, externalStorageEnv, pathEnv)
} else { } else {
val ps1Env = "PS1=$ " val ps1Env = "PS1=$ "
val ldEnv = "LD_LIBRARY_PATH=${NeoTermPath.USR_PATH}/lib"
val langEnv = "LANG=en_US.UTF-8" val langEnv = "LANG=en_US.UTF-8"
val pathEnv = "PATH=${NeoTermPath.USR_PATH}/bin:${NeoTermPath.USR_PATH}/bin/applets" val pathEnv = "PATH=" + buildPathEnv()
val ldEnv = "LD_LIBRARY_PATH=" + buildLdLibraryEnv()
val pwdEnv = "PWD=" + cwd val pwdEnv = "PWD=" + cwd
val tmpdirEnv = "TMPDIR=${NeoTermPath.USR_PATH}/tmp" val tmpdirEnv = "TMPDIR=${NeoTermPath.USR_PATH}/tmp"
@ -126,6 +129,39 @@ object NeoPreference {
} }
} }
private fun buildLdLibraryEnv(): String {
val builder = StringBuilder("${NeoTermPath.USR_PATH}/lib")
val programSelection = NeoPreference.loadString(R.string.key_general_program_selection, VALUE_NEOTERM_ONLY)
val systemPath = System.getenv("LD_LIBRARY_PATH")
if (programSelection != VALUE_NEOTERM_ONLY) {
builder.append(":$systemPath")
}
return builder.toString()
}
private fun buildPathEnv(): String {
val builder = StringBuilder()
val programSelection = NeoPreference.loadString(R.string.key_general_program_selection, VALUE_NEOTERM_ONLY)
val basePath = "${NeoTermPath.USR_PATH}/bin:${NeoTermPath.USR_PATH}/bin/applets"
val systemPath = System.getenv("PATH")
when (programSelection) {
VALUE_NEOTERM_ONLY -> {
builder.append(basePath)
}
VALUE_NEOTERM_FIRST -> {
builder.append("$basePath:$systemPath")
}
VALUE_SYSTEM_FIRST -> {
builder.append("$systemPath:$basePath")
}
}
return builder.toString()
}
/** /**
* TODO * TODO
* To print the job name about to be executed in bash: * To print the job name about to be executed in bash:

View File

@ -132,6 +132,10 @@ class NeoTermService : Service() {
builder.setOngoing(true) builder.setOngoing(true)
builder.setShowWhen(false) builder.setShowWhen(false)
builder.setColor(0xFF000000.toInt()) builder.setColor(0xFF000000.toInt())
val exitIntent = Intent(this, NeoTermService::class.java).setAction(ACTION_SERVICE_STOP)
builder.addAction(android.R.drawable.ic_delete, "Exit", PendingIntent.getService(this, 0, exitIntent, 0))
return builder.build() return builder.build()
} }

View File

@ -24,8 +24,16 @@ import io.neoterm.view.eks.ControlButton;
import io.neoterm.view.eks.ExtraButton; import io.neoterm.view.eks.ExtraButton;
import io.neoterm.view.eks.StatedControlButton; import io.neoterm.view.eks.StatedControlButton;
import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_DOWN;
import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_LEFT;
import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_RIGHT;
import static io.neoterm.view.eks.ExtraButton.KEY_ARROW_UP;
import static io.neoterm.view.eks.ExtraButton.KEY_CTRL; import static io.neoterm.view.eks.ExtraButton.KEY_CTRL;
import static io.neoterm.view.eks.ExtraButton.KEY_END;
import static io.neoterm.view.eks.ExtraButton.KEY_ESC; import static io.neoterm.view.eks.ExtraButton.KEY_ESC;
import static io.neoterm.view.eks.ExtraButton.KEY_HOME;
import static io.neoterm.view.eks.ExtraButton.KEY_PAGE_DOWN;
import static io.neoterm.view.eks.ExtraButton.KEY_PAGE_UP;
import static io.neoterm.view.eks.ExtraButton.KEY_TAB; import static io.neoterm.view.eks.ExtraButton.KEY_TAB;
/** /**
@ -34,14 +42,17 @@ import static io.neoterm.view.eks.ExtraButton.KEY_TAB;
*/ */
public final class ExtraKeysView extends LinearLayout { public final class ExtraKeysView extends LinearLayout {
public static final StatedControlButton CTRL = new StatedControlButton(KEY_CTRL);
public static final ControlButton ESC = new ControlButton(KEY_ESC); public static final ControlButton ESC = new ControlButton(KEY_ESC);
public static final ControlButton TAB = new ControlButton(KEY_TAB); public static final ControlButton TAB = new ControlButton(KEY_TAB);
public static final StatedControlButton CTRL = new StatedControlButton(KEY_CTRL); public static final ControlButton PAGE_UP = new ControlButton(KEY_PAGE_UP);
public static final ControlButton PAGE_DOWN = new ControlButton(KEY_PAGE_DOWN);
public static final ControlButton ARROW_UP = new ControlButton(""); public static final ControlButton HOME = new ControlButton(KEY_HOME);
public static final ControlButton ARROW_DOWN = new ControlButton(""); public static final ControlButton END = new ControlButton(KEY_END);
public static final ControlButton ARROW_LEFT = new ControlButton(""); public static final ControlButton ARROW_UP = new ControlButton(KEY_ARROW_UP);
public static final ControlButton ARROW_RIGHT = new ControlButton(""); public static final ControlButton ARROW_DOWN = new ControlButton(KEY_ARROW_DOWN);
public static final ControlButton ARROW_LEFT = new ControlButton(KEY_ARROW_LEFT);
public static final ControlButton ARROW_RIGHT = new ControlButton(KEY_ARROW_RIGHT);
public static final String DEFAULT_FILE_CONTENT = "version " + ShortcutConfigParser.PARSER_VERSION + "\n" + public static final String DEFAULT_FILE_CONTENT = "version " + ShortcutConfigParser.PARSER_VERSION + "\n" +
"program default\n" + "program default\n" +
@ -143,6 +154,10 @@ public final class ExtraKeysView extends LinearLayout {
builtinExtraKeys.add(ARROW_DOWN); builtinExtraKeys.add(ARROW_DOWN);
builtinExtraKeys.add(ARROW_LEFT); builtinExtraKeys.add(ARROW_LEFT);
builtinExtraKeys.add(ARROW_RIGHT); builtinExtraKeys.add(ARROW_RIGHT);
builtinExtraKeys.add(HOME);
builtinExtraKeys.add(END);
builtinExtraKeys.add(PAGE_UP);
builtinExtraKeys.add(PAGE_DOWN);
} }
public void updateButtons() { public void updateButtons() {

View File

@ -259,6 +259,7 @@ public final class TerminalView extends View {
@Override @Override
public boolean commitText(CharSequence text, int newCursorPosition) { public boolean commitText(CharSequence text, int newCursorPosition) {
// TODO: AutoComplete
if (LOG_KEY_EVENTS) { if (LOG_KEY_EVENTS) {
Log.i(EmulatorDebug.LOG_TAG, "IME: commitText(\"" + text + "\", " + newCursorPosition + ")"); Log.i(EmulatorDebug.LOG_TAG, "IME: commitText(\"" + text + "\", " + newCursorPosition + ")");
} }

View File

@ -15,6 +15,14 @@ public abstract class ExtraButton implements View.OnClickListener {
public static final String KEY_ESC = "Esc"; public static final String KEY_ESC = "Esc";
public static final String KEY_TAB = "Tab"; public static final String KEY_TAB = "Tab";
public static final String KEY_CTRL = "Ctrl"; public static final String KEY_CTRL = "Ctrl";
public static final String KEY_PAGE_UP = "PgUp";
public static final String KEY_PAGE_DOWN = "PgDn";
public static final String KEY_HOME = "Home";
public static final String KEY_END = "End";
public static final String KEY_ARROW_UP = "";
public static final String KEY_ARROW_DOWN = "";
public static final String KEY_ARROW_LEFT = "";
public static final String KEY_ARROW_RIGHT = "";
public String buttonText; public String buttonText;
@ -31,18 +39,30 @@ public abstract class ExtraButton implements View.OnClickListener {
case KEY_TAB: case KEY_TAB:
keyCode = KeyEvent.KEYCODE_TAB; keyCode = KeyEvent.KEYCODE_TAB;
break; break;
case "": case KEY_ARROW_UP:
keyCode = KeyEvent.KEYCODE_DPAD_UP; keyCode = KeyEvent.KEYCODE_DPAD_UP;
break; break;
case "": case KEY_ARROW_LEFT:
keyCode = KeyEvent.KEYCODE_DPAD_LEFT; keyCode = KeyEvent.KEYCODE_DPAD_LEFT;
break; break;
case "": case KEY_ARROW_RIGHT:
keyCode = KeyEvent.KEYCODE_DPAD_RIGHT; keyCode = KeyEvent.KEYCODE_DPAD_RIGHT;
break; break;
case "": case KEY_ARROW_DOWN:
keyCode = KeyEvent.KEYCODE_DPAD_DOWN; keyCode = KeyEvent.KEYCODE_DPAD_DOWN;
break; break;
case KEY_PAGE_UP:
keyCode = KeyEvent.KEYCODE_PAGE_UP;
break;
case KEY_PAGE_DOWN:
keyCode = KeyEvent.KEYCODE_PAGE_DOWN;
break;
case KEY_HOME:
keyCode = KeyEvent.KEYCODE_MOVE_HOME;
break;
case KEY_END:
keyCode = KeyEvent.KEYCODE_MOVE_END;
break;
case "": case "":
chars = "-"; chars = "-";
break; break;

View File

@ -14,6 +14,8 @@
<string name="pref_general_shell_desc">登录时使用指定的 Shell</string> <string name="pref_general_shell_desc">登录时使用指定的 Shell</string>
<string name="pref_general_vibrate">振动</string> <string name="pref_general_vibrate">振动</string>
<string name="pref_general_vibrate_desc">收到 \'\\a\' 时振动</string> <string name="pref_general_vibrate_desc">收到 \'\\a\' 时振动</string>
<string name="pref_general_program_selection">程序选择模式</string>
<string name="pref_general_program_selection_desc">当 NeoTerm 和 系统 中都含有同一个程序时,选择将要被执行的程序的模式</string>
<string name="pref_package_source">软件源</string> <string name="pref_package_source">软件源</string>
<string name="pref_ui_close_tab_anim_next_tab">向下切换窗口</string> <string name="pref_ui_close_tab_anim_next_tab">向下切换窗口</string>
<string name="pref_ui_close_tab_anim_next_tab_desc">关闭当前窗口时切换到下一个窗口而不是上一个</string> <string name="pref_ui_close_tab_anim_next_tab_desc">关闭当前窗口时切换到下一个窗口而不是上一个</string>
@ -40,4 +42,10 @@
<string name="use_system_shell">使用系统Shell</string> <string name="use_system_shell">使用系统Shell</string>
<string name="retry">重试</string> <string name="retry">重试</string>
<string name="source_changed">APT 源已更改,你可能需要执行 apt update 来更新</string> <string name="source_changed">APT 源已更改,你可能需要执行 apt update 来更新</string>
<string-array name="pref_general_program_selection_entries">
<item>只使用 NeoTerm</item>
<item>优先使用 NeoTerm</item>
<item>优先使用 System</item>
</string-array>
</resources> </resources>

View File

@ -4,6 +4,7 @@
<string name="key_general_vibrate" translatable="false">neoterm_general_vibrate</string> <string name="key_general_vibrate" translatable="false">neoterm_general_vibrate</string>
<string name="key_generaL_backspace_map_to_esc" translatable="false">neoterm_general_backspace_map_to_esc</string> <string name="key_generaL_backspace_map_to_esc" translatable="false">neoterm_general_backspace_map_to_esc</string>
<string name="key_general_shell" translatable="false">neoterm_general_shell</string> <string name="key_general_shell" translatable="false">neoterm_general_shell</string>
<string name="key_general_program_selection" translatable="false">neoterm_general_program_selection</string>
<string name="key_ui_fullscreen" translatable="false">neoterm_ui_fullscreen</string> <string name="key_ui_fullscreen" translatable="false">neoterm_ui_fullscreen</string>
<string name="key_ui_hide_toolbar" translatable="false">neoterm_ui_hide_toolbar</string> <string name="key_ui_hide_toolbar" translatable="false">neoterm_ui_hide_toolbar</string>

View File

@ -24,6 +24,8 @@
<string name="pref_general_backspace_map_to_esc_desc">Send esc when backspace is pressed</string> <string name="pref_general_backspace_map_to_esc_desc">Send esc when backspace is pressed</string>
<string name="pref_general_shell" translatable="false">Shell</string> <string name="pref_general_shell" translatable="false">Shell</string>
<string name="pref_general_shell_desc">Which shell should we use when login</string> <string name="pref_general_shell_desc">Which shell should we use when login</string>
<string name="pref_general_program_selection">Program Selection</string>
<string name="pref_general_program_selection_desc">When both Neo Term and your Android OS have a program, which one should we choose?</string>
<string name="pref_ui_fullscreen">Full Screen</string> <string name="pref_ui_fullscreen">Full Screen</string>
<string name="pref_ui_hide_toolbar">Hide Toolbar</string> <string name="pref_ui_hide_toolbar">Hide Toolbar</string>
<string name="pref_ui_hide_toolbar_desc">Hide toolbar when keyboard is showing</string> <string name="pref_ui_hide_toolbar_desc">Hide toolbar when keyboard is showing</string>
@ -56,4 +58,16 @@
<item>fish</item> <item>fish</item>
</string-array> </string-array>
<string-array name="pref_general_program_selection_values" translatable="false">
<item>NeoTermOnly</item>
<item>NeoTermFirst</item>
<item>SystemFirst</item>
</string-array>
<string-array name="pref_general_program_selection_entries">
<item>NeoTerm Only</item>
<item>NeoTerm First</item>
<item>System First</item>
</string-array>
</resources> </resources>

View File

@ -18,6 +18,14 @@
android:summary="@string/pref_general_backspace_map_to_esc_desc" android:summary="@string/pref_general_backspace_map_to_esc_desc"
android:title="@string/pref_general_backspace_map_to_esc" /> android:title="@string/pref_general_backspace_map_to_esc" />
<ListPreference
android:defaultValue="NeoTermOnly"
android:key="@string/key_general_program_selection"
android:title="@string/pref_general_program_selection"
android:summary="@string/pref_general_program_selection_desc"
android:entries="@array/pref_general_program_selection_entries"
android:entryValues="@array/pref_general_program_selection_values"/>
<ListPreference <ListPreference
android:defaultValue="sh" android:defaultValue="sh"
android:entries="@array/pref_general_shell_entries" android:entries="@array/pref_general_shell_entries"