aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTorne Wuff <torne@wolfpuppy.org.uk>2013-09-30 23:40:26 +0100
committerTorne Wuff <torne@wolfpuppy.org.uk>2013-09-30 23:40:26 +0100
commitb06bdfb83db5900a276a1dc5a4f9957bdf4ff9c0 (patch)
treeafd15e77dee33fddf2d3df7aefbb171f968bd9e5
parent05bbc915058d85a4f1f0ef46d41ec40ed646152b (diff)
downloadconnectbot-b06bdfb83db5900a276a1dc5a4f9957bdf4ff9c0.tar.gz
connectbot-b06bdfb83db5900a276a1dc5a4f9957bdf4ff9c0.tar.bz2
connectbot-b06bdfb83db5900a276a1dc5a4f9957bdf4ff9c0.zip
Hopefully fix the majority of keyboard issues.
It seems that the majority of keyboard issues were caused by quirks implemented for the convenience of the HTC Dream (shift+numbers generating function keys on the hardware keyboard and ctrl+numbers generating function keys on the software keyboard). Turn these into settings, which are disabled by default unless the device is indeed a HTC Dream. Also, add a setting (defaulting to on) which determines whether the volume keys change the font size. Disabling this restores normal volume control functionality.
-rw-r--r--res/values/strings.xml15
-rw-r--r--res/xml/preferences.xml21
-rw-r--r--src/org/connectbot/HostListActivity.java14
-rw-r--r--src/org/connectbot/service/TerminalKeyListener.java26
-rw-r--r--src/org/connectbot/util/PreferenceConstants.java4
5 files changed, 72 insertions, 8 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1392622..f8f8f89 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -158,6 +158,21 @@
<!-- Summary for the full screen preference -->
<string name="pref_fullscreen_summary">"Hide status bar while in console"</string>
+ <!-- Name for the shifted numbers are f-keys preference -->
+ <string name="pref_shiftfkeys_title">"Shift+num are F-keys"</string>
+ <!-- Summary for the shifted numbers are f-keys preference -->
+ <string name="pref_shiftfkeys_summary">"On hardware keyboards, number keys send F1-F10 with shift"</string>
+
+ <!-- Name for the ctrl'ed numbers are f-keys preference -->
+ <string name="pref_ctrlfkeys_title">"Ctrl+num are F-keys"</string>
+ <!-- Summary for the ctrl'ed numbers are f-keys preference -->
+ <string name="pref_ctrlfkeys_summary">"On software keyboards, number keys send F1-F10 with ctrl"</string>
+
+ <!-- Name for the volume keys control font size preference -->
+ <string name="pref_volumefont_title">"Volume keys change font size"</string>
+ <!-- Summary for the volume keys control font size preference -->
+ <string name="pref_volumefont_summary">"Font size can also be changed in per-host settings"</string>
+
<!-- Name for the memorize keys preference -->
<string name="pref_memkeys_title">"Remember keys in memory"</string>
<!-- Summary for the memorize keys preference -->
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 8726ea4..5fb836b 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -84,6 +84,27 @@
android:defaultValue="false"
/>
+ <CheckBoxPreference
+ android:key="shiftfkeys"
+ android:title="@string/pref_shiftfkeys_title"
+ android:summary="@string/pref_shiftfkeys_summary"
+ android:defaultValue="false"
+ />
+
+ <CheckBoxPreference
+ android:key="ctrlfkeys"
+ android:title="@string/pref_ctrlfkeys_title"
+ android:summary="@string/pref_ctrlfkeys_summary"
+ android:defaultValue="false"
+ />
+
+ <CheckBoxPreference
+ android:key="volumefont"
+ android:title="@string/pref_volumefont_title"
+ android:summary="@string/pref_volumefont_summary"
+ android:defaultValue="true"
+ />
+
<ListPreference
android:key="keymode"
android:title="@string/pref_keymode_title"
diff --git a/src/org/connectbot/HostListActivity.java b/src/org/connectbot/HostListActivity.java
index 052f139..5fa09a9 100644
--- a/src/org/connectbot/HostListActivity.java
+++ b/src/org/connectbot/HostListActivity.java
@@ -39,6 +39,7 @@ import android.content.Intent.ShortcutIconResource;
import android.content.SharedPreferences.Editor;
import android.content.res.ColorStateList;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -160,9 +161,20 @@ public class HostListActivity extends ListActivity {
getResources().getText(R.string.app_name),
getResources().getText(R.string.title_hosts_list)));
- // check for eula agreement
this.prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ // detect HTC Dream and apply special preferences
+ if (Build.MANUFACTURER.equals("HTC") && Build.DEVICE.equals("dream")) {
+ if (!prefs.contains(PreferenceConstants.SHIFT_FKEYS) &&
+ !prefs.contains(PreferenceConstants.CTRL_FKEYS)) {
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(PreferenceConstants.SHIFT_FKEYS, true);
+ editor.putBoolean(PreferenceConstants.CTRL_FKEYS, true);
+ editor.commit();
+ }
+ }
+
+ // check for eula agreement
boolean agreed = prefs.getBoolean(PreferenceConstants.EULA, false);
if(!agreed) {
this.startActivityForResult(new Intent(this, WizardActivity.class), REQUEST_EULA);
diff --git a/src/org/connectbot/service/TerminalKeyListener.java b/src/org/connectbot/service/TerminalKeyListener.java
index 656b737..3f82259 100644
--- a/src/org/connectbot/service/TerminalKeyListener.java
+++ b/src/org/connectbot/service/TerminalKeyListener.java
@@ -74,6 +74,9 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
private String keymode = null;
private final boolean deviceHasHardKeyboard;
+ private boolean shiftedNumbersAreFKeysOnHardKeyboard;
+ private boolean controlNumbersAreFKeysOnSoftKeyboard;
+ private boolean volumeKeysChangeFontSize;
private int ourMetaState = 0;
@@ -106,7 +109,7 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
deviceHasHardKeyboard = (manager.res.getConfiguration().keyboard
== Configuration.KEYBOARD_QWERTY);
- updateKeymode();
+ updatePrefs();
}
/**
@@ -125,9 +128,10 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
PreferenceConstants.KEYMODE_RIGHT.equals(keymode);
final boolean leftModifiersAreSlashAndTab = interpretAsHardKeyboard &&
PreferenceConstants.KEYMODE_LEFT.equals(keymode);
- final boolean volumeKeysChangeFontSize = true;
- final boolean shiftedNumbersAreFKeys = interpretAsHardKeyboard;
- final boolean controlNumbersAreFKeys = !interpretAsHardKeyboard;
+ final boolean shiftedNumbersAreFKeys = shiftedNumbersAreFKeysOnHardKeyboard &&
+ interpretAsHardKeyboard;
+ final boolean controlNumbersAreFKeys = controlNumbersAreFKeysOnSoftKeyboard &&
+ !interpretAsHardKeyboard;
// Ignore all key-up events except for the special keys
if (event.getAction() == KeyEvent.ACTION_UP) {
@@ -525,13 +529,21 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
- if (PreferenceConstants.KEYMODE.equals(key)) {
- updateKeymode();
+ if (PreferenceConstants.KEYMODE.equals(key) ||
+ PreferenceConstants.SHIFT_FKEYS.equals(key) ||
+ PreferenceConstants.CTRL_FKEYS.equals(key) ||
+ PreferenceConstants.VOLUME_FONT.equals(key)) {
+ updatePrefs();
}
}
- private void updateKeymode() {
+ private void updatePrefs() {
keymode = prefs.getString(PreferenceConstants.KEYMODE, PreferenceConstants.KEYMODE_RIGHT);
+ shiftedNumbersAreFKeysOnHardKeyboard =
+ prefs.getBoolean(PreferenceConstants.SHIFT_FKEYS, false);
+ controlNumbersAreFKeysOnSoftKeyboard =
+ prefs.getBoolean(PreferenceConstants.CTRL_FKEYS, false);
+ volumeKeysChangeFontSize = prefs.getBoolean(PreferenceConstants.VOLUME_FONT, true);
}
public void setCharset(String encoding) {
diff --git a/src/org/connectbot/util/PreferenceConstants.java b/src/org/connectbot/util/PreferenceConstants.java
index 2ff8dd4..e9fb06c 100644
--- a/src/org/connectbot/util/PreferenceConstants.java
+++ b/src/org/connectbot/util/PreferenceConstants.java
@@ -81,6 +81,10 @@ public class PreferenceConstants {
public static final String CONNECTION_PERSIST = "connPersist";
+ public static final String SHIFT_FKEYS = "shiftfkeys";
+ public static final String CTRL_FKEYS = "ctrlfkeys";
+ public static final String VOLUME_FONT = "volumefont";
+
/* Backup identifiers */
public static final String BACKUP_PREF_KEY = "prefs";
}