<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.connectbot"
android:versionName="1.7.0-rc1"
- android:versionCode="302"
+ android:versionCode="306"
android:installLocation="auto">
<application
<activity android:name=".HelpTopicActivity" android:configChanges="keyboardHidden|orientation" />
<activity android:name=".ColorsActivity" android:configChanges="keyboardHidden|orientation" />
- <service android:name="org.connectbot.service.TerminalManager" android:configChanges="keyboardHidden|orientation" />
+ <service android:name="org.connectbot.service.TerminalManager"
+ android:configChanges="keyboardHidden|orientation"
+ android:description="@string/service_desc" />
<activity android:name=".ConsoleActivity" android:configChanges="keyboardHidden|orientation"
android:theme="@style/NoTitle" android:windowSoftInputMode="stateAlwaysVisible|adjustResize"
<Button
android:id="@+id/console_prompt_no"
- android:text="@string/no"
+ android:text="@string/button_no"
android:paddingTop="5dip"
android:paddingBottom="10dip"
android:paddingLeft="40dip"
<Button
android:id="@+id/console_prompt_yes"
- android:text="@string/yes"
+ android:text="@string/button_yes"
android:paddingTop="5dip"
android:paddingBottom="10dip"
android:paddingLeft="40dip"
</RelativeLayout>
- <ImageView
- android:id="@+id/keyboard_button"
- android:paddingRight="15dip"
- android:paddingBottom="15dip"
- android:layout_width="wrap_content"
+ <RelativeLayout
+ android:id="@+id/keyboard_group"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
- android:layout_alignParentRight="true"
- android:visibility="gone"
- android:src="@+drawable/keyboard_icon"
- />
+ android:padding="15dip"
+ android:visibility="gone">
+
+ <ImageView
+ android:id="@+id/button_keyboard"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:layout_alignParentRight="true"
+ android:src="@+drawable/button_keyboard"
+ />
+
+ <ImageView
+ android:id="@+id/button_ctrl"
+ android:paddingRight="15dip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentBottom="true"
+ android:src="@+drawable/button_ctrl"
+ />
+
+ <ImageView
+ android:id="@+id/button_esc"
+ android:paddingRight="15dip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@+id/button_ctrl"
+ android:layout_alignParentBottom="true"
+ android:src="@+drawable/button_esc"
+ />
+
+ </RelativeLayout>
</RelativeLayout>
<string name="pref_update_summary">最大頻率檢查ConnectBot更新</string>
<!-- Name for the preference that forces the service to stay running in the background.-->
- <string name="pref_conn_persist_title">持續連線</string>
+ <string name="pref_conn_persist_title">保持聯機</string>
<!-- Summary for the preference that forces the service to stay running in the background. -->
- <string name="pref_conn_persist_summary">å\9c¨è\83\8cæ\99¯å\9f·è¡\8cæ\99\82ä»\8då¼·å\88¶å\81\9cç\95\99å\9c¨é\80£ç·\9aç\8b\80æ\85\8b</string>
+ <string name="pref_conn_persist_summary">å¼·å\88¶ä¸¦ä¿\9dæ\8c\81é\80£æ\8e¥å\9c¨å¾\8cå\8f°</string>
<!-- Name for the keyboard shortcuts preference -->
<string name="pref_keymode_title">目錄快捷鍵</string>
<resources>
<string name="app_desc">Simple, powerful, open-source SSH client.</string>
+ <string name="service_desc">Maintains SSH connections and loaded pubkeys</string>
<!-- Window title for the Host List -->
<string name="title_hosts_list">Hosts</string>
<!-- Button that brings up the list of URLs on the current screen -->
<string name="console_menu_urlscan">URL Scan</string>
+ <!-- Button label to answer "Yes" to a yes/no prompt -->
+ <string name="button_yes">Yes</string>
+ <!-- Button label to answer "No" to a yes/no prompt -->
+ <string name="button_no">No</string>
+
<!-- Selection for a "local" port forward. E.g., connections to a port listening locally is forwarded to the remote end's listening port. -->
<string name="portforward_local">Local</string>
<!-- Selection for a "remote" port forward. E.g., connections to a port listening remotely is forwarded to the local end's listening port. -->
+++ /dev/null
-/* ByteCharset.java -- Abstract class for generic 1-byte encodings.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.java.nio.charset;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-
-/**
- * A generic encoding framework for single-byte encodings,
- * utilizing a look-up table.
- *
- * This replaces the gnu.java.io.EncoderEightBitLookup class,
- * created by Aron Renn.
- *
- * @author Sven de Marothy
- */
-abstract class ByteCharset extends Charset
-{
- protected char[] lookupTable;
- /**
- * Char to signify the character in the table is undefined
- */
- protected static final char NONE = (char)0xFFFD;
-
- ByteCharset (String canonicalName, String[] aliases)
- {
- super (canonicalName, aliases);
- }
-
- /**
- * Most western charsets include ASCII, but this should
- * be overloaded for others.
- */
- public boolean contains (Charset cs)
- {
-// return cs instanceof US_ASCII || (cs.getClass() == getClass());
- return cs.getClass() == cs.getClass();
- }
-
- char[] getLookupTable()
- {
- return lookupTable;
- }
-
- public CharsetDecoder newDecoder ()
- {
- return new Decoder (this);
- }
-
- public CharsetEncoder newEncoder ()
- {
- return new Encoder (this);
- }
-
- private static final class Decoder extends CharsetDecoder
- {
- private char[] lookup;
-
- // Package-private to avoid a trampoline constructor.
- Decoder (ByteCharset cs)
- {
- super (cs, 1.0f, 1.0f);
- lookup = cs.getLookupTable();
- }
-
- protected CoderResult decodeLoop (ByteBuffer in, CharBuffer out)
- {
- // TODO: Optimize this in the case in.hasArray() / out.hasArray()
- while (in.hasRemaining ())
- {
- byte b = in.get ();
- char c;
-
- if (!out.hasRemaining ())
- {
- in.position (in.position () - 1);
- return CoderResult.OVERFLOW;
- }
-
- if((c = lookup[(int) (b & 0xFF)]) == NONE);
- // return CoderResult.unmappableForLength (1);
- out.put (c);
- }
-
- return CoderResult.UNDERFLOW;
- }
- }
-
- private static final class Encoder extends CharsetEncoder
- {
- private byte[] lookup;
-
- // Package-private to avoid a trampoline constructor.
- Encoder (ByteCharset cs)
- {
- super (cs, 1.0f, 1.0f);
-
- char[] lookup_table = cs.getLookupTable();
-
- // Create the inverse look-up table.
- // determine required size of encoding_table:
- int max = 0;
- for (int i = 0; i < lookup_table.length; i++)
- {
- int c = (int)lookup_table[i];
- max = (c > max && c < NONE) ? c : max;
- }
-
- lookup = new byte[max+1];
-
- for (int i = 0; i < lookup_table.length; i++)
- {
- int c = (int)lookup_table[i];
- if (c != 0 && c < NONE)
- {
- lookup[c] = (byte)i;
- }
- }
- }
-
- protected CoderResult encodeLoop (CharBuffer in, ByteBuffer out)
- {
- // TODO: Optimize this in the case in.hasArray() / out.hasArray()
- while (in.hasRemaining ())
- {
- int c = (int)in.get ();
-
- if (!out.hasRemaining ())
- {
- in.position (in.position () - 1);
- return CoderResult.OVERFLOW;
- }
-
- // lookup byte encoding
- byte b = (c < lookup.length) ? lookup[c] : (byte)0;
-
- if ((int)b != 0 || (int)c == 0)
- {
- out.put (b);
- } else {
- in.position (in.position () - 1);
- return CoderResult.unmappableForLength (1);
- }
- }
-
- return CoderResult.UNDERFLOW;
- }
- }
-}
+++ /dev/null
-/* Cp437.java -- Charset implementation for the Cp437 character set.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.java.nio.charset;
-
-public class Cp437 extends ByteCharset
-{
- public static final String NAME = "CP437";
-
- /**
- * This is the lookup table for this encoding
- */
- private static final char[] lookup =
- {
- 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
- 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
- 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
- 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
- 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
- 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
- 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
- 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
- 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
- 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
- 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
- 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
- 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
- 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
- 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
- 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
- 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
- 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
- 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
- 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
- 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
- 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
- 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
- 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
- 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
- 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
- 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
- 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
- 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
- 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
- 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
- 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
- };
-
- public Cp437()
- {
- super("Cp437", new String[] {
- });
- lookupTable = lookup;
- }
-
-} // class Cp437
import org.connectbot.bean.SelectionArea;
import org.connectbot.service.PromptHelper;
import org.connectbot.service.TerminalBridge;
+import org.connectbot.service.TerminalKeyListener;
import org.connectbot.service.TerminalManager;
import org.connectbot.util.PreferenceConstants;
private Animation slide_left_in, slide_left_out, slide_right_in, slide_right_out, fade_stay_hidden, fade_out_delayed;
private Animation keyboard_fade_in, keyboard_fade_out;
- private ImageView keyboardButton;
private float lastX, lastY;
private InputMethodManager inputManager;
private Handler handler = new Handler();
+ private ImageView mKeyboardButton;
+
private ServiceConnection connection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
bound = ((TerminalManager.TerminalBinder) service).getService();
keyboard_fade_out = AnimationUtils.loadAnimation(this, R.anim.keyboard_fade_out);
inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- keyboardButton = (ImageView) findViewById(R.id.keyboard_button);
- keyboardButton.setOnClickListener(new OnClickListener() {
+
+ final RelativeLayout keyboardGroup = (RelativeLayout) findViewById(R.id.keyboard_group);
+
+ mKeyboardButton = (ImageView) findViewById(R.id.button_keyboard);
+ mKeyboardButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
View flip = findCurrentView(R.id.console_flip);
if (flip == null)
return;
inputManager.showSoftInput(flip, InputMethodManager.SHOW_FORCED);
- keyboardButton.setVisibility(View.GONE);
+ keyboardGroup.setVisibility(View.GONE);
+ }
+ });
+
+ final ImageView ctrlButton = (ImageView) findViewById(R.id.button_ctrl);
+ ctrlButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View view) {
+ View flip = findCurrentView(R.id.console_flip);
+ if (flip == null) return;
+ TerminalView terminal = (TerminalView)flip;
+
+ TerminalKeyListener handler = terminal.bridge.getKeyHandler();
+ handler.metaPress(TerminalKeyListener.META_CTRL_ON);
+
+ keyboardGroup.setVisibility(View.GONE);
+ }
+ });
+
+ final ImageView escButton = (ImageView) findViewById(R.id.button_esc);
+ escButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View view) {
+ View flip = findCurrentView(R.id.console_flip);
+ if (flip == null) return;
+ TerminalView terminal = (TerminalView)flip;
+
+ TerminalKeyListener handler = terminal.bridge.getKeyHandler();
+ handler.sendEscape();
+
+ keyboardGroup.setVisibility(View.GONE);
}
});
lastX = event.getX();
lastY = event.getY();
} else if (event.getAction() == MotionEvent.ACTION_UP
- && config.hardKeyboardHidden != Configuration.KEYBOARDHIDDEN_NO
- && keyboardButton.getVisibility() == View.GONE
+ && keyboardGroup.getVisibility() == View.GONE
&& event.getEventTime() - event.getDownTime() < CLICK_TIME
&& Math.abs(event.getX() - lastX) < MAX_CLICK_DISTANCE
&& Math.abs(event.getY() - lastY) < MAX_CLICK_DISTANCE) {
- keyboardButton.startAnimation(keyboard_fade_in);
- keyboardButton.setVisibility(View.VISIBLE);
+ keyboardGroup.startAnimation(keyboard_fade_in);
+ keyboardGroup.setVisibility(View.VISIBLE);
handler.postDelayed(new Runnable() {
public void run() {
- if (keyboardButton.getVisibility() == View.GONE)
+ if (keyboardGroup.getVisibility() == View.GONE)
return;
- keyboardButton.startAnimation(keyboard_fade_out);
- keyboardButton.setVisibility(View.GONE);
+ keyboardGroup.startAnimation(keyboard_fade_out);
+ keyboardGroup.setVisibility(View.GONE);
}
}, KEYBOARD_DISPLAY_TIME);
}
bound.setResizeAllowed(true);
bound.hardKeyboardHidden = (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES);
+
+ mKeyboardButton.setVisibility(bound.hardKeyboardHidden ? View.VISIBLE : View.GONE);
}
}
Log.d(TAG, String.format("Unlocked key '%s'", pubkey.getNickname()));
// save this key in memory
- bound.addKey(pubkey, trileadKey);
+ bound.addKey(pubkey, trileadKey, true);
updateHandler.sendEmptyMessage(-1);
}
@Override
public void showRunningNotification(Service context) {
-// context.startForeground(ONLINE_NOTIFICATION, newRunningNotification(context));
+ context.startForeground(ONLINE_NOTIFICATION, newRunningNotification(context));
}
@Override
public void hideRunningNotification(Service context) {
-// context.stopForeground(true);
+ context.stopForeground(true);
}
-
}
}
color = manager.hostdb.getColorsForScheme(HostDatabase.DEFAULT_COLOR_SCHEME);
}
- // This was taken from http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx
- private final static String urlRegex = "(?:(?:ht|f)tp(?:s?)\\:\\/\\/|~/|/)?(?:\\w+:\\w+@)?(?:(?:[-\\w]+\\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?::[\\d]{1,5})?(?:(?:(?:/(?:[-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|/)+|\\?|#)?(?:(?:\\?(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=(?:[-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)(?:&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=(?:[-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*(?:#(?:[-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?";
private static Pattern urlPattern = null;
/**
public List<String> scanForURLs() {
List<String> urls = new LinkedList<String>();
- if (urlPattern == null)
- urlPattern = Pattern.compile(urlRegex);
+ if (urlPattern == null) {
+ // based on http://www.ietf.org/rfc/rfc2396.txt
+ String scheme = "[A-Za-z][-+.0-9A-Za-z]*";
+ String unreserved = "[-._~0-9A-Za-z]";
+ String pctEncoded = "%[0-9A-Fa-f]{2}";
+ String subDelims = "[!$&'()*+,;=]";
+ String userinfo = "(?:" + unreserved + "|" + pctEncoded + "|" + subDelims + "|:)*";
+ String h16 = "[0-9A-Fa-f]{1,4}";
+ String decOctet = "(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])";
+ String ipv4address = decOctet + "\\." + decOctet + "\\." + decOctet + "\\." + decOctet;
+ String ls32 = "(?:" + h16 + ":" + h16 + "|" + ipv4address + ")";
+ String ipv6address = "(?:(?:" + h16 + "){6}" + ls32 + ")";
+ String ipvfuture = "v[0-9A-Fa-f]+.(?:" + unreserved + "|" + subDelims + "|:)+";
+ String ipLiteral = "\\[(?:" + ipv6address + "|" + ipvfuture + ")\\]";
+ String regName = "(?:" + unreserved + "|" + pctEncoded + "|" + subDelims + ")*";
+ String host = "(?:" + ipLiteral + "|" + ipv4address + "|" + regName + ")";
+ String port = "[0-9]*";
+ String authority = "(?:" + userinfo + "@)?" + host + "(?::" + port + ")?";
+ String pchar = "(?:" + unreserved + "|" + pctEncoded + "|" + subDelims + ")";
+ String segment = pchar + "*";
+ String pathAbempty = "(?:/" + segment + ")*";
+ String segmentNz = pchar + "+";
+ String pathAbsolute = "/(?:" + segmentNz + "(?:/" + segment + ")*)?";
+ String pathRootless = segmentNz + "(?:/" + segment + ")*";
+ String hierPart = "(?://" + authority + pathAbempty + "|" + pathAbsolute + "|" + pathRootless + ")";
+ String query = "(?:" + pchar + "|/|\\?)*";
+ String fragment = "(?:" + pchar + "|/|\\?)*";
+ String uriRegex = scheme + ":" + hierPart + "(?:" + query + ")?(?:#" + fragment + ")?";
+ urlPattern = Pattern.compile(uriRegex);
+ }
char[] visibleBuffer = new char[buffer.height * buffer.width];
for (int l = 0; l < buffer.height; l++)
}
} else {
if ((metaState & META_CTRL_ON) != 0) {
- ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
+ sendEscape();
metaState &= ~META_CTRL_ON;
} else
- metaState |= META_CTRL_ON;
+ metaPress(META_CTRL_ON);
}
bridge.redraw();
return false;
}
+ public void sendEscape() {
+ ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
+ }
/**
* @param key
*
* @param code
*/
- private void metaPress(int code) {
+ public void metaPress(int code) {
if ((metaState & (code << 1)) != 0) {
metaState &= ~(code << 1);
} else if ((metaState & code) != 0) {
pubkeydb = new PubkeyDatabase(this);
// load all marked pubkeys into memory
+ updateSavingKeys();
List<PubkeyBean> pubkeys = pubkeydb.getAllStartPubkeys();
for (PubkeyBean pubkey : pubkeys) {
connectivityManager = new ConnectivityReceiver(this, lockingWifi);
- updateSavingKeys();
}
private void updateSavingKeys() {
}
public void addKey(PubkeyBean pubkey, Object trileadKey) {
- if (!savingKeys)
+ addKey(pubkey, trileadKey, false);
+ }
+
+ public void addKey(PubkeyBean pubkey, Object trileadKey, boolean force) {
+ if (!savingKeys && !force)
return;
removeKey(pubkey.getNickname());
public class PreferenceConstants {
public static final boolean PRE_ECLAIR = (Integer.parseInt(Build.VERSION.SDK) <= 4);
public static final boolean PRE_FROYO = PRE_ECLAIR ? true :
- (Build.VERSION.SDK_INT <= 7);
+ (Integer.parseInt(Build.VERSION.SDK) <= 7);
public static final String MEMKEYS = "memkeys";
public static final String UPDATE = "update";