OSDN Git Service

Update to r512 froyo-x86 android-x86-2.2 android-x86-2.2-r2
authorKenny Root <kenny@the-b.org>
Wed, 11 Aug 2010 08:04:31 +0000 (16:04 +0800)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Wed, 11 Aug 2010 10:43:43 +0000 (18:43 +0800)
Add a description for the service

16 files changed:
AndroidManifest.xml
res/drawable/button_ctrl.png [new file with mode: 0644]
res/drawable/button_esc.png [new file with mode: 0644]
res/drawable/button_keyboard.png [moved from res/drawable/keyboard_icon.png with 100% similarity]
res/layout/act_console.xml
res/values-zh-rTW/strings.xml
res/values/strings.xml
src/gnu/java/nio/charset/ByteCharset.java [deleted file]
src/gnu/java/nio/charset/Cp437.java [deleted file]
src/org/connectbot/ConsoleActivity.java
src/org/connectbot/PubkeyListActivity.java
src/org/connectbot/service/ConnectionNotifier.java
src/org/connectbot/service/TerminalBridge.java
src/org/connectbot/service/TerminalKeyListener.java
src/org/connectbot/service/TerminalManager.java
src/org/connectbot/util/PreferenceConstants.java

index 21139ff..20b3bf8 100644 (file)
@@ -2,7 +2,7 @@
 <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
@@ -34,7 +34,9 @@
                <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"
diff --git a/res/drawable/button_ctrl.png b/res/drawable/button_ctrl.png
new file mode 100644 (file)
index 0000000..dc4d786
Binary files /dev/null and b/res/drawable/button_ctrl.png differ
diff --git a/res/drawable/button_esc.png b/res/drawable/button_esc.png
new file mode 100644 (file)
index 0000000..5f0cfc6
Binary files /dev/null and b/res/drawable/button_esc.png differ
index a3f2620..7d0cfee 100644 (file)
@@ -92,7 +92,7 @@
 
                <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>
index 083b85a..6bb40ca 100644 (file)
        <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>
index b649c0e..7868922 100644 (file)
@@ -20,6 +20,7 @@
 
 <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. -->
diff --git a/src/gnu/java/nio/charset/ByteCharset.java b/src/gnu/java/nio/charset/ByteCharset.java
deleted file mode 100644 (file)
index a7de91c..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/* 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;
-    }
-  }
-}
diff --git a/src/gnu/java/nio/charset/Cp437.java b/src/gnu/java/nio/charset/Cp437.java
deleted file mode 100644 (file)
index a2e8bbe..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* 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
index 0240131..3a67f86 100644 (file)
@@ -23,6 +23,7 @@ import java.util.List;
 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;
 
@@ -116,7 +117,6 @@ public class ConsoleActivity extends Activity {
        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;
@@ -130,6 +130,8 @@ public class ConsoleActivity extends Activity {
 
        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();
@@ -347,15 +349,46 @@ public class ConsoleActivity extends Activity {
                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);
                        }
                });
 
@@ -519,21 +552,20 @@ public class ConsoleActivity extends Activity {
                                        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);
                                }
@@ -1006,6 +1038,8 @@ public class ConsoleActivity extends Activity {
                                bound.setResizeAllowed(true);
 
                        bound.hardKeyboardHidden = (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES);
+
+                       mKeyboardButton.setVisibility(bound.hardKeyboardHidden ? View.VISIBLE : View.GONE);
                }
        }
 
index 9106e1a..3579980 100644 (file)
@@ -293,7 +293,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener {
                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);
        }
index a7e3f8b..679ed9e 100644 (file)
@@ -152,13 +152,12 @@ public abstract class ConnectionNotifier {
 
                @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);
                }
-
        }
 }
index e9e69ca..9da66f8 100644 (file)
@@ -915,8 +915,6 @@ public class TerminalBridge implements VDUDisplay {
                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;
 
        /**
@@ -925,8 +923,36 @@ public class TerminalBridge implements VDUDisplay {
        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++)
index deba880..e768134 100644 (file)
@@ -375,10 +375,10 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
                                        }
                                } 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();
@@ -402,6 +402,9 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
                return false;
        }
 
+       public void sendEscape() {
+               ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
+       }
 
        /**
         * @param key
@@ -453,7 +456,7 @@ public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceCha
         *
         * @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) {
index 521ce4b..d3316b4 100644 (file)
@@ -135,6 +135,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
                pubkeydb = new PubkeyDatabase(this);
 
                // load all marked pubkeys into memory
+               updateSavingKeys();
                List<PubkeyBean> pubkeys = pubkeydb.getAllStartPubkeys();
 
                for (PubkeyBean pubkey : pubkeys) {
@@ -162,7 +163,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
 
                connectivityManager = new ConnectivityReceiver(this, lockingWifi);
 
-               updateSavingKeys();
        }
 
        private void updateSavingKeys() {
@@ -364,7 +364,11 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
        }
 
        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());
index 37e1871..9e37017 100644 (file)
@@ -26,7 +26,7 @@ import android.os.Build;
 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";