OSDN Git Service

Update to r505
authorKenny Root <kenny@the-b.org>
Wed, 7 Jul 2010 08:56:45 +0000 (16:56 +0800)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Wed, 7 Jul 2010 08:56:45 +0000 (16:56 +0800)
Refactor the way connection notification works

60 files changed:
AndroidManifest.xml
res/values-af/strings.xml [new file with mode: 0644]
res/values-be/strings.xml [new file with mode: 0644]
res/values-bg/strings.xml
res/values-ca/strings.xml
res/values-cs/strings.xml
res/values-da/strings.xml
res/values-de/strings.xml
res/values-es/strings.xml
res/values-eu/strings.xml
res/values-fi/strings.xml
res/values-fr/strings.xml
res/values-gl/strings.xml
res/values-hu/strings.xml
res/values-id/strings.xml
res/values-it/strings.xml
res/values-ja/strings.xml
res/values-ko/strings.xml [new file with mode: 0644]
res/values-lt/strings.xml
res/values-nb/strings.xml
res/values-nl/strings.xml
res/values-oc/strings.xml [new file with mode: 0644]
res/values-pl/strings.xml
res/values-pt-rBR/strings.xml
res/values-pt/strings.xml
res/values-ru/strings.xml
res/values-sk/strings.xml
res/values-sl/strings.xml [new file with mode: 0644]
res/values-sv/strings.xml
res/values-tr/strings.xml
res/values-uk/strings.xml [new file with mode: 0644]
res/values-vi/strings.xml
res/values-zh-rCN/strings.xml
res/values-zh-rTW/strings.xml
res/values/arrays.xml
res/values/strings.xml
src/org/connectbot/ConsoleActivity.java
src/org/connectbot/GeneratePubkeyActivity.java
src/org/connectbot/HostEditorActivity.java
src/org/connectbot/HostListActivity.java
src/org/connectbot/PortForwardListActivity.java
src/org/connectbot/PubkeyListActivity.java
src/org/connectbot/TerminalView.java
src/org/connectbot/WizardActivity.java
src/org/connectbot/service/BackupAgent.java [new file with mode: 0644]
src/org/connectbot/service/BackupWrapper.java [new file with mode: 0644]
src/org/connectbot/service/ConnectionNotifier.java
src/org/connectbot/service/ConnectivityReceiver.java [new file with mode: 0644]
src/org/connectbot/service/PromptHelper.java
src/org/connectbot/service/TerminalBridge.java
src/org/connectbot/service/TerminalKeyListener.java [new file with mode: 0644]
src/org/connectbot/service/TerminalManager.java
src/org/connectbot/transport/AbsTransport.java
src/org/connectbot/transport/Local.java
src/org/connectbot/transport/SSH.java
src/org/connectbot/transport/Telnet.java
src/org/connectbot/util/HostDatabase.java
src/org/connectbot/util/OnDbWrittenListener.java [new file with mode: 0644]
src/org/connectbot/util/PreferenceConstants.java
src/org/connectbot/util/UberColorPickerDialog.java

index 803e2a4..21139ff 100644 (file)
@@ -1,13 +1,17 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="org.connectbot"
-       android:versionName="1.7-dev"
-       android:versionCode="259">
+       android:versionName="1.7.0-rc1"
+       android:versionCode="302"
+       android:installLocation="auto">
 
        <application
                android:icon="@drawable/icon"
                android:label="@string/app_name"
-               android:description="@string/app_desc">
+               android:description="@string/app_desc"
+               android:allowBackup="true"
+               android:backupAgent=".service.BackupAgent"
+               android:killAfterRestore="true">
 
                <activity android:name=".HostListActivity" >
                        <intent-filter>
@@ -50,7 +54,7 @@
 
        </application>
 
-       <uses-sdk android:targetSdkVersion="6" android:minSdkVersion="3" />
+       <uses-sdk android:targetSdkVersion="8" android:minSdkVersion="3" />
 
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.VIBRATE" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
new file mode 100644 (file)
index 0000000..24b2556
--- /dev/null
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2007 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+       <string name="app_desc">Simple, powerful, open-source SSH client.</string>
+
+       <!-- Window title for the Host List -->
+       <string name="title_hosts_list">Gashere</string>
+       <!-- Window title for the Pubkeys List -->
+       <string name="title_pubkey_list">Publieke Sleutels</string>
+       <!-- Window title for the Port Forwards List -->
+       <string name="title_port_forwards_list">Poort aansturings</string>
+       <!-- Window title when editing host details -->
+       <string name="title_host_editor">Redigeer Gasheer</string>
+       <!-- Window title for Help index -->
+       <string name="title_help">Hulp</string>
+       <!-- Window title for color list editing screen -->
+       <string name="title_colors">Kleure</string>
+
+       <string name="resolve_connect">Verbind</string>
+       <!-- Menu selection where user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="resolve_entropy">Gather Entropy</string>
+
+       <string name="menu_insert">Voeg Gasheer by</string>
+       <string name="menu_delete">Verwyder Gasheer</string>
+       <string name="menu_preferences">Voorkeure</string>
+
+       <string name="help_intro">Please select a topic below for more information on a particular subject.</string>
+       <string name="help_about">Aangaande ConnectBot</string>
+       <string name="help_keyboard">Sleutelbord</string>
+
+       <string name="pubkey_generate">Genereer</string>
+       <string name="pubkey_import">Voer in</string>
+       <string name="pubkey_delete">Verwyder sleutel</string>
+       <!-- Dialog title when user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="pubkey_gather_entropy">Versamel Ewekansigheid</string>
+       <string name="pubkey_touch_prompt">Raak hierdie boks om ewekansigheid te versamel: %1$d%% voltooi</string>
+       <string name="pubkey_touch_hint">Om ewekansigheid te verseker gedurende die sleutel generering, beweeg u vinger ewekansig oor die boks hieronder.</string>
+       <string name="pubkey_generating">Generating key pair...</string>
+       <string name="pubkey_copy_private">Dupliseer privaat sleutel</string>
+       <string name="pubkey_copy_public">Dupliseer publieke sleutel</string>
+       <!-- Note that the '\n' just splits lines, so it's actually "create or import" -->
+       <string name="pubkey_list_empty">Tap "Menu" to create\nor import key pairs.</string>
+       <string name="pubkey_unknown_format">Onbekende formaat</string>
+       <string name="pubkey_change_password">Verander wagwoord</string>
+       <string name="pubkey_list_pick">Kies van /sdcard</string>
+       <string name="pubkey_import_parse_problem">Problem parsing imported private key</string>
+       <string name="pubkey_unlock">Ontsluit sleutel</string>
+       <string name="pubkey_failed_add">Bad password for key \'%1$s\'. Authentication failed.</string>
+       <string name="pubkey_memory_load">Laai na geheue</string>
+       <string name="pubkey_memory_unload">Unload from memory</string>
+       <string name="pubkey_load_on_start">Load key on start</string>
+       <!-- Pubkey preference asking user whether the key use should be confirmed via prompt before it can be used for authentication -->
+       <string name="pubkey_confirm_use">Bevestig voor gebruik</string>
+
+       <!-- Note that the '\n' splits lines, so it's actually "create port forwards" -->
+       <string name="portforward_list_empty">Tap "Menu" to create\nport forwards.</string>
+       <string name="portforward_edit">Redigeer poort aansturing</string>
+       <string name="portforward_delete">Verwyder poort aanstuur</string>
+
+       <string name="prompt_nickname">Bynaam:</string>
+       <!-- An example string that could be used as a nickname for a pubkey. -->
+       <string name="prompt_nickname_hint_pubkey">My work key</string>
+       <!-- The source TCP port for port forwards. -->
+       <string name="prompt_source_port">Oorsprong poort:</string>
+       <!-- The "host:port" combination used for port forward destinations. -->
+       <string name="prompt_destination">Bestemming:</string>
+       <string name="prompt_old_password">Ou wagwoord:</string>
+       <string name="prompt_password">Wagwoord:</string>
+       <!-- Added after a "Password:" prompt to indicate user needs to confirm entry. -->
+       <string name="prompt_again">(again)</string>
+       <!-- Label for the user to select port forward type. -->
+       <string name="prompt_type">Tipe:</string>
+       <string name="prompt_password_can_be_blank">Nota: wagwoord kan leeg gelos word</string>
+       <!-- Prompt for the size of the private key in bits. -->
+       <string name="prompt_bits">Bits:</string>
+
+       <!-- Prompt for the password to unlock a certain pubkey. -->
+       <string name="prompt_pubkey_password">Password for key \'%1$s\'</string>
+
+       <!-- Prompt for whether to allow SSH Authentication Agent to use the specified key. Note that the '\n' means split the line so it's actually "host to use key" -->
+       <string name="prompt_allow_agent_to_use_key">Allow remote host to\nuse key \'%1$s\'?</string>
+
+       <!-- The header of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning_header">WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</string>
+       <!-- The body of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning">IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\nSomeone could be eavesdropping on you right now (man-in-the-middle attack)!\nIt is also possible that the host key has just been changed.</string>
+
+       <!-- Prompt user gets when the remote host has disconnected unexpectedly. -->
+       <string name="prompt_host_disconnected">Host has disconnected.\nClose session?</string>
+       <!-- Prompt user must answer yes or no to when the remote host fails verification of encryption fingerprint -->
+       <string name="prompt_continue_connecting">Are you sure you want\nto continue connecting?</string>
+
+       <!-- Sent to user when the remote public encryption key fingerprint doesn't match the local database -->
+       <string name="host_authenticity_warning">The authenticity of host \'%1$s\' can\'t be established.</string>
+       <!-- First field is encryption algorithm. Second is the actual fingerprint in hex digits -->
+       <string name="host_fingerprint">Host %1$s key fingerprint is %2$s</string>
+
+       <string name="alert_passwords_do_not_match_msg">Passwords do not match!</string>
+       <string name="alert_wrong_password_msg">Wrong password!</string>
+       <string name="alert_key_corrupted_msg">Private key appears corrupt!</string>
+       <string name="alert_sdcard_absent">SD card is not inserted!</string>
+
+       <!-- Add a new item (e.g., host or pubkey) to the list. -->
+       <string name="button_add">Add</string>
+       <!-- Change an existing item's (e.g., host or pubkey) details. -->
+       <string name="button_change">Change</string>
+       <!-- Button that begins the generation of a public key pair. -->
+       <string name="button_generate">Generate Key</string>
+       <!-- Button that resizes the screen to the user-specified dimensions. -->
+       <string name="button_resize">Resize</string>
+
+       <string name="alert_disconnect_msg">Connection Lost</string>
+
+       <string name="msg_copyright">Copyright © 2007-2008 Kenny Root http://the-b.org/, Jeffrey Sharkey http://jsharkey.org/</string>
+
+       <!-- The category title for terminal emulation preferences. -->
+       <string name="pref_emulation_category">Terminal emulation</string>
+
+       <!-- Name for the emulation terminal type preference. -->
+       <string name="pref_emulation_title">Emulation mode</string>
+       <!-- Description of the emulation terminal type preference. -->
+       <string name="pref_emulation_summary">Terminal emulation mode to use for PTY connections</string>
+
+       <!-- Name for the scrollback size preference -->
+       <string name="pref_scrollback_title">Scrollback size</string>
+       <!-- Description of the scrollback size preference -->
+       <string name="pref_scrollback_summary">Size of scrollback buffer to keep in memory for each console</string>
+
+       <!-- The category title for user interface preferences -->
+       <string name="pref_ui_category">User interface</string>
+
+       <!-- Name for the rotation mode preference -->
+       <string name="pref_rotation_title">Rotation mode</string>
+       <!-- Summary for the rotation mode preference -->
+       <string name="pref_rotation_summary">How to change rotation when keyboard popped in/out</string>
+
+       <!-- Name for the full screen preference -->
+       <string name="pref_fullscreen_title">Full screen</string>
+       <!-- Summary for the full screen preference -->
+       <string name="pref_fullscreen_summary">Hide status bar while in console</string>
+
+       <!-- Name for the memorize keys preference -->
+       <string name="pref_memkeys_title">Remember keys in memory</string>
+       <!-- Summary for the memorize keys preference -->
+       <string name="pref_memkeys_summary">Keep unlocked keys in memory until backend service is terminated</string>
+
+       <!-- Name for the update check preference -->
+       <string name="pref_update_title">Update check</string>
+       <!-- Summary for the update check preference -->
+       <string name="pref_update_summary">Set the maximum frequency to check for ConnectBot updates</string>
+
+       <!-- Name for the preference that forces the service to stay running in the background.-->
+       <string name="pref_conn_persist_title">Persist connections</string>
+       <!-- Summary for the preference that forces the service to stay running in the background. -->
+       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+
+       <!-- Name for the keyboard shortcuts preference -->
+       <string name="pref_keymode_title">Directory shortcuts</string>
+       <!-- Summary for the keyboard shortcuts preference -->
+       <string name="pref_keymode_summary">Select how to use Alt for \'/\' and Shift for Tab</string>
+
+       <!-- Name for the camera shortcut usage preference -->
+       <string name="pref_camera_title">Camera shortcut</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_camera_summary">Select which shortcut to trigger when the camera button is pushed</string>
+
+       <!-- Name for the keep screen on preference -->
+       <string name="pref_keepalive_title">Keep screen awake</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_keepalive_summary">Prevent the screen from turning off when working in a console</string>
+
+       <!-- Name for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_title">Keep Wi-Fi active</string>
+       <!-- Summary for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_summary">Prevent Wi-Fi from turning off when a session is active</string>
+
+       <!-- Name for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_title">Bumpy arrows</string>
+       <!-- Summary for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_summary">Vibrate when sending arrow keys from trackball; useful for laggy connections</string>
+
+       <!-- Category title for the Terminal Bell preferences -->
+       <string name="pref_bell_category">Terminal bell</string>
+
+       <!-- Checkbox preference title for the audible terminal bell feature -->
+       <string name="pref_bell_title">Audible bell</string>
+
+       <!-- Title for the slider preference to set the volume -->
+       <string name="pref_bell_volume_title">Bell volume</string>
+
+       <!-- Checkbox preference title for the vibrate on terminal bell feature -->
+       <string name="pref_bell_vibrate_title">Vibrate on bell</string>
+
+       <!-- Checkbox preference title for the receive notifications on terminal bell feature -->
+       <string name="pref_bell_notification_title">Background notifications</string>
+       <!-- Brief summary of the feature that is enabled when the checkbox preference for the receive notifications on terminal bell feature is checked -->
+       <string name="pref_bell_notification_summary">Send notification when a terminal running in the background sounds a bell.</string>
+
+       <!-- Preference selection to indicate use of right side of keyboard for special shortcuts. -->
+       <string name="list_keymode_right">Use right-side keys</string>
+       <!-- Preference selection to indicate use of left side of keyboard for special shortcuts. -->
+       <string name="list_keymode_left">Use left-side keys</string>
+       <!-- Preference selection to indicate never to use special shortcut keys. -->
+       <string name="list_keymode_none">Disable</string>
+
+       <!-- Preference to not use pubkeys to authenticate to this host. -->
+       <string name="list_pubkeyids_none">Do not use keys</string>
+       <!-- Preference to use any pubkey to authenticate to this host. -->
+       <string name="list_pubkeyids_any">Use any unlocked key</string>
+
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_daily">Daily</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_weekly">Weekly</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_never">Never</string>
+
+       <!-- Host nickname field preference title -->
+       <string name="hostpref_nickname_title">Nickname</string>
+
+       <!-- Host color category preference title -->
+       <string name="hostpref_color_title">Color category</string>
+
+       <!-- Host's default font size when opening the terminal in points (pt) -->
+       <string name="hostpref_fontsize_title">Font size (pt)</string>
+
+       <!-- Host pubkey usage preference title -->
+       <string name="hostpref_pubkeyid_title">Use pubkey authentication</string>
+
+       <!-- Preference title for the SSH Authentication Agent Forwarding for a host connection -->
+       <string name="hostpref_authagent_title">Use SSH auth agent</string>
+
+       <!-- Host post-login automation preference title -->
+       <string name="hostpref_postlogin_title">Post-login automation</string>
+       <!-- Host post-login automation preference summary -->
+       <string name="hostpref_postlogin_summary">Commands to run on remote server once authenticated</string>
+
+       <!-- Host compression preference title -->
+       <string name="hostpref_compression_title">Compression</string>
+       <!-- Summary for compression preference -->
+       <string name="hostpref_compression_summary">This may help with slower networks</string>
+
+       <!-- Setting for whether we want a session to start up when we connect to a host -->
+       <string name="hostpref_wantsession_title">Start shell session</string>
+       <!-- Summary for field asking whether a shell session should be started up upon connection or not -->
+       <string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+
+       <!-- Setting for whether the host should be reconnected to automatically upon disconnect -->
+       <string name="hostpref_stayconnected_title">Stay connected</string>
+       <!-- Summary for preference asking whether the host should be reconnected to when it disconnects -->
+       <string name="hostpref_stayconnected_summary">Try to reconnect to host if disconnected</string>
+
+       <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_title">DEL Key</string>
+       <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+
+       <!-- Host character encoding preference title -->
+       <string name="hostpref_encoding_title">Encoding</string>
+       <!-- Host character encoding preference summary -->
+       <string name="hostpref_encoding_summary">Character encoding for the host</string>
+
+       <!-- Host preference category title for connection settings -->
+       <string name="hostpref_connection_category">Connection settings</string>
+
+       <!-- Username field title for host editor preference -->
+       <string name="hostpref_username_title">Username</string>
+
+       <!-- Hostname field title for host editor preference -->
+       <string name="hostpref_hostname_title">Host</string>
+
+       <!-- Port field title for host editor preference -->
+       <string name="hostpref_port_title">Port</string>
+
+       <!-- Displayed to indicate a host has never been connected to. -->
+       <string name="bind_never">Never connected</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than an hour. -->
+       <string name="bind_minutes">%1$s minutes ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than a day. -->
+       <string name="bind_hours">%1$s hours ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been a day or more. -->
+       <string name="bind_days">%1$s days ago</string>
+
+       <!-- Message given when user copies from the terminal. -->
+       <string name="console_copy_done">Copied %1$d bytes to clipboard</string>
+       <!-- Instructions for how to copy from the terminal. The '\n' entries are to split lines to improve readability and prevent wrapping off the screen. -->
+       <string name="console_copy_start">Touch and drag\nor use directional pad\nto select area to copy</string>
+
+       <!-- Button to close the disconnected terminal window. -->
+       <string name="console_menu_close">Close</string>
+       <!-- Button to begin copying from the terminal to the clipboard. -->
+       <string name="console_menu_copy">Copy</string>
+       <!-- Button to paste from the clipboard to the terminal. -->
+       <string name="console_menu_paste">Paste</string>
+       <!-- Button that brings user to the Port Forwards List. -->
+       <string name="console_menu_portforwards">Port Forwards</string>
+       <!-- Button that brings user to the terminal resizing dialog where they can force a size. -->
+       <string name="console_menu_resize">Force Size</string>
+       <!-- Button that brings up the list of URLs on the current screen -->
+       <string name="console_menu_urlscan">URL Scan</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. -->
+       <string name="portforward_remote">Remote</string>
+       <!-- Selection for a "dynamic" port forward. E.g., connections to a port listening locally is forwarded based on the SOCKS protocol to an arbitrary remote host and port. -->
+       <string name="portforward_dynamic">Dynamic (SOCKS)</string>
+       <!-- Button that commits the port forward to be made from the Port Forward Creation dialog. -->
+       <string name="portforward_pos">Create port forward</string>
+
+       <string name="portforward_done">Successfully created port forward</string>
+       <string name="portforward_problem">Problem creating port forward, maybe you\'re using ports under 1024 or port is already used?</string>
+
+       <string name="portforward_menu_add">Add port forward</string>
+
+       <!-- The string to present in the quick-connect box to hint the user to the format for connecting to hosts. -->
+       <string name="hint_userhost">user@hostname</string>
+
+       <!-- Hint given to user when the format they're using is incorrect in the quick-connect box. -->
+       <string name="list_format_error">Use the format "%1$s"</string>
+
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_username">username</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_hostname">hostname</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_port">port</string>
+
+       <string name="list_menu_pubkeys">Manage Pubkeys</string>
+       <!-- Selection choice to sort hosts by color. -->
+       <string name="list_menu_sortcolor">Sort by color</string>
+       <!-- Selection choice to sort hosts by nickname. -->
+       <string name="list_menu_sortname">Sort by name</string>
+       <string name="list_menu_settings">Settings</string>
+
+       <string name="list_host_disconnect">Disconnect</string>
+       <string name="list_host_edit">Edit host</string>
+       <string name="list_host_portforwards">Edit port forwards</string>
+       <string name="list_host_delete">Delete host</string>
+       <!-- Note that the '\n' splits the lines so it's actually "quick-connect box below to connect" -->
+       <string name="list_host_empty">Use the quick-connect box\nbelow to connect to a host.</string>
+
+       <!-- Default screen rotation preference selection -->
+       <string name="list_rotation_default">Default</string>
+       <string name="list_rotation_land">Force landscape</string>
+       <string name="list_rotation_port">Force portrait</string>
+       <!-- Selection to indicate the rotation should be selected automatically based on the tilt sensor. -->
+       <string name="list_rotation_auto">Automatic</string>
+
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A then Space". -->
+       <string name="list_camera_ctrlaspace">Ctrl+A then Space</string>
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A". -->
+       <string name="list_camera_ctrla">Ctrl+A</string>
+       <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
+       <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
+       <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
+       <string name="list_camera_none">None</string>
+
+       <!-- Name for the backspace character -->
+       <string name="list_delkey_backspace">Backspace</string>
+       <!-- Name for the ASCII DEL character -->
+       <string name="list_delkey_del">Delete</string>
+
+       <string name="delete_message">Are you sure you want to delete \'%1$s\'?</string>
+       <string name="delete_pos">Yes, delete</string>
+       <string name="delete_neg">Cancel</string>
+
+       <!-- Button to agree to license terms. -->
+       <string name="wizard_agree">Agree</string>
+       <!-- Button to go to the next page in the first time start-up wizard. -->
+       <string name="wizard_next">Next</string>
+       <!-- Button to go to the previous page in the first time start-up wizard. -->
+       <string name="wizard_back">Back</string>
+
+       <string name="terminal_no_hosts_connected">No hosts currently connected</string>
+
+       <!-- Displayed in terminal when attempting to connect to a host. The first two
+            variables are host:port and the third is the protocol (e.g., SSH) -->
+       <string name="terminal_connecting">Connecting to %1$s:%2$d via %3$s</string>
+
+       <!-- Displays the host key to the user in the terminal -->
+       <string name="terminal_sucess">Verified host \'%1$s\' key: %2$s</string>
+       <string name="terminal_failed">Host key verification failed.</string>
+
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_s2c_algorithm">Server-to-client algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_c2s_algorithm">Client-to-server algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_algorithm">Using algorithm: %1$s %2$s</string>
+
+       <string name="terminal_auth">Trying to authenticate</string>
+
+       <string name="terminal_auth_pass">Attempting \'password\' authentication</string>
+       <string name="terminal_auth_pass_fail">Authentication method \'password\' failed</string>
+
+       <string name="terminal_auth_pubkey_any">Attempting \'publickey\' authentication with any in-memory public keys</string>
+       <string name="terminal_auth_pubkey_invalid">Selected public key is invalid, try reselecting key in host editor</string>
+       <string name="terminal_auth_pubkey_specific">Attempting \'publickey\' authentication with a specific public key</string>
+       <string name="terminal_auth_pubkey_fail">Authentication method \'publickey\' with key \'%1$s\' failed</string>
+
+       <string name="terminal_auth_ki">Attempting \'keyboard-interactive\' authentication</string>
+       <string name="terminal_auth_ki_fail">Authentication method \'keyboard-interactive\' failed</string>
+
+       <string name="terminal_auth_fail">[Your host doesn\'t support \'password\' or \'keyboard-interactive\' authentication.]</string>
+
+       <string name="terminal_no_session">Session will not be started due to host preference.</string>
+       <string name="terminal_enable_portfoward">Enable port forward: %1$s</string>
+
+       <string name="local_shell_unavailable">Failure! Local shell is unavailable on this phone.</string>
+
+       <!-- Text sent to the user to alert them that a Terminal Bell is received in a background session -->
+       <string name="notification_text">%1$s wants your attention.</string>
+
+       <!-- Dialog title when a new version of ConnectBot is detected. -->
+       <string name="upgrade">New version</string>
+       <!-- Button selection to upgrade to the latest ConnectBot when one is available. -->
+       <string name="upgrade_pos">Yes, upgrade</string>
+       <!-- Button selection to skip upgrading to the latest ConnectBot when one is available. -->
+       <string name="upgrade_neg">Not right now</string>
+
+       <!-- Preference selection for SSH Authentication Agent to never use pubkeys -->
+       <string name="no">No</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys "with confirmation" only -->
+       <string name="with_confirmation">With confirmation</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys -->
+       <string name="yes">Yes</string>
+
+       <!-- String displayed to user when they're asked to submit exceptions to the ConnectBot developers -->
+       <string name="exceptions_submit_message">It appears ConnectBot had a problem last time it ran.  Submit error report to ConnectBot developers?</string>
+
+       <!-- Menu selection to reset colors to their defaults. -->
+       <string name="menu_colors_reset">Reset</string>
+
+       <!-- Displayed in the notification bar that connections are active -->
+       <string name="app_is_running">ConnectBot is running</string>
+
+       <string name="color_red">red</string>
+       <string name="color_green">green</string>
+       <string name="color_blue">blue</string>
+       <string name="color_gray">gray</string>
+</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
new file mode 100644 (file)
index 0000000..e799704
--- /dev/null
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2007 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+       <string name="app_desc">Simple, powerful, open-source SSH client.</string>
+
+       <!-- Window title for the Host List -->
+       <string name="title_hosts_list">Hosts</string>
+       <!-- Window title for the Pubkeys List -->
+       <string name="title_pubkey_list">Pubkeys</string>
+       <!-- Window title for the Port Forwards List -->
+       <string name="title_port_forwards_list">Port forwards</string>
+       <!-- Window title when editing host details -->
+       <string name="title_host_editor">Edit Host</string>
+       <!-- Window title for Help index -->
+       <string name="title_help">Help</string>
+       <!-- Window title for color list editing screen -->
+       <string name="title_colors">Colors</string>
+
+       <string name="resolve_connect">Connect</string>
+       <!-- Menu selection where user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="resolve_entropy">Gather Entropy</string>
+
+       <string name="menu_insert">Add Host</string>
+       <string name="menu_delete">Delete Host</string>
+       <string name="menu_preferences">Preferences</string>
+
+       <string name="help_intro">Please select a topic below for more information on a particular subject.</string>
+       <string name="help_about">About ConnectBot</string>
+       <string name="help_keyboard">Keyboard</string>
+
+       <string name="pubkey_generate">Generate</string>
+       <string name="pubkey_import">Import</string>
+       <string name="pubkey_delete">Delete key</string>
+       <!-- Dialog title when user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="pubkey_gather_entropy">Gathering Entropy</string>
+       <string name="pubkey_touch_prompt">Touch this box to gather randomness: %1$d%% done</string>
+       <string name="pubkey_touch_hint">In order to assure randomness during the key generation, move your finger randomly over the box below.</string>
+       <string name="pubkey_generating">Generating key pair...</string>
+       <string name="pubkey_copy_private">Copy private key</string>
+       <string name="pubkey_copy_public">Copy public key</string>
+       <!-- Note that the '\n' just splits lines, so it's actually "create or import" -->
+       <string name="pubkey_list_empty">Tap "Menu" to create\nor import key pairs.</string>
+       <string name="pubkey_unknown_format">Unknown format</string>
+       <string name="pubkey_change_password">Change password</string>
+       <string name="pubkey_list_pick">Pick from /sdcard</string>
+       <string name="pubkey_import_parse_problem">Problem parsing imported private key</string>
+       <string name="pubkey_unlock">Unlock key</string>
+       <string name="pubkey_failed_add">Bad password for key \'%1$s\'. Authentication failed.</string>
+       <string name="pubkey_memory_load">Load into memory</string>
+       <string name="pubkey_memory_unload">Unload from memory</string>
+       <string name="pubkey_load_on_start">Load key on start</string>
+       <!-- Pubkey preference asking user whether the key use should be confirmed via prompt before it can be used for authentication -->
+       <string name="pubkey_confirm_use">Confirm before use</string>
+
+       <!-- Note that the '\n' splits lines, so it's actually "create port forwards" -->
+       <string name="portforward_list_empty">Tap "Menu" to create\nport forwards.</string>
+       <string name="portforward_edit">Edit port forward</string>
+       <string name="portforward_delete">Delete port forward</string>
+
+       <string name="prompt_nickname">Nickname:</string>
+       <!-- An example string that could be used as a nickname for a pubkey. -->
+       <string name="prompt_nickname_hint_pubkey">My work key</string>
+       <!-- The source TCP port for port forwards. -->
+       <string name="prompt_source_port">Source port:</string>
+       <!-- The "host:port" combination used for port forward destinations. -->
+       <string name="prompt_destination">Destination:</string>
+       <string name="prompt_old_password">Old password:</string>
+       <string name="prompt_password">Password:</string>
+       <!-- Added after a "Password:" prompt to indicate user needs to confirm entry. -->
+       <string name="prompt_again">(again)</string>
+       <!-- Label for the user to select port forward type. -->
+       <string name="prompt_type">Type:</string>
+       <string name="prompt_password_can_be_blank">Note: password can be blank</string>
+       <!-- Prompt for the size of the private key in bits. -->
+       <string name="prompt_bits">Bits:</string>
+
+       <!-- Prompt for the password to unlock a certain pubkey. -->
+       <string name="prompt_pubkey_password">Password for key \'%1$s\'</string>
+
+       <!-- Prompt for whether to allow SSH Authentication Agent to use the specified key. Note that the '\n' means split the line so it's actually "host to use key" -->
+       <string name="prompt_allow_agent_to_use_key">Allow remote host to\nuse key \'%1$s\'?</string>
+
+       <!-- The header of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning_header">WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</string>
+       <!-- The body of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning">IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\nSomeone could be eavesdropping on you right now (man-in-the-middle attack)!\nIt is also possible that the host key has just been changed.</string>
+
+       <!-- Prompt user gets when the remote host has disconnected unexpectedly. -->
+       <string name="prompt_host_disconnected">Host has disconnected.\nClose session?</string>
+       <!-- Prompt user must answer yes or no to when the remote host fails verification of encryption fingerprint -->
+       <string name="prompt_continue_connecting">Are you sure you want\nto continue connecting?</string>
+
+       <!-- Sent to user when the remote public encryption key fingerprint doesn't match the local database -->
+       <string name="host_authenticity_warning">The authenticity of host \'%1$s\' can\'t be established.</string>
+       <!-- First field is encryption algorithm. Second is the actual fingerprint in hex digits -->
+       <string name="host_fingerprint">Host %1$s key fingerprint is %2$s</string>
+
+       <string name="alert_passwords_do_not_match_msg">Passwords do not match!</string>
+       <string name="alert_wrong_password_msg">Wrong password!</string>
+       <string name="alert_key_corrupted_msg">Private key appears corrupt!</string>
+       <string name="alert_sdcard_absent">SD card is not inserted!</string>
+
+       <!-- Add a new item (e.g., host or pubkey) to the list. -->
+       <string name="button_add">Add</string>
+       <!-- Change an existing item's (e.g., host or pubkey) details. -->
+       <string name="button_change">Change</string>
+       <!-- Button that begins the generation of a public key pair. -->
+       <string name="button_generate">Generate Key</string>
+       <!-- Button that resizes the screen to the user-specified dimensions. -->
+       <string name="button_resize">Resize</string>
+
+       <string name="alert_disconnect_msg">Connection Lost</string>
+
+       <string name="msg_copyright">Copyright © 2007-2008 Kenny Root http://the-b.org/, Jeffrey Sharkey http://jsharkey.org/</string>
+
+       <!-- The category title for terminal emulation preferences. -->
+       <string name="pref_emulation_category">Terminal emulation</string>
+
+       <!-- Name for the emulation terminal type preference. -->
+       <string name="pref_emulation_title">Emulation mode</string>
+       <!-- Description of the emulation terminal type preference. -->
+       <string name="pref_emulation_summary">Terminal emulation mode to use for PTY connections</string>
+
+       <!-- Name for the scrollback size preference -->
+       <string name="pref_scrollback_title">Scrollback size</string>
+       <!-- Description of the scrollback size preference -->
+       <string name="pref_scrollback_summary">Size of scrollback buffer to keep in memory for each console</string>
+
+       <!-- The category title for user interface preferences -->
+       <string name="pref_ui_category">User interface</string>
+
+       <!-- Name for the rotation mode preference -->
+       <string name="pref_rotation_title">Rotation mode</string>
+       <!-- Summary for the rotation mode preference -->
+       <string name="pref_rotation_summary">How to change rotation when keyboard popped in/out</string>
+
+       <!-- Name for the full screen preference -->
+       <string name="pref_fullscreen_title">Full screen</string>
+       <!-- Summary for the full screen preference -->
+       <string name="pref_fullscreen_summary">Hide status bar while in console</string>
+
+       <!-- Name for the memorize keys preference -->
+       <string name="pref_memkeys_title">Remember keys in memory</string>
+       <!-- Summary for the memorize keys preference -->
+       <string name="pref_memkeys_summary">Keep unlocked keys in memory until backend service is terminated</string>
+
+       <!-- Name for the update check preference -->
+       <string name="pref_update_title">Update check</string>
+       <!-- Summary for the update check preference -->
+       <string name="pref_update_summary">Set the maximum frequency to check for ConnectBot updates</string>
+
+       <!-- Name for the preference that forces the service to stay running in the background.-->
+       <string name="pref_conn_persist_title">Persist connections</string>
+       <!-- Summary for the preference that forces the service to stay running in the background. -->
+       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+
+       <!-- Name for the keyboard shortcuts preference -->
+       <string name="pref_keymode_title">Directory shortcuts</string>
+       <!-- Summary for the keyboard shortcuts preference -->
+       <string name="pref_keymode_summary">Select how to use Alt for \'/\' and Shift for Tab</string>
+
+       <!-- Name for the camera shortcut usage preference -->
+       <string name="pref_camera_title">Camera shortcut</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_camera_summary">Select which shortcut to trigger when the camera button is pushed</string>
+
+       <!-- Name for the keep screen on preference -->
+       <string name="pref_keepalive_title">Keep screen awake</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_keepalive_summary">Prevent the screen from turning off when working in a console</string>
+
+       <!-- Name for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_title">Keep Wi-Fi active</string>
+       <!-- Summary for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_summary">Prevent Wi-Fi from turning off when a session is active</string>
+
+       <!-- Name for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_title">Bumpy arrows</string>
+       <!-- Summary for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_summary">Vibrate when sending arrow keys from trackball; useful for laggy connections</string>
+
+       <!-- Category title for the Terminal Bell preferences -->
+       <string name="pref_bell_category">Terminal bell</string>
+
+       <!-- Checkbox preference title for the audible terminal bell feature -->
+       <string name="pref_bell_title">Audible bell</string>
+
+       <!-- Title for the slider preference to set the volume -->
+       <string name="pref_bell_volume_title">Bell volume</string>
+
+       <!-- Checkbox preference title for the vibrate on terminal bell feature -->
+       <string name="pref_bell_vibrate_title">Vibrate on bell</string>
+
+       <!-- Checkbox preference title for the receive notifications on terminal bell feature -->
+       <string name="pref_bell_notification_title">Background notifications</string>
+       <!-- Brief summary of the feature that is enabled when the checkbox preference for the receive notifications on terminal bell feature is checked -->
+       <string name="pref_bell_notification_summary">Send notification when a terminal running in the background sounds a bell.</string>
+
+       <!-- Preference selection to indicate use of right side of keyboard for special shortcuts. -->
+       <string name="list_keymode_right">Use right-side keys</string>
+       <!-- Preference selection to indicate use of left side of keyboard for special shortcuts. -->
+       <string name="list_keymode_left">Use left-side keys</string>
+       <!-- Preference selection to indicate never to use special shortcut keys. -->
+       <string name="list_keymode_none">Disable</string>
+
+       <!-- Preference to not use pubkeys to authenticate to this host. -->
+       <string name="list_pubkeyids_none">Do not use keys</string>
+       <!-- Preference to use any pubkey to authenticate to this host. -->
+       <string name="list_pubkeyids_any">Use any unlocked key</string>
+
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_daily">Daily</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_weekly">Weekly</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_never">Never</string>
+
+       <!-- Host nickname field preference title -->
+       <string name="hostpref_nickname_title">Nickname</string>
+
+       <!-- Host color category preference title -->
+       <string name="hostpref_color_title">Color category</string>
+
+       <!-- Host's default font size when opening the terminal in points (pt) -->
+       <string name="hostpref_fontsize_title">Font size (pt)</string>
+
+       <!-- Host pubkey usage preference title -->
+       <string name="hostpref_pubkeyid_title">Use pubkey authentication</string>
+
+       <!-- Preference title for the SSH Authentication Agent Forwarding for a host connection -->
+       <string name="hostpref_authagent_title">Use SSH auth agent</string>
+
+       <!-- Host post-login automation preference title -->
+       <string name="hostpref_postlogin_title">Post-login automation</string>
+       <!-- Host post-login automation preference summary -->
+       <string name="hostpref_postlogin_summary">Commands to run on remote server once authenticated</string>
+
+       <!-- Host compression preference title -->
+       <string name="hostpref_compression_title">Compression</string>
+       <!-- Summary for compression preference -->
+       <string name="hostpref_compression_summary">This may help with slower networks</string>
+
+       <!-- Setting for whether we want a session to start up when we connect to a host -->
+       <string name="hostpref_wantsession_title">Start shell session</string>
+       <!-- Summary for field asking whether a shell session should be started up upon connection or not -->
+       <string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+
+       <!-- Setting for whether the host should be reconnected to automatically upon disconnect -->
+       <string name="hostpref_stayconnected_title">Stay connected</string>
+       <!-- Summary for preference asking whether the host should be reconnected to when it disconnects -->
+       <string name="hostpref_stayconnected_summary">Try to reconnect to host if disconnected</string>
+
+       <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_title">DEL Key</string>
+       <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+
+       <!-- Host character encoding preference title -->
+       <string name="hostpref_encoding_title">Encoding</string>
+       <!-- Host character encoding preference summary -->
+       <string name="hostpref_encoding_summary">Character encoding for the host</string>
+
+       <!-- Host preference category title for connection settings -->
+       <string name="hostpref_connection_category">Connection settings</string>
+
+       <!-- Username field title for host editor preference -->
+       <string name="hostpref_username_title">Username</string>
+
+       <!-- Hostname field title for host editor preference -->
+       <string name="hostpref_hostname_title">Host</string>
+
+       <!-- Port field title for host editor preference -->
+       <string name="hostpref_port_title">Port</string>
+
+       <!-- Displayed to indicate a host has never been connected to. -->
+       <string name="bind_never">Never connected</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than an hour. -->
+       <string name="bind_minutes">%1$s minutes ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than a day. -->
+       <string name="bind_hours">%1$s hours ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been a day or more. -->
+       <string name="bind_days">%1$s days ago</string>
+
+       <!-- Message given when user copies from the terminal. -->
+       <string name="console_copy_done">Copied %1$d bytes to clipboard</string>
+       <!-- Instructions for how to copy from the terminal. The '\n' entries are to split lines to improve readability and prevent wrapping off the screen. -->
+       <string name="console_copy_start">Touch and drag\nor use directional pad\nto select area to copy</string>
+
+       <!-- Button to close the disconnected terminal window. -->
+       <string name="console_menu_close">Close</string>
+       <!-- Button to begin copying from the terminal to the clipboard. -->
+       <string name="console_menu_copy">Copy</string>
+       <!-- Button to paste from the clipboard to the terminal. -->
+       <string name="console_menu_paste">Paste</string>
+       <!-- Button that brings user to the Port Forwards List. -->
+       <string name="console_menu_portforwards">Port Forwards</string>
+       <!-- Button that brings user to the terminal resizing dialog where they can force a size. -->
+       <string name="console_menu_resize">Force Size</string>
+       <!-- Button that brings up the list of URLs on the current screen -->
+       <string name="console_menu_urlscan">URL Scan</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. -->
+       <string name="portforward_remote">Remote</string>
+       <!-- Selection for a "dynamic" port forward. E.g., connections to a port listening locally is forwarded based on the SOCKS protocol to an arbitrary remote host and port. -->
+       <string name="portforward_dynamic">Dynamic (SOCKS)</string>
+       <!-- Button that commits the port forward to be made from the Port Forward Creation dialog. -->
+       <string name="portforward_pos">Create port forward</string>
+
+       <string name="portforward_done">Successfully created port forward</string>
+       <string name="portforward_problem">Problem creating port forward, maybe you\'re using ports under 1024 or port is already used?</string>
+
+       <string name="portforward_menu_add">Add port forward</string>
+
+       <!-- The string to present in the quick-connect box to hint the user to the format for connecting to hosts. -->
+       <string name="hint_userhost">user@hostname</string>
+
+       <!-- Hint given to user when the format they're using is incorrect in the quick-connect box. -->
+       <string name="list_format_error">Use the format "%1$s"</string>
+
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_username">username</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_hostname">hostname</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_port">port</string>
+
+       <string name="list_menu_pubkeys">Manage Pubkeys</string>
+       <!-- Selection choice to sort hosts by color. -->
+       <string name="list_menu_sortcolor">Sort by color</string>
+       <!-- Selection choice to sort hosts by nickname. -->
+       <string name="list_menu_sortname">Sort by name</string>
+       <string name="list_menu_settings">Settings</string>
+
+       <string name="list_host_disconnect">Disconnect</string>
+       <string name="list_host_edit">Edit host</string>
+       <string name="list_host_portforwards">Edit port forwards</string>
+       <string name="list_host_delete">Delete host</string>
+       <!-- Note that the '\n' splits the lines so it's actually "quick-connect box below to connect" -->
+       <string name="list_host_empty">Use the quick-connect box\nbelow to connect to a host.</string>
+
+       <!-- Default screen rotation preference selection -->
+       <string name="list_rotation_default">Default</string>
+       <string name="list_rotation_land">Force landscape</string>
+       <string name="list_rotation_port">Force portrait</string>
+       <!-- Selection to indicate the rotation should be selected automatically based on the tilt sensor. -->
+       <string name="list_rotation_auto">Automatic</string>
+
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A then Space". -->
+       <string name="list_camera_ctrlaspace">Ctrl+A then Space</string>
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A". -->
+       <string name="list_camera_ctrla">Ctrl+A</string>
+       <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
+       <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
+       <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
+       <string name="list_camera_none">None</string>
+
+       <!-- Name for the backspace character -->
+       <string name="list_delkey_backspace">Backspace</string>
+       <!-- Name for the ASCII DEL character -->
+       <string name="list_delkey_del">Delete</string>
+
+       <string name="delete_message">Are you sure you want to delete \'%1$s\'?</string>
+       <string name="delete_pos">Yes, delete</string>
+       <string name="delete_neg">Cancel</string>
+
+       <!-- Button to agree to license terms. -->
+       <string name="wizard_agree">Agree</string>
+       <!-- Button to go to the next page in the first time start-up wizard. -->
+       <string name="wizard_next">Next</string>
+       <!-- Button to go to the previous page in the first time start-up wizard. -->
+       <string name="wizard_back">Back</string>
+
+       <string name="terminal_no_hosts_connected">No hosts currently connected</string>
+
+       <!-- Displayed in terminal when attempting to connect to a host. The first two
+            variables are host:port and the third is the protocol (e.g., SSH) -->
+       <string name="terminal_connecting">Connecting to %1$s:%2$d via %3$s</string>
+
+       <!-- Displays the host key to the user in the terminal -->
+       <string name="terminal_sucess">Verified host \'%1$s\' key: %2$s</string>
+       <string name="terminal_failed">Host key verification failed.</string>
+
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_s2c_algorithm">Server-to-client algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_c2s_algorithm">Client-to-server algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_algorithm">Using algorithm: %1$s %2$s</string>
+
+       <string name="terminal_auth">Trying to authenticate</string>
+
+       <string name="terminal_auth_pass">Attempting \'password\' authentication</string>
+       <string name="terminal_auth_pass_fail">Authentication method \'password\' failed</string>
+
+       <string name="terminal_auth_pubkey_any">Attempting \'publickey\' authentication with any in-memory public keys</string>
+       <string name="terminal_auth_pubkey_invalid">Selected public key is invalid, try reselecting key in host editor</string>
+       <string name="terminal_auth_pubkey_specific">Attempting \'publickey\' authentication with a specific public key</string>
+       <string name="terminal_auth_pubkey_fail">Authentication method \'publickey\' with key \'%1$s\' failed</string>
+
+       <string name="terminal_auth_ki">Attempting \'keyboard-interactive\' authentication</string>
+       <string name="terminal_auth_ki_fail">Authentication method \'keyboard-interactive\' failed</string>
+
+       <string name="terminal_auth_fail">[Your host doesn\'t support \'password\' or \'keyboard-interactive\' authentication.]</string>
+
+       <string name="terminal_no_session">Session will not be started due to host preference.</string>
+       <string name="terminal_enable_portfoward">Enable port forward: %1$s</string>
+
+       <string name="local_shell_unavailable">Failure! Local shell is unavailable on this phone.</string>
+
+       <!-- Text sent to the user to alert them that a Terminal Bell is received in a background session -->
+       <string name="notification_text">%1$s wants your attention.</string>
+
+       <!-- Dialog title when a new version of ConnectBot is detected. -->
+       <string name="upgrade">New version</string>
+       <!-- Button selection to upgrade to the latest ConnectBot when one is available. -->
+       <string name="upgrade_pos">Yes, upgrade</string>
+       <!-- Button selection to skip upgrading to the latest ConnectBot when one is available. -->
+       <string name="upgrade_neg">Not right now</string>
+
+       <!-- Preference selection for SSH Authentication Agent to never use pubkeys -->
+       <string name="no">No</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys "with confirmation" only -->
+       <string name="with_confirmation">With confirmation</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys -->
+       <string name="yes">Yes</string>
+
+       <!-- String displayed to user when they're asked to submit exceptions to the ConnectBot developers -->
+       <string name="exceptions_submit_message">It appears ConnectBot had a problem last time it ran.  Submit error report to ConnectBot developers?</string>
+
+       <!-- Menu selection to reset colors to their defaults. -->
+       <string name="menu_colors_reset">Reset</string>
+
+       <!-- Displayed in the notification bar that connections are active -->
+       <string name="app_is_running">ConnectBot is running</string>
+
+       <string name="color_red">red</string>
+       <string name="color_green">green</string>
+       <string name="color_blue">blue</string>
+       <string name="color_gray">gray</string>
+</resources>
index df1e459..5ffb3c0 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index 9790323..7fbd716 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Res</string>
 
index f683b7a..982b589 100644 (file)
@@ -35,7 +35,7 @@
 
        <string name="resolve_connect">Připojit</string>
        <!-- Menu selection where user must move finger randomly over an area to gather entropy (collect random bits) -->
-       <string name="resolve_entropy">Gather Entropy</string>
+       <string name="resolve_entropy">Získat entropii</string>
 
        <string name="menu_insert">Přidat hostitele</string>
        <string name="menu_delete">Smazat hostitele</string>
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Nic</string>
 
index f6c1eca..0ba418a 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Ingen</string>
 
        <string name="menu_colors_reset">Nulstil</string>
 
        <!-- Displayed in the notification bar that connections are active -->
-       <string name="app_is_running">ConnectBot is running</string>
+       <string name="app_is_running">ConnectBot kører</string>
 
        <string name="color_red">rød</string>
        <string name="color_green">grøn</string>
index afa4d95..9cccbfd 100644 (file)
        <string name="list_camera_ctrla">Strg+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Nichts</string>
 
        <string name="menu_colors_reset">Zurücksetzen</string>
 
        <!-- Displayed in the notification bar that connections are active -->
-       <string name="app_is_running">ConnectBot is running</string>
+       <string name="app_is_running">ConnectBot läuft</string>
 
        <string name="color_red">rot</string>
        <string name="color_green">grün</string>
index 2ccc5cd..ebff578 100644 (file)
        <string name="pref_wifilock_summary">Prevenir que la red inálambrica se apague mientras haya una conexión activa</string>
 
        <!-- Name for the haptic feedback (bumpy arrow) preference -->
-       <string name="pref_bumpyarrows_title">Bumpy arrows</string>
+       <string name="pref_bumpyarrows_title">Cursor con vibración</string>
        <!-- Summary for the haptic feedback (bumpy arrow) preference -->
        <string name="pref_bumpyarrows_summary">Vibrar al recibir las teclas del cursor desde el trackball; útil para conexiones con retardos</string>
 
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Ninguno</string>
 
        <string name="menu_colors_reset">Restablecer</string>
 
        <!-- Displayed in the notification bar that connections are active -->
-       <string name="app_is_running">ConnectBot is running</string>
+       <string name="app_is_running">ConnectBot está ejecutándose</string>
 
        <string name="color_red">rojo</string>
        <string name="color_green">verde</string>
index 97d98fe..c902ed0 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index 139e97b..1682486 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index a8d7253..b992822 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Echap</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">aucun</string>
 
        <string name="menu_colors_reset">Réinitialiser</string>
 
        <!-- Displayed in the notification bar that connections are active -->
-       <string name="app_is_running">ConnectBot is running</string>
+       <string name="app_is_running">ConnectBot est en cours</string>
 
        <string name="color_red">rouge</string>
        <string name="color_green">vert</string>
index afaffff..c87792f 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index a376106..792b10f 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Semmit</string>
 
        <string name="menu_colors_reset">Visszaállít</string>
 
        <!-- Displayed in the notification bar that connections are active -->
-       <string name="app_is_running">ConnectBot is running</string>
+       <string name="app_is_running">ConnectBot már fut</string>
 
        <string name="color_red">piros</string>
        <string name="color_green">zöld</string>
index 8d2d173..a7a0f2d 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Kosong</string>
 
index 5b4405a..389f862 100644 (file)
        <string name="hostpref_color_title">Categoria colore</string>
 
        <!-- Host's default font size when opening the terminal in points (pt) -->
-       <string name="hostpref_fontsize_title">Font size (pt)</string>
+       <string name="hostpref_fontsize_title">Dimensione caratteri (pt)</string>
 
        <!-- Host pubkey usage preference title -->
        <string name="hostpref_pubkeyid_title">Usa autenticazione a chiave pubblica</string>
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Niente</string>
 
index cb26100..bc9aee6 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">なし</string>
 
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
new file mode 100644 (file)
index 0000000..18d289e
--- /dev/null
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2007 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+       <string name="app_desc">간단하고, 강력한, 오픈소스 SSH 클라이언트.</string>
+
+       <!-- Window title for the Host List -->
+       <string name="title_hosts_list">호스트</string>
+       <!-- Window title for the Pubkeys List -->
+       <string name="title_pubkey_list">공개키</string>
+       <!-- Window title for the Port Forwards List -->
+       <string name="title_port_forwards_list">포트 포워딩 목록</string>
+       <!-- Window title when editing host details -->
+       <string name="title_host_editor">호스트 편집</string>
+       <!-- Window title for Help index -->
+       <string name="title_help">도움말</string>
+       <!-- Window title for color list editing screen -->
+       <string name="title_colors">색상</string>
+
+       <string name="resolve_connect">접속</string>
+       <!-- Menu selection where user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="resolve_entropy">Gather Entropy</string>
+
+       <string name="menu_insert">Add Host</string>
+       <string name="menu_delete">Delete Host</string>
+       <string name="menu_preferences">Preferences</string>
+
+       <string name="help_intro">Please select a topic below for more information on a particular subject.</string>
+       <string name="help_about">About ConnectBot</string>
+       <string name="help_keyboard">Keyboard</string>
+
+       <string name="pubkey_generate">Generate</string>
+       <string name="pubkey_import">Import</string>
+       <string name="pubkey_delete">Delete key</string>
+       <!-- Dialog title when user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="pubkey_gather_entropy">Gathering Entropy</string>
+       <string name="pubkey_touch_prompt">Touch this box to gather randomness: %1$d%% done</string>
+       <string name="pubkey_touch_hint">In order to assure randomness during the key generation, move your finger randomly over the box below.</string>
+       <string name="pubkey_generating">Generating key pair...</string>
+       <string name="pubkey_copy_private">Copy private key</string>
+       <string name="pubkey_copy_public">Copy public key</string>
+       <!-- Note that the '\n' just splits lines, so it's actually "create or import" -->
+       <string name="pubkey_list_empty">Tap "Menu" to create\nor import key pairs.</string>
+       <string name="pubkey_unknown_format">Unknown format</string>
+       <string name="pubkey_change_password">Change password</string>
+       <string name="pubkey_list_pick">Pick from /sdcard</string>
+       <string name="pubkey_import_parse_problem">Problem parsing imported private key</string>
+       <string name="pubkey_unlock">Unlock key</string>
+       <string name="pubkey_failed_add">Bad password for key \'%1$s\'. Authentication failed.</string>
+       <string name="pubkey_memory_load">Load into memory</string>
+       <string name="pubkey_memory_unload">Unload from memory</string>
+       <string name="pubkey_load_on_start">Load key on start</string>
+       <!-- Pubkey preference asking user whether the key use should be confirmed via prompt before it can be used for authentication -->
+       <string name="pubkey_confirm_use">Confirm before use</string>
+
+       <!-- Note that the '\n' splits lines, so it's actually "create port forwards" -->
+       <string name="portforward_list_empty">Tap "Menu" to create\nport forwards.</string>
+       <string name="portforward_edit">Edit port forward</string>
+       <string name="portforward_delete">Delete port forward</string>
+
+       <string name="prompt_nickname">Nickname:</string>
+       <!-- An example string that could be used as a nickname for a pubkey. -->
+       <string name="prompt_nickname_hint_pubkey">My work key</string>
+       <!-- The source TCP port for port forwards. -->
+       <string name="prompt_source_port">Source port:</string>
+       <!-- The "host:port" combination used for port forward destinations. -->
+       <string name="prompt_destination">Destination:</string>
+       <string name="prompt_old_password">Old password:</string>
+       <string name="prompt_password">Password:</string>
+       <!-- Added after a "Password:" prompt to indicate user needs to confirm entry. -->
+       <string name="prompt_again">(again)</string>
+       <!-- Label for the user to select port forward type. -->
+       <string name="prompt_type">Type:</string>
+       <string name="prompt_password_can_be_blank">Note: password can be blank</string>
+       <!-- Prompt for the size of the private key in bits. -->
+       <string name="prompt_bits">Bits:</string>
+
+       <!-- Prompt for the password to unlock a certain pubkey. -->
+       <string name="prompt_pubkey_password">Password for key \'%1$s\'</string>
+
+       <!-- Prompt for whether to allow SSH Authentication Agent to use the specified key. Note that the '\n' means split the line so it's actually "host to use key" -->
+       <string name="prompt_allow_agent_to_use_key">Allow remote host to\nuse key \'%1$s\'?</string>
+
+       <!-- The header of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning_header">WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</string>
+       <!-- The body of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning">IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\nSomeone could be eavesdropping on you right now (man-in-the-middle attack)!\nIt is also possible that the host key has just been changed.</string>
+
+       <!-- Prompt user gets when the remote host has disconnected unexpectedly. -->
+       <string name="prompt_host_disconnected">Host has disconnected.\nClose session?</string>
+       <!-- Prompt user must answer yes or no to when the remote host fails verification of encryption fingerprint -->
+       <string name="prompt_continue_connecting">Are you sure you want\nto continue connecting?</string>
+
+       <!-- Sent to user when the remote public encryption key fingerprint doesn't match the local database -->
+       <string name="host_authenticity_warning">The authenticity of host \'%1$s\' can\'t be established.</string>
+       <!-- First field is encryption algorithm. Second is the actual fingerprint in hex digits -->
+       <string name="host_fingerprint">Host %1$s key fingerprint is %2$s</string>
+
+       <string name="alert_passwords_do_not_match_msg">Passwords do not match!</string>
+       <string name="alert_wrong_password_msg">Wrong password!</string>
+       <string name="alert_key_corrupted_msg">Private key appears corrupt!</string>
+       <string name="alert_sdcard_absent">SD card is not inserted!</string>
+
+       <!-- Add a new item (e.g., host or pubkey) to the list. -->
+       <string name="button_add">Add</string>
+       <!-- Change an existing item's (e.g., host or pubkey) details. -->
+       <string name="button_change">Change</string>
+       <!-- Button that begins the generation of a public key pair. -->
+       <string name="button_generate">Generate Key</string>
+       <!-- Button that resizes the screen to the user-specified dimensions. -->
+       <string name="button_resize">Resize</string>
+
+       <string name="alert_disconnect_msg">Connection Lost</string>
+
+       <string name="msg_copyright">Copyright © 2007-2008 Kenny Root http://the-b.org/, Jeffrey Sharkey http://jsharkey.org/</string>
+
+       <!-- The category title for terminal emulation preferences. -->
+       <string name="pref_emulation_category">Terminal emulation</string>
+
+       <!-- Name for the emulation terminal type preference. -->
+       <string name="pref_emulation_title">Emulation mode</string>
+       <!-- Description of the emulation terminal type preference. -->
+       <string name="pref_emulation_summary">Terminal emulation mode to use for PTY connections</string>
+
+       <!-- Name for the scrollback size preference -->
+       <string name="pref_scrollback_title">Scrollback size</string>
+       <!-- Description of the scrollback size preference -->
+       <string name="pref_scrollback_summary">Size of scrollback buffer to keep in memory for each console</string>
+
+       <!-- The category title for user interface preferences -->
+       <string name="pref_ui_category">User interface</string>
+
+       <!-- Name for the rotation mode preference -->
+       <string name="pref_rotation_title">Rotation mode</string>
+       <!-- Summary for the rotation mode preference -->
+       <string name="pref_rotation_summary">How to change rotation when keyboard popped in/out</string>
+
+       <!-- Name for the full screen preference -->
+       <string name="pref_fullscreen_title">Full screen</string>
+       <!-- Summary for the full screen preference -->
+       <string name="pref_fullscreen_summary">Hide status bar while in console</string>
+
+       <!-- Name for the memorize keys preference -->
+       <string name="pref_memkeys_title">Remember keys in memory</string>
+       <!-- Summary for the memorize keys preference -->
+       <string name="pref_memkeys_summary">Keep unlocked keys in memory until backend service is terminated</string>
+
+       <!-- Name for the update check preference -->
+       <string name="pref_update_title">Update check</string>
+       <!-- Summary for the update check preference -->
+       <string name="pref_update_summary">Set the maximum frequency to check for ConnectBot updates</string>
+
+       <!-- Name for the preference that forces the service to stay running in the background.-->
+       <string name="pref_conn_persist_title">Persist connections</string>
+       <!-- Summary for the preference that forces the service to stay running in the background. -->
+       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+
+       <!-- Name for the keyboard shortcuts preference -->
+       <string name="pref_keymode_title">Directory shortcuts</string>
+       <!-- Summary for the keyboard shortcuts preference -->
+       <string name="pref_keymode_summary">Select how to use Alt for \'/\' and Shift for Tab</string>
+
+       <!-- Name for the camera shortcut usage preference -->
+       <string name="pref_camera_title">Camera shortcut</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_camera_summary">Select which shortcut to trigger when the camera button is pushed</string>
+
+       <!-- Name for the keep screen on preference -->
+       <string name="pref_keepalive_title">Keep screen awake</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_keepalive_summary">Prevent the screen from turning off when working in a console</string>
+
+       <!-- Name for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_title">Keep Wi-Fi active</string>
+       <!-- Summary for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_summary">Prevent Wi-Fi from turning off when a session is active</string>
+
+       <!-- Name for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_title">Bumpy arrows</string>
+       <!-- Summary for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_summary">Vibrate when sending arrow keys from trackball; useful for laggy connections</string>
+
+       <!-- Category title for the Terminal Bell preferences -->
+       <string name="pref_bell_category">Terminal bell</string>
+
+       <!-- Checkbox preference title for the audible terminal bell feature -->
+       <string name="pref_bell_title">Audible bell</string>
+
+       <!-- Title for the slider preference to set the volume -->
+       <string name="pref_bell_volume_title">Bell volume</string>
+
+       <!-- Checkbox preference title for the vibrate on terminal bell feature -->
+       <string name="pref_bell_vibrate_title">Vibrate on bell</string>
+
+       <!-- Checkbox preference title for the receive notifications on terminal bell feature -->
+       <string name="pref_bell_notification_title">Background notifications</string>
+       <!-- Brief summary of the feature that is enabled when the checkbox preference for the receive notifications on terminal bell feature is checked -->
+       <string name="pref_bell_notification_summary">Send notification when a terminal running in the background sounds a bell.</string>
+
+       <!-- Preference selection to indicate use of right side of keyboard for special shortcuts. -->
+       <string name="list_keymode_right">Use right-side keys</string>
+       <!-- Preference selection to indicate use of left side of keyboard for special shortcuts. -->
+       <string name="list_keymode_left">Use left-side keys</string>
+       <!-- Preference selection to indicate never to use special shortcut keys. -->
+       <string name="list_keymode_none">Disable</string>
+
+       <!-- Preference to not use pubkeys to authenticate to this host. -->
+       <string name="list_pubkeyids_none">Do not use keys</string>
+       <!-- Preference to use any pubkey to authenticate to this host. -->
+       <string name="list_pubkeyids_any">Use any unlocked key</string>
+
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_daily">Daily</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_weekly">Weekly</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_never">Never</string>
+
+       <!-- Host nickname field preference title -->
+       <string name="hostpref_nickname_title">Nickname</string>
+
+       <!-- Host color category preference title -->
+       <string name="hostpref_color_title">Color category</string>
+
+       <!-- Host's default font size when opening the terminal in points (pt) -->
+       <string name="hostpref_fontsize_title">Font size (pt)</string>
+
+       <!-- Host pubkey usage preference title -->
+       <string name="hostpref_pubkeyid_title">Use pubkey authentication</string>
+
+       <!-- Preference title for the SSH Authentication Agent Forwarding for a host connection -->
+       <string name="hostpref_authagent_title">Use SSH auth agent</string>
+
+       <!-- Host post-login automation preference title -->
+       <string name="hostpref_postlogin_title">Post-login automation</string>
+       <!-- Host post-login automation preference summary -->
+       <string name="hostpref_postlogin_summary">Commands to run on remote server once authenticated</string>
+
+       <!-- Host compression preference title -->
+       <string name="hostpref_compression_title">Compression</string>
+       <!-- Summary for compression preference -->
+       <string name="hostpref_compression_summary">This may help with slower networks</string>
+
+       <!-- Setting for whether we want a session to start up when we connect to a host -->
+       <string name="hostpref_wantsession_title">Start shell session</string>
+       <!-- Summary for field asking whether a shell session should be started up upon connection or not -->
+       <string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+
+       <!-- Setting for whether the host should be reconnected to automatically upon disconnect -->
+       <string name="hostpref_stayconnected_title">Stay connected</string>
+       <!-- Summary for preference asking whether the host should be reconnected to when it disconnects -->
+       <string name="hostpref_stayconnected_summary">Try to reconnect to host if disconnected</string>
+
+       <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_title">DEL Key</string>
+       <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+
+       <!-- Host character encoding preference title -->
+       <string name="hostpref_encoding_title">Encoding</string>
+       <!-- Host character encoding preference summary -->
+       <string name="hostpref_encoding_summary">Character encoding for the host</string>
+
+       <!-- Host preference category title for connection settings -->
+       <string name="hostpref_connection_category">Connection settings</string>
+
+       <!-- Username field title for host editor preference -->
+       <string name="hostpref_username_title">Username</string>
+
+       <!-- Hostname field title for host editor preference -->
+       <string name="hostpref_hostname_title">Host</string>
+
+       <!-- Port field title for host editor preference -->
+       <string name="hostpref_port_title">Port</string>
+
+       <!-- Displayed to indicate a host has never been connected to. -->
+       <string name="bind_never">Never connected</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than an hour. -->
+       <string name="bind_minutes">%1$s minutes ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than a day. -->
+       <string name="bind_hours">%1$s hours ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been a day or more. -->
+       <string name="bind_days">%1$s days ago</string>
+
+       <!-- Message given when user copies from the terminal. -->
+       <string name="console_copy_done">Copied %1$d bytes to clipboard</string>
+       <!-- Instructions for how to copy from the terminal. The '\n' entries are to split lines to improve readability and prevent wrapping off the screen. -->
+       <string name="console_copy_start">Touch and drag\nor use directional pad\nto select area to copy</string>
+
+       <!-- Button to close the disconnected terminal window. -->
+       <string name="console_menu_close">Close</string>
+       <!-- Button to begin copying from the terminal to the clipboard. -->
+       <string name="console_menu_copy">Copy</string>
+       <!-- Button to paste from the clipboard to the terminal. -->
+       <string name="console_menu_paste">Paste</string>
+       <!-- Button that brings user to the Port Forwards List. -->
+       <string name="console_menu_portforwards">Port Forwards</string>
+       <!-- Button that brings user to the terminal resizing dialog where they can force a size. -->
+       <string name="console_menu_resize">Force Size</string>
+       <!-- Button that brings up the list of URLs on the current screen -->
+       <string name="console_menu_urlscan">URL Scan</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. -->
+       <string name="portforward_remote">Remote</string>
+       <!-- Selection for a "dynamic" port forward. E.g., connections to a port listening locally is forwarded based on the SOCKS protocol to an arbitrary remote host and port. -->
+       <string name="portforward_dynamic">Dynamic (SOCKS)</string>
+       <!-- Button that commits the port forward to be made from the Port Forward Creation dialog. -->
+       <string name="portforward_pos">Create port forward</string>
+
+       <string name="portforward_done">Successfully created port forward</string>
+       <string name="portforward_problem">Problem creating port forward, maybe you\'re using ports under 1024 or port is already used?</string>
+
+       <string name="portforward_menu_add">Add port forward</string>
+
+       <!-- The string to present in the quick-connect box to hint the user to the format for connecting to hosts. -->
+       <string name="hint_userhost">user@hostname</string>
+
+       <!-- Hint given to user when the format they're using is incorrect in the quick-connect box. -->
+       <string name="list_format_error">Use the format "%1$s"</string>
+
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_username">username</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_hostname">hostname</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_port">port</string>
+
+       <string name="list_menu_pubkeys">Manage Pubkeys</string>
+       <!-- Selection choice to sort hosts by color. -->
+       <string name="list_menu_sortcolor">Sort by color</string>
+       <!-- Selection choice to sort hosts by nickname. -->
+       <string name="list_menu_sortname">Sort by name</string>
+       <string name="list_menu_settings">Settings</string>
+
+       <string name="list_host_disconnect">Disconnect</string>
+       <string name="list_host_edit">Edit host</string>
+       <string name="list_host_portforwards">Edit port forwards</string>
+       <string name="list_host_delete">Delete host</string>
+       <!-- Note that the '\n' splits the lines so it's actually "quick-connect box below to connect" -->
+       <string name="list_host_empty">Use the quick-connect box\nbelow to connect to a host.</string>
+
+       <!-- Default screen rotation preference selection -->
+       <string name="list_rotation_default">Default</string>
+       <string name="list_rotation_land">Force landscape</string>
+       <string name="list_rotation_port">Force portrait</string>
+       <!-- Selection to indicate the rotation should be selected automatically based on the tilt sensor. -->
+       <string name="list_rotation_auto">Automatic</string>
+
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A then Space". -->
+       <string name="list_camera_ctrlaspace">Ctrl+A then Space</string>
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A". -->
+       <string name="list_camera_ctrla">Ctrl+A</string>
+       <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
+       <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
+       <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
+       <string name="list_camera_none">None</string>
+
+       <!-- Name for the backspace character -->
+       <string name="list_delkey_backspace">Backspace</string>
+       <!-- Name for the ASCII DEL character -->
+       <string name="list_delkey_del">Delete</string>
+
+       <string name="delete_message">Are you sure you want to delete \'%1$s\'?</string>
+       <string name="delete_pos">Yes, delete</string>
+       <string name="delete_neg">Cancel</string>
+
+       <!-- Button to agree to license terms. -->
+       <string name="wizard_agree">Agree</string>
+       <!-- Button to go to the next page in the first time start-up wizard. -->
+       <string name="wizard_next">Next</string>
+       <!-- Button to go to the previous page in the first time start-up wizard. -->
+       <string name="wizard_back">Back</string>
+
+       <string name="terminal_no_hosts_connected">No hosts currently connected</string>
+
+       <!-- Displayed in terminal when attempting to connect to a host. The first two
+            variables are host:port and the third is the protocol (e.g., SSH) -->
+       <string name="terminal_connecting">Connecting to %1$s:%2$d via %3$s</string>
+
+       <!-- Displays the host key to the user in the terminal -->
+       <string name="terminal_sucess">Verified host \'%1$s\' key: %2$s</string>
+       <string name="terminal_failed">Host key verification failed.</string>
+
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_s2c_algorithm">Server-to-client algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_c2s_algorithm">Client-to-server algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_algorithm">Using algorithm: %1$s %2$s</string>
+
+       <string name="terminal_auth">Trying to authenticate</string>
+
+       <string name="terminal_auth_pass">Attempting \'password\' authentication</string>
+       <string name="terminal_auth_pass_fail">Authentication method \'password\' failed</string>
+
+       <string name="terminal_auth_pubkey_any">Attempting \'publickey\' authentication with any in-memory public keys</string>
+       <string name="terminal_auth_pubkey_invalid">Selected public key is invalid, try reselecting key in host editor</string>
+       <string name="terminal_auth_pubkey_specific">Attempting \'publickey\' authentication with a specific public key</string>
+       <string name="terminal_auth_pubkey_fail">Authentication method \'publickey\' with key \'%1$s\' failed</string>
+
+       <string name="terminal_auth_ki">Attempting \'keyboard-interactive\' authentication</string>
+       <string name="terminal_auth_ki_fail">Authentication method \'keyboard-interactive\' failed</string>
+
+       <string name="terminal_auth_fail">[Your host doesn\'t support \'password\' or \'keyboard-interactive\' authentication.]</string>
+
+       <string name="terminal_no_session">Session will not be started due to host preference.</string>
+       <string name="terminal_enable_portfoward">Enable port forward: %1$s</string>
+
+       <string name="local_shell_unavailable">Failure! Local shell is unavailable on this phone.</string>
+
+       <!-- Text sent to the user to alert them that a Terminal Bell is received in a background session -->
+       <string name="notification_text">%1$s wants your attention.</string>
+
+       <!-- Dialog title when a new version of ConnectBot is detected. -->
+       <string name="upgrade">New version</string>
+       <!-- Button selection to upgrade to the latest ConnectBot when one is available. -->
+       <string name="upgrade_pos">Yes, upgrade</string>
+       <!-- Button selection to skip upgrading to the latest ConnectBot when one is available. -->
+       <string name="upgrade_neg">Not right now</string>
+
+       <!-- Preference selection for SSH Authentication Agent to never use pubkeys -->
+       <string name="no">No</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys "with confirmation" only -->
+       <string name="with_confirmation">With confirmation</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys -->
+       <string name="yes">Yes</string>
+
+       <!-- String displayed to user when they're asked to submit exceptions to the ConnectBot developers -->
+       <string name="exceptions_submit_message">It appears ConnectBot had a problem last time it ran.  Submit error report to ConnectBot developers?</string>
+
+       <!-- Menu selection to reset colors to their defaults. -->
+       <string name="menu_colors_reset">Reset</string>
+
+       <!-- Displayed in the notification bar that connections are active -->
+       <string name="app_is_running">ConnectBot is running</string>
+
+       <string name="color_red">red</string>
+       <string name="color_green">green</string>
+       <string name="color_blue">blue</string>
+       <string name="color_gray">gray</string>
+</resources>
index 43338b6..fe15cc0 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index ab62918..7815a10 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Ingen</string>
 
index be5d760..cd882ac 100644 (file)
        <string name="pref_update_summary">Stel de maximale frequentie in om te controleren voor ConnectBot updates</string>
 
        <!-- Name for the preference that forces the service to stay running in the background.-->
-       <string name="pref_conn_persist_title">Persist connections</string>
+       <string name="pref_conn_persist_title">Behoud verbindingen</string>
        <!-- Summary for the preference that forces the service to stay running in the background. -->
-       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+       <string name="pref_conn_persist_summary">Forceer dat de verbindingen actief blijven op de achtergrond</string>
 
        <!-- Name for the keyboard shortcuts preference -->
        <string name="pref_keymode_title">Folder snelkoppelingen</string>
        <string name="hostpref_color_title">Kleur catogorie</string>
 
        <!-- Host's default font size when opening the terminal in points (pt) -->
-       <string name="hostpref_fontsize_title">Font size (pt)</string>
+       <string name="hostpref_fontsize_title">Lettergrootte</string>
 
        <!-- Host pubkey usage preference title -->
        <string name="hostpref_pubkeyid_title">Gebruik pubkey authenticatie</string>
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Geen</string>
 
        <string name="exceptions_submit_message">Het lijkt erop dat ConnectBot een probleem had de laatste keer dat het gebruikt werd. Wilt u een foutenrapport naar de ConnectBot ontwikkelaars sturen?</string>
 
        <!-- Menu selection to reset colors to their defaults. -->
-       <string name="menu_colors_reset">Reset</string>
+       <string name="menu_colors_reset">Terug naar standaardinstellingen</string>
 
        <!-- Displayed in the notification bar that connections are active -->
-       <string name="app_is_running">ConnectBot is running</string>
+       <string name="app_is_running">ConnectBot werkt (Connecties zijn actief)</string>
 
        <string name="color_red">rood</string>
        <string name="color_green">groen</string>
diff --git a/res/values-oc/strings.xml b/res/values-oc/strings.xml
new file mode 100644 (file)
index 0000000..86fb29a
--- /dev/null
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2007 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+       <string name="app_desc">Un client SSH simple, open-source e poderós.</string>
+
+       <!-- Window title for the Host List -->
+       <string name="title_hosts_list">Òstes</string>
+       <!-- Window title for the Pubkeys List -->
+       <string name="title_pubkey_list">Claus publicas</string>
+       <!-- Window title for the Port Forwards List -->
+       <string name="title_port_forwards_list">Redireccions de pòrts</string>
+       <!-- Window title when editing host details -->
+       <string name="title_host_editor">Modificar lo servidor</string>
+       <!-- Window title for Help index -->
+       <string name="title_help">Ajuda</string>
+       <!-- Window title for color list editing screen -->
+       <string name="title_colors">Colors</string>
+
+       <string name="resolve_connect">Connexion</string>
+       <!-- Menu selection where user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="resolve_entropy">Generacion d\'aleatòri</string>
+
+       <string name="menu_insert">Apondre un servidor</string>
+       <string name="menu_delete">Supprimir lo servidor</string>
+       <string name="menu_preferences">Preferéncias</string>
+
+       <string name="help_intro">Seleccionatz un subjècte çaijós per mai d\'entresenhas.</string>
+       <string name="help_about">A prepaus de ConnectBot</string>
+       <string name="help_keyboard">Clavièr</string>
+
+       <string name="pubkey_generate">Generar</string>
+       <string name="pubkey_import">Importar</string>
+       <string name="pubkey_delete">Suprimir la clau</string>
+       <!-- Dialog title when user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="pubkey_gather_entropy">Generacion d\'aleatòri</string>
+       <string name="pubkey_touch_prompt">Tocatz aquesta bóstia per recuperar un nombre aleatòri : %1$d%% fach</string>
+       <string name="pubkey_touch_hint">In order to assure randomness during the key generation, move your finger randomly over the box below.</string>
+       <string name="pubkey_generating">Generating key pair...</string>
+       <string name="pubkey_copy_private">Copy private key</string>
+       <string name="pubkey_copy_public">Copy public key</string>
+       <!-- Note that the '\n' just splits lines, so it's actually "create or import" -->
+       <string name="pubkey_list_empty">Tap "Menu" to create\nor import key pairs.</string>
+       <string name="pubkey_unknown_format">Unknown format</string>
+       <string name="pubkey_change_password">Modificar lo senhal</string>
+       <string name="pubkey_list_pick">Recuperar dempuèi /sdcard</string>
+       <string name="pubkey_import_parse_problem">Problem parsing imported private key</string>
+       <string name="pubkey_unlock">Unlock key</string>
+       <string name="pubkey_failed_add">Bad password for key \'%1$s\'. Authentication failed.</string>
+       <string name="pubkey_memory_load">Load into memory</string>
+       <string name="pubkey_memory_unload">Unload from memory</string>
+       <string name="pubkey_load_on_start">Load key on start</string>
+       <!-- Pubkey preference asking user whether the key use should be confirmed via prompt before it can be used for authentication -->
+       <string name="pubkey_confirm_use">Confirm before use</string>
+
+       <!-- Note that the '\n' splits lines, so it's actually "create port forwards" -->
+       <string name="portforward_list_empty">Tap "Menu" to create\nport forwards.</string>
+       <string name="portforward_edit">Edit port forward</string>
+       <string name="portforward_delete">Delete port forward</string>
+
+       <string name="prompt_nickname">Escais :</string>
+       <!-- An example string that could be used as a nickname for a pubkey. -->
+       <string name="prompt_nickname_hint_pubkey">My work key</string>
+       <!-- The source TCP port for port forwards. -->
+       <string name="prompt_source_port">Source port:</string>
+       <!-- The "host:port" combination used for port forward destinations. -->
+       <string name="prompt_destination">Destination:</string>
+       <string name="prompt_old_password">Old password:</string>
+       <string name="prompt_password">Senhal :</string>
+       <!-- Added after a "Password:" prompt to indicate user needs to confirm entry. -->
+       <string name="prompt_again">(encara)</string>
+       <!-- Label for the user to select port forward type. -->
+       <string name="prompt_type">Tipe :</string>
+       <string name="prompt_password_can_be_blank">Note: password can be blank</string>
+       <!-- Prompt for the size of the private key in bits. -->
+       <string name="prompt_bits">Bits :</string>
+
+       <!-- Prompt for the password to unlock a certain pubkey. -->
+       <string name="prompt_pubkey_password">Password for key \'%1$s\'</string>
+
+       <!-- Prompt for whether to allow SSH Authentication Agent to use the specified key. Note that the '\n' means split the line so it's actually "host to use key" -->
+       <string name="prompt_allow_agent_to_use_key">Allow remote host to\nuse key \'%1$s\'?</string>
+
+       <!-- The header of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning_header">WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</string>
+       <!-- The body of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning">IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\nSomeone could be eavesdropping on you right now (man-in-the-middle attack)!\nIt is also possible that the host key has just been changed.</string>
+
+       <!-- Prompt user gets when the remote host has disconnected unexpectedly. -->
+       <string name="prompt_host_disconnected">Host has disconnected.\nClose session?</string>
+       <!-- Prompt user must answer yes or no to when the remote host fails verification of encryption fingerprint -->
+       <string name="prompt_continue_connecting">Are you sure you want\nto continue connecting?</string>
+
+       <!-- Sent to user when the remote public encryption key fingerprint doesn't match the local database -->
+       <string name="host_authenticity_warning">The authenticity of host \'%1$s\' can\'t be established.</string>
+       <!-- First field is encryption algorithm. Second is the actual fingerprint in hex digits -->
+       <string name="host_fingerprint">Host %1$s key fingerprint is %2$s</string>
+
+       <string name="alert_passwords_do_not_match_msg">Passwords do not match!</string>
+       <string name="alert_wrong_password_msg">Wrong password!</string>
+       <string name="alert_key_corrupted_msg">Private key appears corrupt!</string>
+       <string name="alert_sdcard_absent">SD card is not inserted!</string>
+
+       <!-- Add a new item (e.g., host or pubkey) to the list. -->
+       <string name="button_add">Add</string>
+       <!-- Change an existing item's (e.g., host or pubkey) details. -->
+       <string name="button_change">Change</string>
+       <!-- Button that begins the generation of a public key pair. -->
+       <string name="button_generate">Generate Key</string>
+       <!-- Button that resizes the screen to the user-specified dimensions. -->
+       <string name="button_resize">Resize</string>
+
+       <string name="alert_disconnect_msg">Connection Lost</string>
+
+       <string name="msg_copyright">Copyright © 2007-2008 Kenny Root http://the-b.org/, Jeffrey Sharkey http://jsharkey.org/</string>
+
+       <!-- The category title for terminal emulation preferences. -->
+       <string name="pref_emulation_category">Terminal emulation</string>
+
+       <!-- Name for the emulation terminal type preference. -->
+       <string name="pref_emulation_title">Emulation mode</string>
+       <!-- Description of the emulation terminal type preference. -->
+       <string name="pref_emulation_summary">Terminal emulation mode to use for PTY connections</string>
+
+       <!-- Name for the scrollback size preference -->
+       <string name="pref_scrollback_title">Scrollback size</string>
+       <!-- Description of the scrollback size preference -->
+       <string name="pref_scrollback_summary">Size of scrollback buffer to keep in memory for each console</string>
+
+       <!-- The category title for user interface preferences -->
+       <string name="pref_ui_category">User interface</string>
+
+       <!-- Name for the rotation mode preference -->
+       <string name="pref_rotation_title">Rotation mode</string>
+       <!-- Summary for the rotation mode preference -->
+       <string name="pref_rotation_summary">How to change rotation when keyboard popped in/out</string>
+
+       <!-- Name for the full screen preference -->
+       <string name="pref_fullscreen_title">Full screen</string>
+       <!-- Summary for the full screen preference -->
+       <string name="pref_fullscreen_summary">Hide status bar while in console</string>
+
+       <!-- Name for the memorize keys preference -->
+       <string name="pref_memkeys_title">Remember keys in memory</string>
+       <!-- Summary for the memorize keys preference -->
+       <string name="pref_memkeys_summary">Keep unlocked keys in memory until backend service is terminated</string>
+
+       <!-- Name for the update check preference -->
+       <string name="pref_update_title">Update check</string>
+       <!-- Summary for the update check preference -->
+       <string name="pref_update_summary">Set the maximum frequency to check for ConnectBot updates</string>
+
+       <!-- Name for the preference that forces the service to stay running in the background.-->
+       <string name="pref_conn_persist_title">Persist connections</string>
+       <!-- Summary for the preference that forces the service to stay running in the background. -->
+       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+
+       <!-- Name for the keyboard shortcuts preference -->
+       <string name="pref_keymode_title">Directory shortcuts</string>
+       <!-- Summary for the keyboard shortcuts preference -->
+       <string name="pref_keymode_summary">Select how to use Alt for \'/\' and Shift for Tab</string>
+
+       <!-- Name for the camera shortcut usage preference -->
+       <string name="pref_camera_title">Camera shortcut</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_camera_summary">Select which shortcut to trigger when the camera button is pushed</string>
+
+       <!-- Name for the keep screen on preference -->
+       <string name="pref_keepalive_title">Keep screen awake</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_keepalive_summary">Prevent the screen from turning off when working in a console</string>
+
+       <!-- Name for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_title">Keep Wi-Fi active</string>
+       <!-- Summary for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_summary">Prevent Wi-Fi from turning off when a session is active</string>
+
+       <!-- Name for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_title">Bumpy arrows</string>
+       <!-- Summary for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_summary">Vibrate when sending arrow keys from trackball; useful for laggy connections</string>
+
+       <!-- Category title for the Terminal Bell preferences -->
+       <string name="pref_bell_category">Terminal bell</string>
+
+       <!-- Checkbox preference title for the audible terminal bell feature -->
+       <string name="pref_bell_title">Audible bell</string>
+
+       <!-- Title for the slider preference to set the volume -->
+       <string name="pref_bell_volume_title">Bell volume</string>
+
+       <!-- Checkbox preference title for the vibrate on terminal bell feature -->
+       <string name="pref_bell_vibrate_title">Vibrate on bell</string>
+
+       <!-- Checkbox preference title for the receive notifications on terminal bell feature -->
+       <string name="pref_bell_notification_title">Background notifications</string>
+       <!-- Brief summary of the feature that is enabled when the checkbox preference for the receive notifications on terminal bell feature is checked -->
+       <string name="pref_bell_notification_summary">Send notification when a terminal running in the background sounds a bell.</string>
+
+       <!-- Preference selection to indicate use of right side of keyboard for special shortcuts. -->
+       <string name="list_keymode_right">Use right-side keys</string>
+       <!-- Preference selection to indicate use of left side of keyboard for special shortcuts. -->
+       <string name="list_keymode_left">Use left-side keys</string>
+       <!-- Preference selection to indicate never to use special shortcut keys. -->
+       <string name="list_keymode_none">Disable</string>
+
+       <!-- Preference to not use pubkeys to authenticate to this host. -->
+       <string name="list_pubkeyids_none">Do not use keys</string>
+       <!-- Preference to use any pubkey to authenticate to this host. -->
+       <string name="list_pubkeyids_any">Use any unlocked key</string>
+
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_daily">Daily</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_weekly">Weekly</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_never">Never</string>
+
+       <!-- Host nickname field preference title -->
+       <string name="hostpref_nickname_title">Nickname</string>
+
+       <!-- Host color category preference title -->
+       <string name="hostpref_color_title">Color category</string>
+
+       <!-- Host's default font size when opening the terminal in points (pt) -->
+       <string name="hostpref_fontsize_title">Font size (pt)</string>
+
+       <!-- Host pubkey usage preference title -->
+       <string name="hostpref_pubkeyid_title">Use pubkey authentication</string>
+
+       <!-- Preference title for the SSH Authentication Agent Forwarding for a host connection -->
+       <string name="hostpref_authagent_title">Use SSH auth agent</string>
+
+       <!-- Host post-login automation preference title -->
+       <string name="hostpref_postlogin_title">Post-login automation</string>
+       <!-- Host post-login automation preference summary -->
+       <string name="hostpref_postlogin_summary">Commands to run on remote server once authenticated</string>
+
+       <!-- Host compression preference title -->
+       <string name="hostpref_compression_title">Compression</string>
+       <!-- Summary for compression preference -->
+       <string name="hostpref_compression_summary">This may help with slower networks</string>
+
+       <!-- Setting for whether we want a session to start up when we connect to a host -->
+       <string name="hostpref_wantsession_title">Start shell session</string>
+       <!-- Summary for field asking whether a shell session should be started up upon connection or not -->
+       <string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+
+       <!-- Setting for whether the host should be reconnected to automatically upon disconnect -->
+       <string name="hostpref_stayconnected_title">Stay connected</string>
+       <!-- Summary for preference asking whether the host should be reconnected to when it disconnects -->
+       <string name="hostpref_stayconnected_summary">Try to reconnect to host if disconnected</string>
+
+       <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_title">DEL Key</string>
+       <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+
+       <!-- Host character encoding preference title -->
+       <string name="hostpref_encoding_title">Encoding</string>
+       <!-- Host character encoding preference summary -->
+       <string name="hostpref_encoding_summary">Character encoding for the host</string>
+
+       <!-- Host preference category title for connection settings -->
+       <string name="hostpref_connection_category">Connection settings</string>
+
+       <!-- Username field title for host editor preference -->
+       <string name="hostpref_username_title">Username</string>
+
+       <!-- Hostname field title for host editor preference -->
+       <string name="hostpref_hostname_title">Host</string>
+
+       <!-- Port field title for host editor preference -->
+       <string name="hostpref_port_title">Port</string>
+
+       <!-- Displayed to indicate a host has never been connected to. -->
+       <string name="bind_never">Never connected</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than an hour. -->
+       <string name="bind_minutes">%1$s minutes ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than a day. -->
+       <string name="bind_hours">%1$s hours ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been a day or more. -->
+       <string name="bind_days">%1$s days ago</string>
+
+       <!-- Message given when user copies from the terminal. -->
+       <string name="console_copy_done">Copied %1$d bytes to clipboard</string>
+       <!-- Instructions for how to copy from the terminal. The '\n' entries are to split lines to improve readability and prevent wrapping off the screen. -->
+       <string name="console_copy_start">Touch and drag\nor use directional pad\nto select area to copy</string>
+
+       <!-- Button to close the disconnected terminal window. -->
+       <string name="console_menu_close">Close</string>
+       <!-- Button to begin copying from the terminal to the clipboard. -->
+       <string name="console_menu_copy">Copy</string>
+       <!-- Button to paste from the clipboard to the terminal. -->
+       <string name="console_menu_paste">Paste</string>
+       <!-- Button that brings user to the Port Forwards List. -->
+       <string name="console_menu_portforwards">Port Forwards</string>
+       <!-- Button that brings user to the terminal resizing dialog where they can force a size. -->
+       <string name="console_menu_resize">Force Size</string>
+       <!-- Button that brings up the list of URLs on the current screen -->
+       <string name="console_menu_urlscan">URL Scan</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. -->
+       <string name="portforward_remote">Remote</string>
+       <!-- Selection for a "dynamic" port forward. E.g., connections to a port listening locally is forwarded based on the SOCKS protocol to an arbitrary remote host and port. -->
+       <string name="portforward_dynamic">Dynamic (SOCKS)</string>
+       <!-- Button that commits the port forward to be made from the Port Forward Creation dialog. -->
+       <string name="portforward_pos">Create port forward</string>
+
+       <string name="portforward_done">Successfully created port forward</string>
+       <string name="portforward_problem">Problem creating port forward, maybe you\'re using ports under 1024 or port is already used?</string>
+
+       <string name="portforward_menu_add">Add port forward</string>
+
+       <!-- The string to present in the quick-connect box to hint the user to the format for connecting to hosts. -->
+       <string name="hint_userhost">user@hostname</string>
+
+       <!-- Hint given to user when the format they're using is incorrect in the quick-connect box. -->
+       <string name="list_format_error">Use the format "%1$s"</string>
+
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_username">username</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_hostname">hostname</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_port">port</string>
+
+       <string name="list_menu_pubkeys">Manage Pubkeys</string>
+       <!-- Selection choice to sort hosts by color. -->
+       <string name="list_menu_sortcolor">Sort by color</string>
+       <!-- Selection choice to sort hosts by nickname. -->
+       <string name="list_menu_sortname">Sort by name</string>
+       <string name="list_menu_settings">Settings</string>
+
+       <string name="list_host_disconnect">Disconnect</string>
+       <string name="list_host_edit">Edit host</string>
+       <string name="list_host_portforwards">Edit port forwards</string>
+       <string name="list_host_delete">Delete host</string>
+       <!-- Note that the '\n' splits the lines so it's actually "quick-connect box below to connect" -->
+       <string name="list_host_empty">Use the quick-connect box\nbelow to connect to a host.</string>
+
+       <!-- Default screen rotation preference selection -->
+       <string name="list_rotation_default">Default</string>
+       <string name="list_rotation_land">Force landscape</string>
+       <string name="list_rotation_port">Force portrait</string>
+       <!-- Selection to indicate the rotation should be selected automatically based on the tilt sensor. -->
+       <string name="list_rotation_auto">Automatic</string>
+
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A then Space". -->
+       <string name="list_camera_ctrlaspace">Ctrl+A then Space</string>
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A". -->
+       <string name="list_camera_ctrla">Ctrl+A</string>
+       <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
+       <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
+       <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
+       <string name="list_camera_none">None</string>
+
+       <!-- Name for the backspace character -->
+       <string name="list_delkey_backspace">Backspace</string>
+       <!-- Name for the ASCII DEL character -->
+       <string name="list_delkey_del">Delete</string>
+
+       <string name="delete_message">Are you sure you want to delete \'%1$s\'?</string>
+       <string name="delete_pos">Yes, delete</string>
+       <string name="delete_neg">Cancel</string>
+
+       <!-- Button to agree to license terms. -->
+       <string name="wizard_agree">Agree</string>
+       <!-- Button to go to the next page in the first time start-up wizard. -->
+       <string name="wizard_next">Next</string>
+       <!-- Button to go to the previous page in the first time start-up wizard. -->
+       <string name="wizard_back">Back</string>
+
+       <string name="terminal_no_hosts_connected">No hosts currently connected</string>
+
+       <!-- Displayed in terminal when attempting to connect to a host. The first two
+            variables are host:port and the third is the protocol (e.g., SSH) -->
+       <string name="terminal_connecting">Connecting to %1$s:%2$d via %3$s</string>
+
+       <!-- Displays the host key to the user in the terminal -->
+       <string name="terminal_sucess">Verified host \'%1$s\' key: %2$s</string>
+       <string name="terminal_failed">Host key verification failed.</string>
+
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_s2c_algorithm">Server-to-client algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_c2s_algorithm">Client-to-server algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_algorithm">Using algorithm: %1$s %2$s</string>
+
+       <string name="terminal_auth">Trying to authenticate</string>
+
+       <string name="terminal_auth_pass">Attempting \'password\' authentication</string>
+       <string name="terminal_auth_pass_fail">Authentication method \'password\' failed</string>
+
+       <string name="terminal_auth_pubkey_any">Attempting \'publickey\' authentication with any in-memory public keys</string>
+       <string name="terminal_auth_pubkey_invalid">Selected public key is invalid, try reselecting key in host editor</string>
+       <string name="terminal_auth_pubkey_specific">Attempting \'publickey\' authentication with a specific public key</string>
+       <string name="terminal_auth_pubkey_fail">Authentication method \'publickey\' with key \'%1$s\' failed</string>
+
+       <string name="terminal_auth_ki">Attempting \'keyboard-interactive\' authentication</string>
+       <string name="terminal_auth_ki_fail">Authentication method \'keyboard-interactive\' failed</string>
+
+       <string name="terminal_auth_fail">[Your host doesn\'t support \'password\' or \'keyboard-interactive\' authentication.]</string>
+
+       <string name="terminal_no_session">Session will not be started due to host preference.</string>
+       <string name="terminal_enable_portfoward">Enable port forward: %1$s</string>
+
+       <string name="local_shell_unavailable">Failure! Local shell is unavailable on this phone.</string>
+
+       <!-- Text sent to the user to alert them that a Terminal Bell is received in a background session -->
+       <string name="notification_text">%1$s wants your attention.</string>
+
+       <!-- Dialog title when a new version of ConnectBot is detected. -->
+       <string name="upgrade">New version</string>
+       <!-- Button selection to upgrade to the latest ConnectBot when one is available. -->
+       <string name="upgrade_pos">Yes, upgrade</string>
+       <!-- Button selection to skip upgrading to the latest ConnectBot when one is available. -->
+       <string name="upgrade_neg">Not right now</string>
+
+       <!-- Preference selection for SSH Authentication Agent to never use pubkeys -->
+       <string name="no">No</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys "with confirmation" only -->
+       <string name="with_confirmation">With confirmation</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys -->
+       <string name="yes">Yes</string>
+
+       <!-- String displayed to user when they're asked to submit exceptions to the ConnectBot developers -->
+       <string name="exceptions_submit_message">It appears ConnectBot had a problem last time it ran.  Submit error report to ConnectBot developers?</string>
+
+       <!-- Menu selection to reset colors to their defaults. -->
+       <string name="menu_colors_reset">Reset</string>
+
+       <!-- Displayed in the notification bar that connections are active -->
+       <string name="app_is_running">ConnectBot is running</string>
+
+       <string name="color_red">red</string>
+       <string name="color_green">green</string>
+       <string name="color_blue">blue</string>
+       <string name="color_gray">gray</string>
+</resources>
index 22ef630..cff46f7 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Żaden</string>
 
index c709087..7a520a5 100644 (file)
        <string name="msg_copyright">Copyright © 2007-2008 Kenny Root http://the-b.org/, Jeffrey Sharkey http://jsharkey.org/</string>
 
        <!-- The category title for terminal emulation preferences. -->
-       <string name="pref_emulation_category">Terminal emulation</string>
+       <string name="pref_emulation_category">Emulação de Terminal</string>
 
        <!-- Name for the emulation terminal type preference. -->
-       <string name="pref_emulation_title">Emulation mode</string>
+       <string name="pref_emulation_title">Modo De Emulação</string>
        <!-- Description of the emulation terminal type preference. -->
-       <string name="pref_emulation_summary">Terminal emulation mode to use for PTY connections</string>
+       <string name="pref_emulation_summary">Modo de emulação de terminal para usar em conexões PTY</string>
 
        <!-- Name for the scrollback size preference -->
        <string name="pref_scrollback_title">Scrollback size</string>
        <string name="pref_scrollback_summary">Size of scrollback buffer to keep in memory for each console</string>
 
        <!-- The category title for user interface preferences -->
-       <string name="pref_ui_category">User interface</string>
+       <string name="pref_ui_category">Interface do usuário</string>
 
        <!-- Name for the rotation mode preference -->
-       <string name="pref_rotation_title">Rotation mode</string>
+       <string name="pref_rotation_title">Modo de Rotação</string>
        <!-- Summary for the rotation mode preference -->
        <string name="pref_rotation_summary">How to change rotation when keyboard popped in/out</string>
 
        <!-- Name for the full screen preference -->
-       <string name="pref_fullscreen_title">Full screen</string>
+       <string name="pref_fullscreen_title">Tela cheia</string>
        <!-- Summary for the full screen preference -->
        <string name="pref_fullscreen_summary">Hide status bar while in console</string>
 
        <!-- Name for the memorize keys preference -->
-       <string name="pref_memkeys_title">Remember keys in memory</string>
+       <string name="pref_memkeys_title">Lembrar as chaves na memória</string>
        <!-- Summary for the memorize keys preference -->
        <string name="pref_memkeys_summary">Keep unlocked keys in memory until backend service is terminated</string>
 
        <!-- Name for the update check preference -->
-       <string name="pref_update_title">Update check</string>
+       <string name="pref_update_title">Verificar Atualização</string>
        <!-- Summary for the update check preference -->
        <string name="pref_update_summary">Set the maximum frequency to check for ConnectBot updates</string>
 
        <!-- Name for the preference that forces the service to stay running in the background.-->
        <string name="pref_conn_persist_title">Persist connections</string>
        <!-- Summary for the preference that forces the service to stay running in the background. -->
-       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+       <string name="pref_conn_persist_summary">Força as conexões para ficarem conectadas enquanto estão em segundo plano</string>
 
        <!-- Name for the keyboard shortcuts preference -->
-       <string name="pref_keymode_title">Directory shortcuts</string>
+       <string name="pref_keymode_title">Atalhos dos Diretórios</string>
        <!-- Summary for the keyboard shortcuts preference -->
        <string name="pref_keymode_summary">Select how to use Alt for \'/\' and Shift for Tab</string>
 
        <!-- Name for the camera shortcut usage preference -->
-       <string name="pref_camera_title">Camera shortcut</string>
+       <string name="pref_camera_title">Atalho para Câmera</string>
        <!-- Summary for the camera shortcut usage preference -->
        <string name="pref_camera_summary">Select which shortcut to trigger when the camera button is pushed</string>
 
        <!-- Name for the keep screen on preference -->
-       <string name="pref_keepalive_title">Keep screen awake</string>
+       <string name="pref_keepalive_title">Manter a tela ativa</string>
        <!-- Summary for the camera shortcut usage preference -->
        <string name="pref_keepalive_summary">Prevent the screen from turning off when working in a console</string>
 
        <!-- Name for the Wi-Fi lock preference -->
-       <string name="pref_wifilock_title">Keep Wi-Fi active</string>
+       <string name="pref_wifilock_title">Manter WI-FI ativo</string>
        <!-- Summary for the Wi-Fi lock preference -->
        <string name="pref_wifilock_summary">Prevent Wi-Fi from turning off when a session is active</string>
 
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index b1975d8..8279e3d 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index f1f94cd..0ead3b6 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Нет</string>
 
        <string name="menu_colors_reset">Сбросить</string>
 
        <!-- Displayed in the notification bar that connections are active -->
-       <string name="app_is_running">ConnectBot is running</string>
+       <string name="app_is_running">ConnectBot запущен</string>
 
        <string name="color_red">красный</string>
        <string name="color_green">зелёный</string>
index 708b291..0fe9282 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Žiadny</string>
 
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
new file mode 100644 (file)
index 0000000..7b75dce
--- /dev/null
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2007 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+       <string name="app_desc">Enostaven, močan, odprtokodni SSH odjemalec</string>
+
+       <!-- Window title for the Host List -->
+       <string name="title_hosts_list">Gostitelji</string>
+       <!-- Window title for the Pubkeys List -->
+       <string name="title_pubkey_list">Pubkeys</string>
+       <!-- Window title for the Port Forwards List -->
+       <string name="title_port_forwards_list">Port forwards</string>
+       <!-- Window title when editing host details -->
+       <string name="title_host_editor">Uredi gostitelja</string>
+       <!-- Window title for Help index -->
+       <string name="title_help">Pomoč</string>
+       <!-- Window title for color list editing screen -->
+       <string name="title_colors">Barve</string>
+
+       <string name="resolve_connect">Poveži</string>
+       <!-- Menu selection where user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="resolve_entropy">Gather Entropy</string>
+
+       <string name="menu_insert">Dodaj gostitelja</string>
+       <string name="menu_delete">Odstrani gostitelja</string>
+       <string name="menu_preferences">Možnosti</string>
+
+       <string name="help_intro">Please select a topic below for more information on a particular subject.</string>
+       <string name="help_about">Vizitka</string>
+       <string name="help_keyboard">Tipkovnica</string>
+
+       <string name="pubkey_generate">Generate</string>
+       <string name="pubkey_import">Uvozi javni ključ</string>
+       <string name="pubkey_delete">Zbriši ključ</string>
+       <!-- Dialog title when user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="pubkey_gather_entropy">Pridobivanje entropije</string>
+       <string name="pubkey_touch_prompt">Touch this box to gather randomness: %1$d%% done</string>
+       <string name="pubkey_touch_hint">In order to assure randomness during the key generation, move your finger randomly over the box below.</string>
+       <string name="pubkey_generating">Generating key pair...</string>
+       <string name="pubkey_copy_private">Copy private key</string>
+       <string name="pubkey_copy_public">Copy public key</string>
+       <!-- Note that the '\n' just splits lines, so it's actually "create or import" -->
+       <string name="pubkey_list_empty">Tap "Menu" to create\nor import key pairs.</string>
+       <string name="pubkey_unknown_format">Unknown format</string>
+       <string name="pubkey_change_password">Change password</string>
+       <string name="pubkey_list_pick">Pick from /sdcard</string>
+       <string name="pubkey_import_parse_problem">Problem parsing imported private key</string>
+       <string name="pubkey_unlock">Unlock key</string>
+       <string name="pubkey_failed_add">Bad password for key \'%1$s\'. Authentication failed.</string>
+       <string name="pubkey_memory_load">Load into memory</string>
+       <string name="pubkey_memory_unload">Unload from memory</string>
+       <string name="pubkey_load_on_start">Load key on start</string>
+       <!-- Pubkey preference asking user whether the key use should be confirmed via prompt before it can be used for authentication -->
+       <string name="pubkey_confirm_use">Confirm before use</string>
+
+       <!-- Note that the '\n' splits lines, so it's actually "create port forwards" -->
+       <string name="portforward_list_empty">Tap "Menu" to create\nport forwards.</string>
+       <string name="portforward_edit">Edit port forward</string>
+       <string name="portforward_delete">Delete port forward</string>
+
+       <string name="prompt_nickname">Nickname:</string>
+       <!-- An example string that could be used as a nickname for a pubkey. -->
+       <string name="prompt_nickname_hint_pubkey">My work key</string>
+       <!-- The source TCP port for port forwards. -->
+       <string name="prompt_source_port">Source port:</string>
+       <!-- The "host:port" combination used for port forward destinations. -->
+       <string name="prompt_destination">Destination:</string>
+       <string name="prompt_old_password">Old password:</string>
+       <string name="prompt_password">Password:</string>
+       <!-- Added after a "Password:" prompt to indicate user needs to confirm entry. -->
+       <string name="prompt_again">(again)</string>
+       <!-- Label for the user to select port forward type. -->
+       <string name="prompt_type">Type:</string>
+       <string name="prompt_password_can_be_blank">Note: password can be blank</string>
+       <!-- Prompt for the size of the private key in bits. -->
+       <string name="prompt_bits">Bits:</string>
+
+       <!-- Prompt for the password to unlock a certain pubkey. -->
+       <string name="prompt_pubkey_password">Password for key \'%1$s\'</string>
+
+       <!-- Prompt for whether to allow SSH Authentication Agent to use the specified key. Note that the '\n' means split the line so it's actually "host to use key" -->
+       <string name="prompt_allow_agent_to_use_key">Allow remote host to\nuse key \'%1$s\'?</string>
+
+       <!-- The header of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning_header">WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</string>
+       <!-- The body of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning">IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\nSomeone could be eavesdropping on you right now (man-in-the-middle attack)!\nIt is also possible that the host key has just been changed.</string>
+
+       <!-- Prompt user gets when the remote host has disconnected unexpectedly. -->
+       <string name="prompt_host_disconnected">Host has disconnected.\nClose session?</string>
+       <!-- Prompt user must answer yes or no to when the remote host fails verification of encryption fingerprint -->
+       <string name="prompt_continue_connecting">Are you sure you want\nto continue connecting?</string>
+
+       <!-- Sent to user when the remote public encryption key fingerprint doesn't match the local database -->
+       <string name="host_authenticity_warning">The authenticity of host \'%1$s\' can\'t be established.</string>
+       <!-- First field is encryption algorithm. Second is the actual fingerprint in hex digits -->
+       <string name="host_fingerprint">Host %1$s key fingerprint is %2$s</string>
+
+       <string name="alert_passwords_do_not_match_msg">Passwords do not match!</string>
+       <string name="alert_wrong_password_msg">Wrong password!</string>
+       <string name="alert_key_corrupted_msg">Private key appears corrupt!</string>
+       <string name="alert_sdcard_absent">SD card is not inserted!</string>
+
+       <!-- Add a new item (e.g., host or pubkey) to the list. -->
+       <string name="button_add">Add</string>
+       <!-- Change an existing item's (e.g., host or pubkey) details. -->
+       <string name="button_change">Change</string>
+       <!-- Button that begins the generation of a public key pair. -->
+       <string name="button_generate">Generate Key</string>
+       <!-- Button that resizes the screen to the user-specified dimensions. -->
+       <string name="button_resize">Resize</string>
+
+       <string name="alert_disconnect_msg">Connection Lost</string>
+
+       <string name="msg_copyright">Copyright © 2007-2008 Kenny Root http://the-b.org/, Jeffrey Sharkey http://jsharkey.org/</string>
+
+       <!-- The category title for terminal emulation preferences. -->
+       <string name="pref_emulation_category">Terminal emulation</string>
+
+       <!-- Name for the emulation terminal type preference. -->
+       <string name="pref_emulation_title">Emulation mode</string>
+       <!-- Description of the emulation terminal type preference. -->
+       <string name="pref_emulation_summary">Terminal emulation mode to use for PTY connections</string>
+
+       <!-- Name for the scrollback size preference -->
+       <string name="pref_scrollback_title">Scrollback size</string>
+       <!-- Description of the scrollback size preference -->
+       <string name="pref_scrollback_summary">Size of scrollback buffer to keep in memory for each console</string>
+
+       <!-- The category title for user interface preferences -->
+       <string name="pref_ui_category">User interface</string>
+
+       <!-- Name for the rotation mode preference -->
+       <string name="pref_rotation_title">Rotation mode</string>
+       <!-- Summary for the rotation mode preference -->
+       <string name="pref_rotation_summary">How to change rotation when keyboard popped in/out</string>
+
+       <!-- Name for the full screen preference -->
+       <string name="pref_fullscreen_title">Full screen</string>
+       <!-- Summary for the full screen preference -->
+       <string name="pref_fullscreen_summary">Hide status bar while in console</string>
+
+       <!-- Name for the memorize keys preference -->
+       <string name="pref_memkeys_title">Remember keys in memory</string>
+       <!-- Summary for the memorize keys preference -->
+       <string name="pref_memkeys_summary">Keep unlocked keys in memory until backend service is terminated</string>
+
+       <!-- Name for the update check preference -->
+       <string name="pref_update_title">Update check</string>
+       <!-- Summary for the update check preference -->
+       <string name="pref_update_summary">Set the maximum frequency to check for ConnectBot updates</string>
+
+       <!-- Name for the preference that forces the service to stay running in the background.-->
+       <string name="pref_conn_persist_title">Persist connections</string>
+       <!-- Summary for the preference that forces the service to stay running in the background. -->
+       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+
+       <!-- Name for the keyboard shortcuts preference -->
+       <string name="pref_keymode_title">Directory shortcuts</string>
+       <!-- Summary for the keyboard shortcuts preference -->
+       <string name="pref_keymode_summary">Select how to use Alt for \'/\' and Shift for Tab</string>
+
+       <!-- Name for the camera shortcut usage preference -->
+       <string name="pref_camera_title">Camera shortcut</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_camera_summary">Select which shortcut to trigger when the camera button is pushed</string>
+
+       <!-- Name for the keep screen on preference -->
+       <string name="pref_keepalive_title">Keep screen awake</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_keepalive_summary">Prevent the screen from turning off when working in a console</string>
+
+       <!-- Name for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_title">Keep Wi-Fi active</string>
+       <!-- Summary for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_summary">Prevent Wi-Fi from turning off when a session is active</string>
+
+       <!-- Name for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_title">Bumpy arrows</string>
+       <!-- Summary for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_summary">Vibrate when sending arrow keys from trackball; useful for laggy connections</string>
+
+       <!-- Category title for the Terminal Bell preferences -->
+       <string name="pref_bell_category">Terminal bell</string>
+
+       <!-- Checkbox preference title for the audible terminal bell feature -->
+       <string name="pref_bell_title">Audible bell</string>
+
+       <!-- Title for the slider preference to set the volume -->
+       <string name="pref_bell_volume_title">Bell volume</string>
+
+       <!-- Checkbox preference title for the vibrate on terminal bell feature -->
+       <string name="pref_bell_vibrate_title">Vibrate on bell</string>
+
+       <!-- Checkbox preference title for the receive notifications on terminal bell feature -->
+       <string name="pref_bell_notification_title">Background notifications</string>
+       <!-- Brief summary of the feature that is enabled when the checkbox preference for the receive notifications on terminal bell feature is checked -->
+       <string name="pref_bell_notification_summary">Send notification when a terminal running in the background sounds a bell.</string>
+
+       <!-- Preference selection to indicate use of right side of keyboard for special shortcuts. -->
+       <string name="list_keymode_right">Use right-side keys</string>
+       <!-- Preference selection to indicate use of left side of keyboard for special shortcuts. -->
+       <string name="list_keymode_left">Use left-side keys</string>
+       <!-- Preference selection to indicate never to use special shortcut keys. -->
+       <string name="list_keymode_none">Disable</string>
+
+       <!-- Preference to not use pubkeys to authenticate to this host. -->
+       <string name="list_pubkeyids_none">Do not use keys</string>
+       <!-- Preference to use any pubkey to authenticate to this host. -->
+       <string name="list_pubkeyids_any">Use any unlocked key</string>
+
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_daily">Daily</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_weekly">Weekly</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_never">Never</string>
+
+       <!-- Host nickname field preference title -->
+       <string name="hostpref_nickname_title">Nickname</string>
+
+       <!-- Host color category preference title -->
+       <string name="hostpref_color_title">Color category</string>
+
+       <!-- Host's default font size when opening the terminal in points (pt) -->
+       <string name="hostpref_fontsize_title">Font size (pt)</string>
+
+       <!-- Host pubkey usage preference title -->
+       <string name="hostpref_pubkeyid_title">Use pubkey authentication</string>
+
+       <!-- Preference title for the SSH Authentication Agent Forwarding for a host connection -->
+       <string name="hostpref_authagent_title">Use SSH auth agent</string>
+
+       <!-- Host post-login automation preference title -->
+       <string name="hostpref_postlogin_title">Post-login automation</string>
+       <!-- Host post-login automation preference summary -->
+       <string name="hostpref_postlogin_summary">Commands to run on remote server once authenticated</string>
+
+       <!-- Host compression preference title -->
+       <string name="hostpref_compression_title">Compression</string>
+       <!-- Summary for compression preference -->
+       <string name="hostpref_compression_summary">This may help with slower networks</string>
+
+       <!-- Setting for whether we want a session to start up when we connect to a host -->
+       <string name="hostpref_wantsession_title">Start shell session</string>
+       <!-- Summary for field asking whether a shell session should be started up upon connection or not -->
+       <string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+
+       <!-- Setting for whether the host should be reconnected to automatically upon disconnect -->
+       <string name="hostpref_stayconnected_title">Stay connected</string>
+       <!-- Summary for preference asking whether the host should be reconnected to when it disconnects -->
+       <string name="hostpref_stayconnected_summary">Try to reconnect to host if disconnected</string>
+
+       <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_title">DEL Key</string>
+       <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+
+       <!-- Host character encoding preference title -->
+       <string name="hostpref_encoding_title">Encoding</string>
+       <!-- Host character encoding preference summary -->
+       <string name="hostpref_encoding_summary">Character encoding for the host</string>
+
+       <!-- Host preference category title for connection settings -->
+       <string name="hostpref_connection_category">Connection settings</string>
+
+       <!-- Username field title for host editor preference -->
+       <string name="hostpref_username_title">Username</string>
+
+       <!-- Hostname field title for host editor preference -->
+       <string name="hostpref_hostname_title">Host</string>
+
+       <!-- Port field title for host editor preference -->
+       <string name="hostpref_port_title">Port</string>
+
+       <!-- Displayed to indicate a host has never been connected to. -->
+       <string name="bind_never">Never connected</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than an hour. -->
+       <string name="bind_minutes">%1$s minutes ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than a day. -->
+       <string name="bind_hours">%1$s hours ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been a day or more. -->
+       <string name="bind_days">%1$s days ago</string>
+
+       <!-- Message given when user copies from the terminal. -->
+       <string name="console_copy_done">Copied %1$d bytes to clipboard</string>
+       <!-- Instructions for how to copy from the terminal. The '\n' entries are to split lines to improve readability and prevent wrapping off the screen. -->
+       <string name="console_copy_start">Touch and drag\nor use directional pad\nto select area to copy</string>
+
+       <!-- Button to close the disconnected terminal window. -->
+       <string name="console_menu_close">Close</string>
+       <!-- Button to begin copying from the terminal to the clipboard. -->
+       <string name="console_menu_copy">Copy</string>
+       <!-- Button to paste from the clipboard to the terminal. -->
+       <string name="console_menu_paste">Paste</string>
+       <!-- Button that brings user to the Port Forwards List. -->
+       <string name="console_menu_portforwards">Port Forwards</string>
+       <!-- Button that brings user to the terminal resizing dialog where they can force a size. -->
+       <string name="console_menu_resize">Force Size</string>
+       <!-- Button that brings up the list of URLs on the current screen -->
+       <string name="console_menu_urlscan">URL Scan</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. -->
+       <string name="portforward_remote">Remote</string>
+       <!-- Selection for a "dynamic" port forward. E.g., connections to a port listening locally is forwarded based on the SOCKS protocol to an arbitrary remote host and port. -->
+       <string name="portforward_dynamic">Dynamic (SOCKS)</string>
+       <!-- Button that commits the port forward to be made from the Port Forward Creation dialog. -->
+       <string name="portforward_pos">Create port forward</string>
+
+       <string name="portforward_done">Successfully created port forward</string>
+       <string name="portforward_problem">Problem creating port forward, maybe you\'re using ports under 1024 or port is already used?</string>
+
+       <string name="portforward_menu_add">Add port forward</string>
+
+       <!-- The string to present in the quick-connect box to hint the user to the format for connecting to hosts. -->
+       <string name="hint_userhost">user@hostname</string>
+
+       <!-- Hint given to user when the format they're using is incorrect in the quick-connect box. -->
+       <string name="list_format_error">Use the format "%1$s"</string>
+
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_username">username</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_hostname">hostname</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_port">port</string>
+
+       <string name="list_menu_pubkeys">Manage Pubkeys</string>
+       <!-- Selection choice to sort hosts by color. -->
+       <string name="list_menu_sortcolor">Sort by color</string>
+       <!-- Selection choice to sort hosts by nickname. -->
+       <string name="list_menu_sortname">Sort by name</string>
+       <string name="list_menu_settings">Settings</string>
+
+       <string name="list_host_disconnect">Disconnect</string>
+       <string name="list_host_edit">Edit host</string>
+       <string name="list_host_portforwards">Edit port forwards</string>
+       <string name="list_host_delete">Delete host</string>
+       <!-- Note that the '\n' splits the lines so it's actually "quick-connect box below to connect" -->
+       <string name="list_host_empty">Use the quick-connect box\nbelow to connect to a host.</string>
+
+       <!-- Default screen rotation preference selection -->
+       <string name="list_rotation_default">Default</string>
+       <string name="list_rotation_land">Force landscape</string>
+       <string name="list_rotation_port">Force portrait</string>
+       <!-- Selection to indicate the rotation should be selected automatically based on the tilt sensor. -->
+       <string name="list_rotation_auto">Automatic</string>
+
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A then Space". -->
+       <string name="list_camera_ctrlaspace">Ctrl+A then Space</string>
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A". -->
+       <string name="list_camera_ctrla">Ctrl+A</string>
+       <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
+       <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
+       <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
+       <string name="list_camera_none">None</string>
+
+       <!-- Name for the backspace character -->
+       <string name="list_delkey_backspace">Backspace</string>
+       <!-- Name for the ASCII DEL character -->
+       <string name="list_delkey_del">Delete</string>
+
+       <string name="delete_message">Are you sure you want to delete \'%1$s\'?</string>
+       <string name="delete_pos">Yes, delete</string>
+       <string name="delete_neg">Cancel</string>
+
+       <!-- Button to agree to license terms. -->
+       <string name="wizard_agree">Agree</string>
+       <!-- Button to go to the next page in the first time start-up wizard. -->
+       <string name="wizard_next">Next</string>
+       <!-- Button to go to the previous page in the first time start-up wizard. -->
+       <string name="wizard_back">Back</string>
+
+       <string name="terminal_no_hosts_connected">No hosts currently connected</string>
+
+       <!-- Displayed in terminal when attempting to connect to a host. The first two
+            variables are host:port and the third is the protocol (e.g., SSH) -->
+       <string name="terminal_connecting">Connecting to %1$s:%2$d via %3$s</string>
+
+       <!-- Displays the host key to the user in the terminal -->
+       <string name="terminal_sucess">Verified host \'%1$s\' key: %2$s</string>
+       <string name="terminal_failed">Host key verification failed.</string>
+
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_s2c_algorithm">Server-to-client algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_c2s_algorithm">Client-to-server algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_algorithm">Using algorithm: %1$s %2$s</string>
+
+       <string name="terminal_auth">Trying to authenticate</string>
+
+       <string name="terminal_auth_pass">Attempting \'password\' authentication</string>
+       <string name="terminal_auth_pass_fail">Authentication method \'password\' failed</string>
+
+       <string name="terminal_auth_pubkey_any">Attempting \'publickey\' authentication with any in-memory public keys</string>
+       <string name="terminal_auth_pubkey_invalid">Selected public key is invalid, try reselecting key in host editor</string>
+       <string name="terminal_auth_pubkey_specific">Attempting \'publickey\' authentication with a specific public key</string>
+       <string name="terminal_auth_pubkey_fail">Authentication method \'publickey\' with key \'%1$s\' failed</string>
+
+       <string name="terminal_auth_ki">Attempting \'keyboard-interactive\' authentication</string>
+       <string name="terminal_auth_ki_fail">Authentication method \'keyboard-interactive\' failed</string>
+
+       <string name="terminal_auth_fail">[Your host doesn\'t support \'password\' or \'keyboard-interactive\' authentication.]</string>
+
+       <string name="terminal_no_session">Session will not be started due to host preference.</string>
+       <string name="terminal_enable_portfoward">Enable port forward: %1$s</string>
+
+       <string name="local_shell_unavailable">Failure! Local shell is unavailable on this phone.</string>
+
+       <!-- Text sent to the user to alert them that a Terminal Bell is received in a background session -->
+       <string name="notification_text">%1$s wants your attention.</string>
+
+       <!-- Dialog title when a new version of ConnectBot is detected. -->
+       <string name="upgrade">New version</string>
+       <!-- Button selection to upgrade to the latest ConnectBot when one is available. -->
+       <string name="upgrade_pos">Yes, upgrade</string>
+       <!-- Button selection to skip upgrading to the latest ConnectBot when one is available. -->
+       <string name="upgrade_neg">Not right now</string>
+
+       <!-- Preference selection for SSH Authentication Agent to never use pubkeys -->
+       <string name="no">No</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys "with confirmation" only -->
+       <string name="with_confirmation">With confirmation</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys -->
+       <string name="yes">Yes</string>
+
+       <!-- String displayed to user when they're asked to submit exceptions to the ConnectBot developers -->
+       <string name="exceptions_submit_message">It appears ConnectBot had a problem last time it ran.  Submit error report to ConnectBot developers?</string>
+
+       <!-- Menu selection to reset colors to their defaults. -->
+       <string name="menu_colors_reset">Reset</string>
+
+       <!-- Displayed in the notification bar that connections are active -->
+       <string name="app_is_running">ConnectBot is running</string>
+
+       <string name="color_red">red</string>
+       <string name="color_green">green</string>
+       <string name="color_blue">blue</string>
+       <string name="color_gray">gray</string>
+</resources>
index caf4b8c..47152cc 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">Ingen</string>
 
index e5cc4e5..e11ad7f 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
new file mode 100644 (file)
index 0000000..a5ba3ab
--- /dev/null
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2007 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<resources>
+       <string name="app_desc">Простий та потужний SSH клієнт  з відкритим кодом</string>
+
+       <!-- Window title for the Host List -->
+       <string name="title_hosts_list">Вузли</string>
+       <!-- Window title for the Pubkeys List -->
+       <string name="title_pubkey_list">Відкриті ключі</string>
+       <!-- Window title for the Port Forwards List -->
+       <string name="title_port_forwards_list">Переадресація портів</string>
+       <!-- Window title when editing host details -->
+       <string name="title_host_editor">Змінити вузол</string>
+       <!-- Window title for Help index -->
+       <string name="title_help">Допомога</string>
+       <!-- Window title for color list editing screen -->
+       <string name="title_colors">Кольори</string>
+
+       <string name="resolve_connect">Підключитись</string>
+       <!-- Menu selection where user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="resolve_entropy">Gather Entropy</string>
+
+       <string name="menu_insert">Додати вузол</string>
+       <string name="menu_delete">Вилучити вузол</string>
+       <string name="menu_preferences">Налаштування</string>
+
+       <string name="help_intro">Для додаткової інформації виберіть топік</string>
+       <string name="help_about">Про ConnectBot</string>
+       <string name="help_keyboard">Клавіатура</string>
+
+       <string name="pubkey_generate">Генерувати</string>
+       <string name="pubkey_import">Імпортувати</string>
+       <string name="pubkey_delete">Вилучити ключ</string>
+       <!-- Dialog title when user must move finger randomly over an area to gather entropy (collect random bits) -->
+       <string name="pubkey_gather_entropy">Gathering Entropy</string>
+       <string name="pubkey_touch_prompt">Touch this box to gather randomness: %1$d%% done</string>
+       <string name="pubkey_touch_hint">In order to assure randomness during the key generation, move your finger randomly over the box below.</string>
+       <string name="pubkey_generating">Generating key pair...</string>
+       <string name="pubkey_copy_private">Copy private key</string>
+       <string name="pubkey_copy_public">Copy public key</string>
+       <!-- Note that the '\n' just splits lines, so it's actually "create or import" -->
+       <string name="pubkey_list_empty">Tap "Menu" to create\nor import key pairs.</string>
+       <string name="pubkey_unknown_format">Unknown format</string>
+       <string name="pubkey_change_password">Змінити пароль</string>
+       <string name="pubkey_list_pick">Завантажити з SD карти</string>
+       <string name="pubkey_import_parse_problem">Problem parsing imported private key</string>
+       <string name="pubkey_unlock">Розблокувати ключ</string>
+       <string name="pubkey_failed_add">Bad password for key \'%1$s\'. Authentication failed.</string>
+       <string name="pubkey_memory_load">Load into memory</string>
+       <string name="pubkey_memory_unload">Unload from memory</string>
+       <string name="pubkey_load_on_start">Load key on start</string>
+       <!-- Pubkey preference asking user whether the key use should be confirmed via prompt before it can be used for authentication -->
+       <string name="pubkey_confirm_use">Confirm before use</string>
+
+       <!-- Note that the '\n' splits lines, so it's actually "create port forwards" -->
+       <string name="portforward_list_empty">Tap "Menu" to create\nport forwards.</string>
+       <string name="portforward_edit">Edit port forward</string>
+       <string name="portforward_delete">Delete port forward</string>
+
+       <string name="prompt_nickname">Nickname:</string>
+       <!-- An example string that could be used as a nickname for a pubkey. -->
+       <string name="prompt_nickname_hint_pubkey">My work key</string>
+       <!-- The source TCP port for port forwards. -->
+       <string name="prompt_source_port">Source port:</string>
+       <!-- The "host:port" combination used for port forward destinations. -->
+       <string name="prompt_destination">Destination:</string>
+       <string name="prompt_old_password">Old password:</string>
+       <string name="prompt_password">Password:</string>
+       <!-- Added after a "Password:" prompt to indicate user needs to confirm entry. -->
+       <string name="prompt_again">(again)</string>
+       <!-- Label for the user to select port forward type. -->
+       <string name="prompt_type">Type:</string>
+       <string name="prompt_password_can_be_blank">Note: password can be blank</string>
+       <!-- Prompt for the size of the private key in bits. -->
+       <string name="prompt_bits">Bits:</string>
+
+       <!-- Prompt for the password to unlock a certain pubkey. -->
+       <string name="prompt_pubkey_password">Password for key \'%1$s\'</string>
+
+       <!-- Prompt for whether to allow SSH Authentication Agent to use the specified key. Note that the '\n' means split the line so it's actually "host to use key" -->
+       <string name="prompt_allow_agent_to_use_key">Allow remote host to\nuse key \'%1$s\'?</string>
+
+       <!-- The header of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning_header">WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!</string>
+       <!-- The body of the warning a user gets when the host key has changed. Note that this can be a very serious attack, so we try to be as "loud" to the user as possible. -->
+       <string name="host_verification_failure_warning">IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!\nSomeone could be eavesdropping on you right now (man-in-the-middle attack)!\nIt is also possible that the host key has just been changed.</string>
+
+       <!-- Prompt user gets when the remote host has disconnected unexpectedly. -->
+       <string name="prompt_host_disconnected">Host has disconnected.\nClose session?</string>
+       <!-- Prompt user must answer yes or no to when the remote host fails verification of encryption fingerprint -->
+       <string name="prompt_continue_connecting">Are you sure you want\nto continue connecting?</string>
+
+       <!-- Sent to user when the remote public encryption key fingerprint doesn't match the local database -->
+       <string name="host_authenticity_warning">The authenticity of host \'%1$s\' can\'t be established.</string>
+       <!-- First field is encryption algorithm. Second is the actual fingerprint in hex digits -->
+       <string name="host_fingerprint">Host %1$s key fingerprint is %2$s</string>
+
+       <string name="alert_passwords_do_not_match_msg">Passwords do not match!</string>
+       <string name="alert_wrong_password_msg">Wrong password!</string>
+       <string name="alert_key_corrupted_msg">Private key appears corrupt!</string>
+       <string name="alert_sdcard_absent">SD card is not inserted!</string>
+
+       <!-- Add a new item (e.g., host or pubkey) to the list. -->
+       <string name="button_add">Add</string>
+       <!-- Change an existing item's (e.g., host or pubkey) details. -->
+       <string name="button_change">Change</string>
+       <!-- Button that begins the generation of a public key pair. -->
+       <string name="button_generate">Generate Key</string>
+       <!-- Button that resizes the screen to the user-specified dimensions. -->
+       <string name="button_resize">Resize</string>
+
+       <string name="alert_disconnect_msg">Connection Lost</string>
+
+       <string name="msg_copyright">Copyright © 2007-2008 Kenny Root http://the-b.org/, Jeffrey Sharkey http://jsharkey.org/</string>
+
+       <!-- The category title for terminal emulation preferences. -->
+       <string name="pref_emulation_category">Terminal emulation</string>
+
+       <!-- Name for the emulation terminal type preference. -->
+       <string name="pref_emulation_title">Emulation mode</string>
+       <!-- Description of the emulation terminal type preference. -->
+       <string name="pref_emulation_summary">Terminal emulation mode to use for PTY connections</string>
+
+       <!-- Name for the scrollback size preference -->
+       <string name="pref_scrollback_title">Scrollback size</string>
+       <!-- Description of the scrollback size preference -->
+       <string name="pref_scrollback_summary">Size of scrollback buffer to keep in memory for each console</string>
+
+       <!-- The category title for user interface preferences -->
+       <string name="pref_ui_category">User interface</string>
+
+       <!-- Name for the rotation mode preference -->
+       <string name="pref_rotation_title">Rotation mode</string>
+       <!-- Summary for the rotation mode preference -->
+       <string name="pref_rotation_summary">How to change rotation when keyboard popped in/out</string>
+
+       <!-- Name for the full screen preference -->
+       <string name="pref_fullscreen_title">Full screen</string>
+       <!-- Summary for the full screen preference -->
+       <string name="pref_fullscreen_summary">Hide status bar while in console</string>
+
+       <!-- Name for the memorize keys preference -->
+       <string name="pref_memkeys_title">Remember keys in memory</string>
+       <!-- Summary for the memorize keys preference -->
+       <string name="pref_memkeys_summary">Keep unlocked keys in memory until backend service is terminated</string>
+
+       <!-- Name for the update check preference -->
+       <string name="pref_update_title">Update check</string>
+       <!-- Summary for the update check preference -->
+       <string name="pref_update_summary">Set the maximum frequency to check for ConnectBot updates</string>
+
+       <!-- Name for the preference that forces the service to stay running in the background.-->
+       <string name="pref_conn_persist_title">Persist connections</string>
+       <!-- Summary for the preference that forces the service to stay running in the background. -->
+       <string name="pref_conn_persist_summary">Force connections to stay connected while in background</string>
+
+       <!-- Name for the keyboard shortcuts preference -->
+       <string name="pref_keymode_title">Directory shortcuts</string>
+       <!-- Summary for the keyboard shortcuts preference -->
+       <string name="pref_keymode_summary">Select how to use Alt for \'/\' and Shift for Tab</string>
+
+       <!-- Name for the camera shortcut usage preference -->
+       <string name="pref_camera_title">Camera shortcut</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_camera_summary">Select which shortcut to trigger when the camera button is pushed</string>
+
+       <!-- Name for the keep screen on preference -->
+       <string name="pref_keepalive_title">Keep screen awake</string>
+       <!-- Summary for the camera shortcut usage preference -->
+       <string name="pref_keepalive_summary">Prevent the screen from turning off when working in a console</string>
+
+       <!-- Name for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_title">Keep Wi-Fi active</string>
+       <!-- Summary for the Wi-Fi lock preference -->
+       <string name="pref_wifilock_summary">Prevent Wi-Fi from turning off when a session is active</string>
+
+       <!-- Name for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_title">Bumpy arrows</string>
+       <!-- Summary for the haptic feedback (bumpy arrow) preference -->
+       <string name="pref_bumpyarrows_summary">Vibrate when sending arrow keys from trackball; useful for laggy connections</string>
+
+       <!-- Category title for the Terminal Bell preferences -->
+       <string name="pref_bell_category">Terminal bell</string>
+
+       <!-- Checkbox preference title for the audible terminal bell feature -->
+       <string name="pref_bell_title">Audible bell</string>
+
+       <!-- Title for the slider preference to set the volume -->
+       <string name="pref_bell_volume_title">Bell volume</string>
+
+       <!-- Checkbox preference title for the vibrate on terminal bell feature -->
+       <string name="pref_bell_vibrate_title">Vibrate on bell</string>
+
+       <!-- Checkbox preference title for the receive notifications on terminal bell feature -->
+       <string name="pref_bell_notification_title">Background notifications</string>
+       <!-- Brief summary of the feature that is enabled when the checkbox preference for the receive notifications on terminal bell feature is checked -->
+       <string name="pref_bell_notification_summary">Send notification when a terminal running in the background sounds a bell.</string>
+
+       <!-- Preference selection to indicate use of right side of keyboard for special shortcuts. -->
+       <string name="list_keymode_right">Use right-side keys</string>
+       <!-- Preference selection to indicate use of left side of keyboard for special shortcuts. -->
+       <string name="list_keymode_left">Use left-side keys</string>
+       <!-- Preference selection to indicate never to use special shortcut keys. -->
+       <string name="list_keymode_none">Disable</string>
+
+       <!-- Preference to not use pubkeys to authenticate to this host. -->
+       <string name="list_pubkeyids_none">Do not use keys</string>
+       <!-- Preference to use any pubkey to authenticate to this host. -->
+       <string name="list_pubkeyids_any">Use any unlocked key</string>
+
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_daily">Daily</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_weekly">Weekly</string>
+       <!-- Frequency for which to check for program updates. -->
+       <string name="list_update_never">Never</string>
+
+       <!-- Host nickname field preference title -->
+       <string name="hostpref_nickname_title">Nickname</string>
+
+       <!-- Host color category preference title -->
+       <string name="hostpref_color_title">Color category</string>
+
+       <!-- Host's default font size when opening the terminal in points (pt) -->
+       <string name="hostpref_fontsize_title">Font size (pt)</string>
+
+       <!-- Host pubkey usage preference title -->
+       <string name="hostpref_pubkeyid_title">Use pubkey authentication</string>
+
+       <!-- Preference title for the SSH Authentication Agent Forwarding for a host connection -->
+       <string name="hostpref_authagent_title">Use SSH auth agent</string>
+
+       <!-- Host post-login automation preference title -->
+       <string name="hostpref_postlogin_title">Post-login automation</string>
+       <!-- Host post-login automation preference summary -->
+       <string name="hostpref_postlogin_summary">Commands to run on remote server once authenticated</string>
+
+       <!-- Host compression preference title -->
+       <string name="hostpref_compression_title">Compression</string>
+       <!-- Summary for compression preference -->
+       <string name="hostpref_compression_summary">This may help with slower networks</string>
+
+       <!-- Setting for whether we want a session to start up when we connect to a host -->
+       <string name="hostpref_wantsession_title">Start shell session</string>
+       <!-- Summary for field asking whether a shell session should be started up upon connection or not -->
+       <string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+
+       <!-- Setting for whether the host should be reconnected to automatically upon disconnect -->
+       <string name="hostpref_stayconnected_title">Stay connected</string>
+       <!-- Summary for preference asking whether the host should be reconnected to when it disconnects -->
+       <string name="hostpref_stayconnected_summary">Try to reconnect to host if disconnected</string>
+
+       <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_title">DEL Key</string>
+       <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
+       <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+
+       <!-- Host character encoding preference title -->
+       <string name="hostpref_encoding_title">Encoding</string>
+       <!-- Host character encoding preference summary -->
+       <string name="hostpref_encoding_summary">Character encoding for the host</string>
+
+       <!-- Host preference category title for connection settings -->
+       <string name="hostpref_connection_category">Connection settings</string>
+
+       <!-- Username field title for host editor preference -->
+       <string name="hostpref_username_title">Username</string>
+
+       <!-- Hostname field title for host editor preference -->
+       <string name="hostpref_hostname_title">Host</string>
+
+       <!-- Port field title for host editor preference -->
+       <string name="hostpref_port_title">Port</string>
+
+       <!-- Displayed to indicate a host has never been connected to. -->
+       <string name="bind_never">Never connected</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than an hour. -->
+       <string name="bind_minutes">%1$s minutes ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been less than a day. -->
+       <string name="bind_hours">%1$s hours ago</string>
+       <!-- The time that has elapsed since a host was connected to when it has been a day or more. -->
+       <string name="bind_days">%1$s days ago</string>
+
+       <!-- Message given when user copies from the terminal. -->
+       <string name="console_copy_done">Copied %1$d bytes to clipboard</string>
+       <!-- Instructions for how to copy from the terminal. The '\n' entries are to split lines to improve readability and prevent wrapping off the screen. -->
+       <string name="console_copy_start">Touch and drag\nor use directional pad\nto select area to copy</string>
+
+       <!-- Button to close the disconnected terminal window. -->
+       <string name="console_menu_close">Close</string>
+       <!-- Button to begin copying from the terminal to the clipboard. -->
+       <string name="console_menu_copy">Copy</string>
+       <!-- Button to paste from the clipboard to the terminal. -->
+       <string name="console_menu_paste">Paste</string>
+       <!-- Button that brings user to the Port Forwards List. -->
+       <string name="console_menu_portforwards">Port Forwards</string>
+       <!-- Button that brings user to the terminal resizing dialog where they can force a size. -->
+       <string name="console_menu_resize">Force Size</string>
+       <!-- Button that brings up the list of URLs on the current screen -->
+       <string name="console_menu_urlscan">URL Scan</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. -->
+       <string name="portforward_remote">Remote</string>
+       <!-- Selection for a "dynamic" port forward. E.g., connections to a port listening locally is forwarded based on the SOCKS protocol to an arbitrary remote host and port. -->
+       <string name="portforward_dynamic">Dynamic (SOCKS)</string>
+       <!-- Button that commits the port forward to be made from the Port Forward Creation dialog. -->
+       <string name="portforward_pos">Create port forward</string>
+
+       <string name="portforward_done">Successfully created port forward</string>
+       <string name="portforward_problem">Problem creating port forward, maybe you\'re using ports under 1024 or port is already used?</string>
+
+       <string name="portforward_menu_add">Add port forward</string>
+
+       <!-- The string to present in the quick-connect box to hint the user to the format for connecting to hosts. -->
+       <string name="hint_userhost">user@hostname</string>
+
+       <!-- Hint given to user when the format they're using is incorrect in the quick-connect box. -->
+       <string name="list_format_error">Use the format "%1$s"</string>
+
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_username">username</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_hostname">hostname</string>
+       <!-- Part of the formatting hints that will be used like: username@hostname:port -->
+       <string name="format_port">port</string>
+
+       <string name="list_menu_pubkeys">Manage Pubkeys</string>
+       <!-- Selection choice to sort hosts by color. -->
+       <string name="list_menu_sortcolor">Sort by color</string>
+       <!-- Selection choice to sort hosts by nickname. -->
+       <string name="list_menu_sortname">Sort by name</string>
+       <string name="list_menu_settings">Settings</string>
+
+       <string name="list_host_disconnect">Disconnect</string>
+       <string name="list_host_edit">Edit host</string>
+       <string name="list_host_portforwards">Edit port forwards</string>
+       <string name="list_host_delete">Delete host</string>
+       <!-- Note that the '\n' splits the lines so it's actually "quick-connect box below to connect" -->
+       <string name="list_host_empty">Use the quick-connect box\nbelow to connect to a host.</string>
+
+       <!-- Default screen rotation preference selection -->
+       <string name="list_rotation_default">Default</string>
+       <string name="list_rotation_land">Force landscape</string>
+       <string name="list_rotation_port">Force portrait</string>
+       <!-- Selection to indicate the rotation should be selected automatically based on the tilt sensor. -->
+       <string name="list_rotation_auto">Automatic</string>
+
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A then Space". -->
+       <string name="list_camera_ctrlaspace">Ctrl+A then Space</string>
+       <!-- Selection to indicate pressing the Camera button should send "Ctrl+A". -->
+       <string name="list_camera_ctrla">Ctrl+A</string>
+       <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
+       <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
+       <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
+       <string name="list_camera_none">None</string>
+
+       <!-- Name for the backspace character -->
+       <string name="list_delkey_backspace">Backspace</string>
+       <!-- Name for the ASCII DEL character -->
+       <string name="list_delkey_del">Delete</string>
+
+       <string name="delete_message">Are you sure you want to delete \'%1$s\'?</string>
+       <string name="delete_pos">Yes, delete</string>
+       <string name="delete_neg">Cancel</string>
+
+       <!-- Button to agree to license terms. -->
+       <string name="wizard_agree">Agree</string>
+       <!-- Button to go to the next page in the first time start-up wizard. -->
+       <string name="wizard_next">Next</string>
+       <!-- Button to go to the previous page in the first time start-up wizard. -->
+       <string name="wizard_back">Back</string>
+
+       <string name="terminal_no_hosts_connected">No hosts currently connected</string>
+
+       <!-- Displayed in terminal when attempting to connect to a host. The first two
+            variables are host:port and the third is the protocol (e.g., SSH) -->
+       <string name="terminal_connecting">Connecting to %1$s:%2$d via %3$s</string>
+
+       <!-- Displays the host key to the user in the terminal -->
+       <string name="terminal_sucess">Verified host \'%1$s\' key: %2$s</string>
+       <string name="terminal_failed">Host key verification failed.</string>
+
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_s2c_algorithm">Server-to-client algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_c2s_algorithm">Client-to-server algorithm: %1$s %2$s</string>
+       <!-- Displayed on the terminal describing the cryptographic algorithm names -->
+       <string name="terminal_using_algorithm">Using algorithm: %1$s %2$s</string>
+
+       <string name="terminal_auth">Trying to authenticate</string>
+
+       <string name="terminal_auth_pass">Attempting \'password\' authentication</string>
+       <string name="terminal_auth_pass_fail">Authentication method \'password\' failed</string>
+
+       <string name="terminal_auth_pubkey_any">Attempting \'publickey\' authentication with any in-memory public keys</string>
+       <string name="terminal_auth_pubkey_invalid">Selected public key is invalid, try reselecting key in host editor</string>
+       <string name="terminal_auth_pubkey_specific">Attempting \'publickey\' authentication with a specific public key</string>
+       <string name="terminal_auth_pubkey_fail">Authentication method \'publickey\' with key \'%1$s\' failed</string>
+
+       <string name="terminal_auth_ki">Attempting \'keyboard-interactive\' authentication</string>
+       <string name="terminal_auth_ki_fail">Authentication method \'keyboard-interactive\' failed</string>
+
+       <string name="terminal_auth_fail">[Your host doesn\'t support \'password\' or \'keyboard-interactive\' authentication.]</string>
+
+       <string name="terminal_no_session">Session will not be started due to host preference.</string>
+       <string name="terminal_enable_portfoward">Enable port forward: %1$s</string>
+
+       <string name="local_shell_unavailable">Failure! Local shell is unavailable on this phone.</string>
+
+       <!-- Text sent to the user to alert them that a Terminal Bell is received in a background session -->
+       <string name="notification_text">%1$s wants your attention.</string>
+
+       <!-- Dialog title when a new version of ConnectBot is detected. -->
+       <string name="upgrade">New version</string>
+       <!-- Button selection to upgrade to the latest ConnectBot when one is available. -->
+       <string name="upgrade_pos">Yes, upgrade</string>
+       <!-- Button selection to skip upgrading to the latest ConnectBot when one is available. -->
+       <string name="upgrade_neg">Not right now</string>
+
+       <!-- Preference selection for SSH Authentication Agent to never use pubkeys -->
+       <string name="no">No</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys "with confirmation" only -->
+       <string name="with_confirmation">With confirmation</string>
+       <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys -->
+       <string name="yes">Yes</string>
+
+       <!-- String displayed to user when they're asked to submit exceptions to the ConnectBot developers -->
+       <string name="exceptions_submit_message">It appears ConnectBot had a problem last time it ran.  Submit error report to ConnectBot developers?</string>
+
+       <!-- Menu selection to reset colors to their defaults. -->
+       <string name="menu_colors_reset">Reset</string>
+
+       <!-- Displayed in the notification bar that connections are active -->
+       <string name="app_is_running">ConnectBot is running</string>
+
+       <string name="color_red">red</string>
+       <string name="color_green">green</string>
+       <string name="color_blue">blue</string>
+       <string name="color_gray">gray</string>
+</resources>
index 8254294..8ed8b84 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index d31f426..f99c47d 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">无</string>
 
index f6ecff1..083b85a 100644 (file)
        <!-- Host compression preference title -->
        <string name="hostpref_compression_title">壓縮</string>
        <!-- Summary for compression preference -->
-       <string name="hostpref_compression_summary">This may help with slower networks</string>
+       <string name="hostpref_compression_summary">此選項對低速網絡會有幫助</string>
 
        <!-- Setting for whether we want a session to start up when we connect to a host -->
-       <string name="hostpref_wantsession_title">Start shell session</string>
+       <string name="hostpref_wantsession_title">開始Shell會話</string>
        <!-- Summary for field asking whether a shell session should be started up upon connection or not -->
-       <string name="hostpref_wantsession_summary">Disable this preference to only use port forwards</string>
+       <string name="hostpref_wantsession_summary">僅僅對端口轉發禁用偏好設置</string>
 
        <!-- Setting for whether the host should be reconnected to automatically upon disconnect -->
-       <string name="hostpref_stayconnected_title">Stay connected</string>
+       <string name="hostpref_stayconnected_title">保持連接</string>
        <!-- Summary for preference asking whether the host should be reconnected to when it disconnects -->
-       <string name="hostpref_stayconnected_summary">Try to reconnect to host if disconnected</string>
+       <string name="hostpref_stayconnected_summary">斷線後自動重新連接到主機</string>
 
        <!-- Setting for what key code is sent to the server when DEL key is pressed. -->
-       <string name="hostpref_delkey_title">DEL Key</string>
+       <string name="hostpref_delkey_title">DEL</string>
        <!-- Summary for field asking what key code is sent to the server when DEL key is pressed. -->
-       <string name="hostpref_delkey_summary">The key code sent when DEL key is pressed</string>
+       <string name="hostpref_delkey_summary">當DEL按下時觸發的按鍵</string>
 
        <!-- Host character encoding preference title -->
-       <string name="hostpref_encoding_title">Encoding</string>
+       <string name="hostpref_encoding_title">編碼</string>
        <!-- Host character encoding preference summary -->
-       <string name="hostpref_encoding_summary">Character encoding for the host</string>
+       <string name="hostpref_encoding_summary">主機的字符編碼</string>
 
        <!-- Host preference category title for connection settings -->
-       <string name="hostpref_connection_category">Connection settings</string>
+       <string name="hostpref_connection_category">連接設置</string>
 
        <!-- Username field title for host editor preference -->
-       <string name="hostpref_username_title">使用者名稱</string>
+       <string name="hostpref_username_title">用戶名</string>
 
        <!-- Hostname field title for host editor preference -->
-       <string name="hostpref_hostname_title">Host</string>
+       <string name="hostpref_hostname_title">主機</string>
 
        <!-- Port field title for host editor preference -->
        <string name="hostpref_port_title">端口</string>
 
        <!-- Displayed to indicate a host has never been connected to. -->
-       <string name="bind_never">Never connected</string>
+       <string name="bind_never">從未連接</string>
        <!-- The time that has elapsed since a host was connected to when it has been less than an hour. -->
-       <string name="bind_minutes">%1$s分鐘前</string>
+       <string name="bind_minutes">已連接 %1$s 分鐘</string>
        <!-- The time that has elapsed since a host was connected to when it has been less than a day. -->
-       <string name="bind_hours">%1$s小時以前</string>
+       <string name="bind_hours">已連接 %1$s 小時</string>
        <!-- The time that has elapsed since a host was connected to when it has been a day or more. -->
-       <string name="bind_days">%1$s天前</string>
+       <string name="bind_days">已連接 %1$s 天</string>
 
        <!-- Message given when user copies from the terminal. -->
-       <string name="console_copy_done">%1$då­\97ç¯\80è¤\87製å\88°å\89ªè²¼ç°¿</string>
+       <string name="console_copy_done">復å\88¶ %1$d å­\97ç¯\80å\88°å\89ªè²¼æ\9d¿</string>
        <!-- Instructions for how to copy from the terminal. The '\n' entries are to split lines to improve readability and prevent wrapping off the screen. -->
-       <string name="console_copy_start">Touch and drag\nor use directional pad\nto select area to copy</string>
+       <string name="console_copy_start">滑動手指\n或使用軌跡球\n選擇要復制的區域</string>
 
        <!-- Button to close the disconnected terminal window. -->
-       <string name="console_menu_close">Close</string>
+       <string name="console_menu_close">關閉</string>
        <!-- Button to begin copying from the terminal to the clipboard. -->
-       <string name="console_menu_copy">Copy</string>
+       <string name="console_menu_copy">復制</string>
        <!-- Button to paste from the clipboard to the terminal. -->
-       <string name="console_menu_paste">Paste</string>
+       <string name="console_menu_paste">粘貼</string>
        <!-- Button that brings user to the Port Forwards List. -->
-       <string name="console_menu_portforwards">Port Forwards</string>
+       <string name="console_menu_portforwards">端口轉發</string>
        <!-- Button that brings user to the terminal resizing dialog where they can force a size. -->
-       <string name="console_menu_resize">Force Size</string>
+       <string name="console_menu_resize">字體大小</string>
        <!-- Button that brings up the list of URLs on the current screen -->
-       <string name="console_menu_urlscan">URL Scan</string>
+       <string name="console_menu_urlscan">URL 地址掃描</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>
+       <string name="portforward_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. -->
-       <string name="portforward_remote">Remote</string>
+       <string name="portforward_remote">遠端</string>
        <!-- Selection for a "dynamic" port forward. E.g., connections to a port listening locally is forwarded based on the SOCKS protocol to an arbitrary remote host and port. -->
-       <string name="portforward_dynamic">Dynamic (SOCKS)</string>
+       <string name="portforward_dynamic">動態套接字(SOCKS)</string>
        <!-- Button that commits the port forward to be made from the Port Forward Creation dialog. -->
-       <string name="portforward_pos">Create port forward</string>
+       <string name="portforward_pos">創建端口轉發</string>
 
-       <string name="portforward_done">Successfully created port forward</string>
+       <string name="portforward_done">成功創建端口轉發</string>
        <string name="portforward_problem">Problem creating port forward, maybe you\'re using ports under 1024 or port is already used?</string>
 
-       <string name="portforward_menu_add">Add port forward</string>
+       <string name="portforward_menu_add">添加端口轉發</string>
 
        <!-- The string to present in the quick-connect box to hint the user to the format for connecting to hosts. -->
        <string name="hint_userhost">用戶名@主機名</string>
 
        <!-- Hint given to user when the format they're using is incorrect in the quick-connect box. -->
-       <string name="list_format_error">Use the format "%1$s"</string>
+       <string name="list_format_error">使用"%1$s"格式</string>
 
        <!-- Part of the formatting hints that will be used like: username@hostname:port -->
        <string name="format_username">用戶名</string>
        <!-- Part of the formatting hints that will be used like: username@hostname:port -->
        <string name="format_port">端口</string>
 
-       <string name="list_menu_pubkeys">Manage Pubkeys</string>
+       <string name="list_menu_pubkeys">管理公鑰</string>
        <!-- Selection choice to sort hosts by color. -->
-       <string name="list_menu_sortcolor">Sort by color</string>
+       <string name="list_menu_sortcolor">使用顏色排序</string>
        <!-- Selection choice to sort hosts by nickname. -->
-       <string name="list_menu_sortname">Sort by name</string>
-       <string name="list_menu_settings">Settings</string>
+       <string name="list_menu_sortname">按名字排序</string>
+       <string name="list_menu_settings">設置</string>
 
-       <string name="list_host_disconnect">斷</string>
-       <string name="list_host_edit">Edit host</string>
-       <string name="list_host_portforwards">Edit port forwards</string>
+       <string name="list_host_disconnect">斷開連接</string>
+       <string name="list_host_edit">編輯主機</string>
+       <string name="list_host_portforwards">編輯端口轉發</string>
        <string name="list_host_delete">刪除主機</string>
        <!-- Note that the '\n' splits the lines so it's actually "quick-connect box below to connect" -->
-       <string name="list_host_empty">Use the quick-connect box\nbelow to connect to a host.</string>
+       <string name="list_host_empty">使用下面的快速連接框連接主機</string>
 
        <!-- Default screen rotation preference selection -->
-       <string name="list_rotation_default">Default</string>
-       <string name="list_rotation_land">Force landscape</string>
-       <string name="list_rotation_port">Force portrait</string>
+       <string name="list_rotation_default">默認</string>
+       <string name="list_rotation_land">強制橫屏顯示</string>
+       <string name="list_rotation_port">強制竪屏顯示</string>
        <!-- Selection to indicate the rotation should be selected automatically based on the tilt sensor. -->
-       <string name="list_rotation_auto">Automatic</string>
+       <string name="list_rotation_auto">自動</string>
 
        <!-- Selection to indicate pressing the Camera button should send "Ctrl+A then Space". -->
-       <string name="list_camera_ctrlaspace">Ctrl+A then Space</string>
+       <string name="list_camera_ctrlaspace">Ctrl+A 然後 Space</string>
        <!-- Selection to indicate pressing the Camera button should send "Ctrl+A". -->
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
-       <string name="list_camera_none">None</string>
+       <string name="list_camera_none"></string>
 
        <!-- Name for the backspace character -->
        <string name="list_delkey_backspace">Backspace</string>
        <!-- Name for the ASCII DEL character -->
-       <string name="list_delkey_del">Delete</string>
+       <string name="list_delkey_del">刪除</string>
 
-       <string name="delete_message">您是否確實要刪除「%1$s」?</string>
-       <string name="delete_pos">是,刪除</string>
-       <string name="delete_neg">Cancel</string>
+       <string name="delete_message">Are you sure you want to delete \'%1$s\'?</string>
+       <string name="delete_pos">是,刪除</string>
+       <string name="delete_neg">取消</string>
 
        <!-- Button to agree to license terms. -->
-       <string name="wizard_agree">Agree</string>
+       <string name="wizard_agree">同意</string>
        <!-- Button to go to the next page in the first time start-up wizard. -->
-       <string name="wizard_next">Next</string>
+       <string name="wizard_next">下一頁</string>
        <!-- Button to go to the previous page in the first time start-up wizard. -->
-       <string name="wizard_back">Back</string>
+       <string name="wizard_back">返回</string>
 
-       <string name="terminal_no_hosts_connected">No hosts currently connected</string>
+       <string name="terminal_no_hosts_connected">當前沒有已連接主機</string>
 
        <!-- Displayed in terminal when attempting to connect to a host. The first two
             variables are host:port and the third is the protocol (e.g., SSH) -->
-       <string name="terminal_connecting">Connecting to %1$s:%2$d via %3$s</string>
+       <string name="terminal_connecting">連接到 %1$s:%2$d,通過 %3$s</string>
 
        <!-- Displays the host key to the user in the terminal -->
        <string name="terminal_sucess">Verified host \'%1$s\' key: %2$s</string>
-       <string name="terminal_failed">Host key verification failed.</string>
+       <string name="terminal_failed">主機驗證失敗</string>
 
        <!-- Displayed on the terminal describing the cryptographic algorithm names -->
-       <string name="terminal_using_s2c_algorithm">Server-to-client algorithm: %1$s %2$s</string>
+       <string name="terminal_using_s2c_algorithm">服務器到客戶端算法:%1$s %2$s</string>
        <!-- Displayed on the terminal describing the cryptographic algorithm names -->
-       <string name="terminal_using_c2s_algorithm">Client-to-server algorithm: %1$s %2$s</string>
+       <string name="terminal_using_c2s_algorithm">客戶端到服務器算法:%1$s %2$s</string>
        <!-- Displayed on the terminal describing the cryptographic algorithm names -->
-       <string name="terminal_using_algorithm">Using algorithm: %1$s %2$s</string>
+       <string name="terminal_using_algorithm">使用算法:%1$s %2$s</string>
 
-       <string name="terminal_auth">Trying to authenticate</string>
+       <string name="terminal_auth">嘗試驗證</string>
 
        <string name="terminal_auth_pass">Attempting \'password\' authentication</string>
        <string name="terminal_auth_pass_fail">Authentication method \'password\' failed</string>
 
        <string name="terminal_auth_pubkey_any">Attempting \'publickey\' authentication with any in-memory public keys</string>
-       <string name="terminal_auth_pubkey_invalid">Selected public key is invalid, try reselecting key in host editor</string>
+       <string name="terminal_auth_pubkey_invalid">所選擇的公鑰無法使用,請在主機編輯中嘗試重新選擇</string>
        <string name="terminal_auth_pubkey_specific">Attempting \'publickey\' authentication with a specific public key</string>
        <string name="terminal_auth_pubkey_fail">Authentication method \'publickey\' with key \'%1$s\' failed</string>
 
 
        <string name="terminal_auth_fail">[Your host doesn\'t support \'password\' or \'keyboard-interactive\' authentication.]</string>
 
-       <string name="terminal_no_session">Session will not be started due to host preference.</string>
-       <string name="terminal_enable_portfoward">Enable port forward: %1$s</string>
+       <string name="terminal_no_session">因為主機的相關設置,不會啓動會話。</string>
+       <string name="terminal_enable_portfoward">啓用端口轉發:%1$s</string>
 
-       <string name="local_shell_unavailable">Failure! Local shell is unavailable on this phone.</string>
+       <string name="local_shell_unavailable">失敗! 本地Shell在該手機上不可用</string>
 
        <!-- Text sent to the user to alert them that a Terminal Bell is received in a background session -->
-       <string name="notification_text">%1$s希望你注意</string>
+       <string name="notification_text">%1$s 需要你的註意</string>
 
        <!-- Dialog title when a new version of ConnectBot is detected. -->
-       <string name="upgrade">New version</string>
+       <string name="upgrade">新版本</string>
        <!-- Button selection to upgrade to the latest ConnectBot when one is available. -->
-       <string name="upgrade_pos">Yes, upgrade</string>
+       <string name="upgrade_pos">是,昇級</string>
        <!-- Button selection to skip upgrading to the latest ConnectBot when one is available. -->
-       <string name="upgrade_neg">Not right now</string>
+       <string name="upgrade_neg">暫時不</string>
 
        <!-- Preference selection for SSH Authentication Agent to never use pubkeys -->
-       <string name="no">No</string>
+       <string name="no"></string>
        <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys "with confirmation" only -->
-       <string name="with_confirmation">With confirmation</string>
+       <string name="with_confirmation">已確認過</string>
        <!-- Preference selection for SSH Authentication Agent to be able to use pubkeys -->
-       <string name="yes">Yes</string>
+       <string name="yes"></string>
 
        <!-- String displayed to user when they're asked to submit exceptions to the ConnectBot developers -->
-       <string name="exceptions_submit_message">It appears ConnectBot had a problem last time it ran.  Submit error report to ConnectBot developers?</string>
+       <string name="exceptions_submit_message">似乎ConnectBot在最後運行時出現異常. 請回報給ConnectBot開發者</string>
 
        <!-- Menu selection to reset colors to their defaults. -->
-       <string name="menu_colors_reset">Reset</string>
+       <string name="menu_colors_reset">重設</string>
 
        <!-- Displayed in the notification bar that connections are active -->
        <string name="app_is_running">ConnectBot is running</string>
 
-       <string name="color_red">紅</string>
-       <string name="color_green">綠</string>
-       <string name="color_blue">藍</string>
-       <string name="color_gray">灰</string>
+       <string name="color_red">紅</string>
+       <string name="color_green">綠</string>
+       <string name="color_blue">藍</string>
+       <string name="color_gray">灰</string>
 </resources>
index 91eb8c5..cae8121 100644 (file)
@@ -46,6 +46,7 @@
                <item>@string/list_camera_ctrlaspace</item>
                <item>@string/list_camera_ctrla</item>
                <item>@string/list_camera_esc</item>
+               <item>@string/list_camera_esc_a</item>
                <item>@string/list_camera_none</item>
        </string-array>
 
@@ -53,6 +54,7 @@
                <item>Ctrl+A then Space</item>
                <item>Ctrl+A</item>
                <item>Esc</item>
+               <item>Esc+A</item>
                <item>None</item>
        </string-array>
 
index 0f09a42..b649c0e 100644 (file)
        <string name="list_camera_ctrla">Ctrl+A</string>
        <!-- Selection to indicate pressing the Camera button should send the "Esc" key. -->
        <string name="list_camera_esc">Esc</string>
+       <!-- Selection to indicate pressing the Camera button should send "Esc+A". -->
+       <string name="list_camera_esc_a">Esc+A</string>
        <!-- Selection to indicate pressing the Camera button should send nothing at all. -->
        <string name="list_camera_none">None</string>
 
index 76a1d2e..0240131 100644 (file)
@@ -20,8 +20,6 @@ package org.connectbot;
 import java.lang.ref.WeakReference;
 import java.util.List;
 
-import org.connectbot.bean.HostBean;
-import org.connectbot.bean.PortForwardBean;
 import org.connectbot.bean.SelectionArea;
 import org.connectbot.service.PromptHelper;
 import org.connectbot.service.TerminalBridge;
@@ -90,6 +88,10 @@ public class ConsoleActivity extends Activity {
        private static final float MAX_CLICK_DISTANCE = 25f;
        private static final int KEYBOARD_DISPLAY_TIME = 1250;
 
+       // Direction to shift the ViewFlipper
+       private static final int SHIFT_LEFT = 0;
+       private static final int SHIFT_RIGHT = 1;
+
        protected ViewFlipper flip = null;
        protected TerminalManager bound = null;
        protected LayoutInflater inflater = null;
@@ -141,27 +143,17 @@ public class ConsoleActivity extends Activity {
 
                        // clear out any existing bridges and record requested index
                        flip.removeAllViews();
-                       String requestedNickname = (requested != null) ? requested.getFragment() : null;
-                       int requestedIndex = 0;
 
-                       // first check if we need to create a new session for requested
-                       boolean found = false;
-                       for (TerminalBridge bridge : bound.bridges) {
-                               String nick = bridge.host.getNickname();
-                               if (nick == null)
-                                       continue;
+                       final String requestedNickname = (requested != null) ? requested.getFragment() : null;
+                       int requestedIndex = 0;
 
-                               if (nick.equals(requestedNickname)) {
-                                       found = true;
-                                       break;
-                               }
-                       }
+                       TerminalBridge requestedBridge = bound.getConnectedBridge(requestedNickname);
 
                        // If we didn't find the requested connection, try opening it
-                       if (!found) {
+                       if (requestedNickname != null && requestedBridge == null) {
                                try {
                                        Log.d(TAG, String.format("We couldnt find an existing bridge with URI=%s (nickname=%s), so creating one now", requested.toString(), requestedNickname));
-                                       bound.openConnection(requested);
+                                       requestedBridge = bound.openConnection(requested);
                                } catch(Exception e) {
                                        Log.e(TAG, "Problem while trying to create new requested bridge from URI", e);
                                }
@@ -170,46 +162,22 @@ public class ConsoleActivity extends Activity {
                        // create views for all bridges on this service
                        for (TerminalBridge bridge : bound.bridges) {
 
-                               // let them know about our prompt handler services
-                               bridge.promptHelper.setHandler(promptHandler);
-                               bridge.refreshKeymode();
-
-                               // inflate each terminal view
-                               RelativeLayout view = (RelativeLayout)inflater.inflate(R.layout.item_terminal, flip, false);
-
-                               // set the terminal overlay text
-                               TextView overlay = (TextView)view.findViewById(R.id.terminal_overlay);
-                               overlay.setText(bridge.host.getNickname());
-
-                               // and add our terminal view control, using index to place behind overlay
-                               TerminalView terminal = new TerminalView(ConsoleActivity.this, bridge);
-                               terminal.setId(R.id.console_flip);
-                               view.addView(terminal, 0);
-
-                               // finally attach to the flipper
-                               flip.addView(view);
+                               final int currentIndex = addNewTerminalView(bridge);
 
                                // check to see if this bridge was requested
-                               if (bridge.host.getNickname().equals(requestedNickname))
-                                       requestedIndex = flip.getChildCount() - 1;
+                               if (bridge == requestedBridge)
+                                       requestedIndex = currentIndex;
                        }
 
-                       try {
-                               // show the requested bridge if found, also fade out overlay
-                               flip.setDisplayedChild(requestedIndex);
-                               flip.getCurrentView().findViewById(R.id.terminal_overlay).startAnimation(fade_out_delayed);
-                       } catch (NullPointerException npe) {
-                               Log.d(TAG, "View went away when we were about to display it", npe);
-                       }
-
-                       updatePromptVisible();
-                       updateEmptyVisible();
+                       setDisplayedTerminal(requestedIndex);
                }
 
                public void onServiceDisconnected(ComponentName className) {
                        // tell each bridge to forget about our prompt handler
-                       for(TerminalBridge bridge : bound.bridges)
-                               bridge.promptHelper.setHandler(null);
+                       synchronized (bound.bridges) {
+                               for(TerminalBridge bridge : bound.bridges)
+                                       bridge.promptHelper.setHandler(null);
+                       }
 
                        flip.removeAllViews();
                        updateEmptyVisible();
@@ -242,57 +210,33 @@ public class ConsoleActivity extends Activity {
        /**
         * @param bridge
         */
-       private void closeBridge(TerminalBridge bridge) {
-               for(int i = 0; i < flip.getChildCount(); i++) {
-                       View child = flip.getChildAt(i).findViewById(R.id.console_flip);
+       private void closeBridge(final TerminalBridge bridge) {
+               synchronized (flip) {
+                       final int flipIndex = getFlipIndex(bridge);
 
-                       if (!(child instanceof TerminalView)) continue;
-
-                       TerminalView terminal = (TerminalView) child;
-
-                       if (terminal.bridge.equals(bridge)) {
-                               // we've found the terminal to remove
-                               // shift something into its place if currently visible
-                               if(flip.getDisplayedChild() == i)
-                                       shiftLeft();
-                               flip.removeViewAt(i);
+                       if (flipIndex >= 0) {
+                               if (flip.getDisplayedChild() == flipIndex) {
+                                       shiftCurrentTerminal(SHIFT_LEFT);
+                               }
+                               flip.removeViewAt(flipIndex);
 
                                /* TODO Remove this workaround when ViewFlipper is fixed to listen
                                 * to view removals. Android Issue 1784
                                 */
                                final int numChildren = flip.getChildCount();
                                if (flip.getDisplayedChild() >= numChildren &&
-                                               numChildren > 0)
+                                               numChildren > 0) {
                                        flip.setDisplayedChild(numChildren - 1);
+                               }
 
                                updateEmptyVisible();
-                               break;
                        }
-               }
-
-               // If we just closed the last bridge, go back to the previous activity.
-               if (flip.getChildCount() == 0) {
-                       finish();
-               }
-       }
-
-       // TODO review use (apparently unused)
-       protected void createPortForward(TerminalView target, String nickname, String type, String source, String dest) {
-               String summary = getString(R.string.portforward_problem);
-               try {
-                       long hostId = target.bridge.host.getId();
-
-                       PortForwardBean pfb = new PortForwardBean(hostId, nickname, type, source, dest);
 
-                       target.bridge.addPortForward(pfb);
-                       if (target.bridge.enablePortForward(pfb)) {
-                               summary = getString(R.string.portforward_done);
+                       // If we just closed the last bridge, go back to the previous activity.
+                       if (flip.getChildCount() == 0) {
+                               finish();
                        }
-               } catch(Exception e) {
-                       Log.e(TAG, "Problem trying to create portForward", e);
                }
-
-               Toast.makeText(ConsoleActivity.this, summary, Toast.LENGTH_LONG).show();
        }
 
        protected View findCurrentView(int id) {
@@ -301,13 +245,6 @@ public class ConsoleActivity extends Activity {
                return view.findViewById(id);
        }
 
-       // TODO review use (apparently unused)
-       protected HostBean getCurrentHost() {
-               View view = findCurrentView(R.id.console_flip);
-               if(!(view instanceof TerminalView)) return null;
-               return ((TerminalView)view).bridge.host;
-       }
-
        protected PromptHelper getCurrentPromptHelper() {
                View view = findCurrentView(R.id.console_flip);
                if(!(view instanceof TerminalView)) return null;
@@ -345,7 +282,7 @@ public class ConsoleActivity extends Activity {
                // handle requested console from incoming intent
                requested = getIntent().getData();
 
-               inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+               inflater = LayoutInflater.from(this);
 
                flip = (ViewFlipper)findViewById(R.id.console_flip);
                empty = (TextView)findViewById(android.R.id.empty);
@@ -429,20 +366,20 @@ public class ConsoleActivity extends Activity {
                        @Override
                        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
 
-                               float distx = e2.getRawX() - e1.getRawX();
-                               float disty = e2.getRawY() - e1.getRawY();
-                               int goalwidth = flip.getWidth() / 2;
+                               final float distx = e2.getRawX() - e1.getRawX();
+                               final float disty = e2.getRawY() - e1.getRawY();
+                               final int goalwidth = flip.getWidth() / 2;
 
                                // need to slide across half of display to trigger console change
                                // make sure user kept a steady hand horizontally
-                               if(Math.abs(disty) < 100) {
-                                       if(distx > goalwidth) {
-                                               shiftRight();
+                               if (Math.abs(disty) < (flip.getHeight() / 4)) {
+                                       if (distx > goalwidth) {
+                                               shiftCurrentTerminal(SHIFT_RIGHT);
                                                return true;
                                        }
 
-                                       if(distx < -goalwidth) {
-                                               shiftLeft();
+                                       if (distx < -goalwidth) {
+                                               shiftCurrentTerminal(SHIFT_LEFT);
                                                return true;
                                        }
 
@@ -463,12 +400,12 @@ public class ConsoleActivity extends Activity {
                                        return false;
 
                                // if releasing then reset total scroll
-                               if(e2.getAction() == MotionEvent.ACTION_UP) {
+                               if (e2.getAction() == MotionEvent.ACTION_UP) {
                                        totalY = 0;
                                }
 
                                // activate consider if within x tolerance
-                               if(Math.abs(e1.getX() - e2.getX()) < ViewConfiguration.getTouchSlop() * 4) {
+                               if (Math.abs(e1.getX() - e2.getX()) < ViewConfiguration.getTouchSlop() * 4) {
 
                                        View flip = findCurrentView(R.id.console_flip);
                                        if(flip == null) return false;
@@ -477,11 +414,11 @@ public class ConsoleActivity extends Activity {
                                        // estimate how many rows we have scrolled through
                                        // accumulate distance that doesn't trigger immediate scroll
                                        totalY += distanceY;
-                                       int moved = (int)(totalY / terminal.bridge.charHeight);
+                                       final int moved = (int)(totalY / terminal.bridge.charHeight);
 
                                        // consume as scrollback only if towards right half of screen
-                                       if (e2.getX() > flip.getWidth() / 2.0) {
-                                               if(moved != 0) {
+                                       if (e2.getX() > flip.getWidth() / 2) {
+                                               if (moved != 0) {
                                                        int base = terminal.bridge.buffer.getWindowBase();
                                                        terminal.bridge.buffer.setWindowBase(base + moved);
                                                        totalY = 0;
@@ -489,12 +426,12 @@ public class ConsoleActivity extends Activity {
                                                }
                                        } else {
                                                // otherwise consume as pgup/pgdown for every 5 lines
-                                               if(moved > 5) {
+                                               if (moved > 5) {
                                                        ((vt320)terminal.bridge.buffer).keyPressed(vt320.KEY_PAGE_DOWN, ' ', 0);
                                                        terminal.bridge.tryKeyVibrate();
                                                        totalY = 0;
                                                        return true;
-                                               } else if(moved < -5) {
+                                               } else if (moved < -5) {
                                                        ((vt320)terminal.bridge.buffer).keyPressed(vt320.KEY_PAGE_UP, ' ', 0);
                                                        terminal.bridge.tryKeyVibrate();
                                                        totalY = 0;
@@ -841,11 +778,6 @@ public class ConsoleActivity extends Activity {
                // connect with manager service to find all bridges
                // when connected it will insert all views
                bindService(new Intent(this, TerminalManager.class), connection, Context.BIND_AUTO_CREATE);
-
-               // make sure we dont let the screen fall asleep
-               // this also keeps the wifi chipset from disconnecting us
-               if(wakelock != null && prefs.getBoolean(PreferenceConstants.KEEP_ALIVE, true))
-                       wakelock.acquire();
        }
 
        @Override
@@ -853,6 +785,10 @@ public class ConsoleActivity extends Activity {
                super.onPause();
                Log.d(TAG, "onPause called");
 
+               // Allow the screen to dim and fall asleep.
+               if (wakelock != null && wakelock.isHeld())
+                       wakelock.release();
+
                if (forcedOrientation && bound != null)
                        bound.setResizeAllowed(false);
        }
@@ -862,77 +798,106 @@ public class ConsoleActivity extends Activity {
                super.onResume();
                Log.d(TAG, "onResume called");
 
+               // Make sure we don't let the screen fall asleep.
+               // This also keeps the Wi-Fi chipset from disconnecting us.
+               if (wakelock != null && prefs.getBoolean(PreferenceConstants.KEEP_ALIVE, true))
+                       wakelock.acquire();
+
                configureOrientation();
 
                if (forcedOrientation && bound != null)
                        bound.setResizeAllowed(true);
        }
 
+       /* (non-Javadoc)
+        * @see android.app.Activity#onNewIntent(android.content.Intent)
+        */
        @Override
-       public void onStop() {
-               super.onStop();
+       protected void onNewIntent(Intent intent) {
+               super.onNewIntent(intent);
 
-               unbindService(connection);
+               Log.d(TAG, "onNewIntent called");
 
-               // allow the screen to dim and fall asleep
-               if(wakelock != null && wakelock.isHeld())
-                       wakelock.release();
-       }
+               requested = intent.getData();
 
-       protected void shiftLeft() {
-               View overlay;
-               boolean shouldAnimate = flip.getChildCount() > 1;
-
-               // Only show animation if there is something else to go to.
-               if (shouldAnimate) {
-                       // keep current overlay from popping up again
-                       overlay = findCurrentView(R.id.terminal_overlay);
-                       if (overlay != null)
-                               overlay.startAnimation(fade_stay_hidden);
-
-                       flip.setInAnimation(slide_left_in);
-                       flip.setOutAnimation(slide_left_out);
-                       flip.showNext();
+               if (requested == null) {
+                       Log.e(TAG, "Got null intent data in onNewIntent()");
+                       return;
+               }
+
+               if (bound == null) {
+                       Log.e(TAG, "We're not bound in onNewIntent()");
+                       return;
                }
 
-               ConsoleActivity.this.updateDefault();
+               TerminalBridge requestedBridge = bound.getConnectedBridge(requested.getFragment());
+               int requestedIndex = 0;
+
+               synchronized (flip) {
+                       if (requestedBridge == null) {
+                               // If we didn't find the requested connection, try opening it
 
-               if (shouldAnimate) {
-                       // show overlay on new slide and start fade
-                       overlay = findCurrentView(R.id.terminal_overlay);
-                       if (overlay != null)
-                               overlay.startAnimation(fade_out_delayed);
+                               try {
+                                       Log.d(TAG, String.format("We couldnt find an existing bridge with URI=%s (nickname=%s),"+
+                                                       "so creating one now", requested.toString(), requested.getFragment()));
+                                       requestedBridge = bound.openConnection(requested);
+                               } catch(Exception e) {
+                                       Log.e(TAG, "Problem while trying to create new requested bridge from URI", e);
+                               }
+
+                               requestedIndex = addNewTerminalView(requestedBridge);
+                       } else {
+                               final int flipIndex = getFlipIndex(requestedBridge);
+                               if (flipIndex > requestedIndex) {
+                                       requestedIndex = flipIndex;
+                               }
+                       }
+
+                       setDisplayedTerminal(requestedIndex);
                }
+       }
 
-               updatePromptVisible();
+       @Override
+       public void onStop() {
+               super.onStop();
+
+               unbindService(connection);
        }
 
-       protected void shiftRight() {
+       protected void shiftCurrentTerminal(final int direction) {
                View overlay;
-               boolean shouldAnimate = flip.getChildCount() > 1;
-
-               // Only show animation if there is something else to go to.
-               if (shouldAnimate) {
-                       // keep current overlay from popping up again
-                       overlay = findCurrentView(R.id.terminal_overlay);
-                       if (overlay != null)
-                               overlay.startAnimation(fade_stay_hidden);
-
-                       flip.setInAnimation(slide_right_in);
-                       flip.setOutAnimation(slide_right_out);
-                       flip.showPrevious();
-               }
+               synchronized (flip) {
+                       boolean shouldAnimate = flip.getChildCount() > 1;
+
+                       // Only show animation if there is something else to go to.
+                       if (shouldAnimate) {
+                               // keep current overlay from popping up again
+                               overlay = findCurrentView(R.id.terminal_overlay);
+                               if (overlay != null)
+                                       overlay.startAnimation(fade_stay_hidden);
+
+                               if (direction == SHIFT_LEFT) {
+                                       flip.setInAnimation(slide_left_in);
+                                       flip.setOutAnimation(slide_left_out);
+                                       flip.showNext();
+                               } else if (direction == SHIFT_RIGHT) {
+                                       flip.setInAnimation(slide_right_in);
+                                       flip.setOutAnimation(slide_right_out);
+                                       flip.showPrevious();
+                               }
+                       }
 
-               ConsoleActivity.this.updateDefault();
+                       ConsoleActivity.this.updateDefault();
 
-               if (shouldAnimate) {
-                       // show overlay on new slide and start fade
-                       overlay = findCurrentView(R.id.terminal_overlay);
-                       if (overlay != null)
-                               overlay.startAnimation(fade_out_delayed);
-               }
+                       if (shouldAnimate) {
+                               // show overlay on new slide and start fade
+                               overlay = findCurrentView(R.id.terminal_overlay);
+                               if (overlay != null)
+                                       overlay.startAnimation(fade_out_delayed);
+                       }
 
-               updatePromptVisible();
+                       updatePromptVisible();
+               }
        }
 
        /**
@@ -1039,6 +1004,80 @@ public class ConsoleActivity extends Activity {
                                bound.setResizeAllowed(false);
                        else
                                bound.setResizeAllowed(true);
+
+                       bound.hardKeyboardHidden = (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES);
+               }
+       }
+
+       /**
+        * Adds a new TerminalBridge to the current set of views in our ViewFlipper.
+        *
+        * @param bridge TerminalBridge to add to our ViewFlipper
+        * @return the child index of the new view in the ViewFlipper
+        */
+       private int addNewTerminalView(TerminalBridge bridge) {
+               // let them know about our prompt handler services
+               bridge.promptHelper.setHandler(promptHandler);
+
+               // inflate each terminal view
+               RelativeLayout view = (RelativeLayout)inflater.inflate(R.layout.item_terminal, flip, false);
+
+               // set the terminal overlay text
+               TextView overlay = (TextView)view.findViewById(R.id.terminal_overlay);
+               overlay.setText(bridge.host.getNickname());
+
+               // and add our terminal view control, using index to place behind overlay
+               TerminalView terminal = new TerminalView(ConsoleActivity.this, bridge);
+               terminal.setId(R.id.console_flip);
+               view.addView(terminal, 0);
+
+               synchronized (flip) {
+                       // finally attach to the flipper
+                       flip.addView(view);
+                       return flip.getChildCount() - 1;
+               }
+       }
+
+       private int getFlipIndex(TerminalBridge bridge) {
+               synchronized (flip) {
+                       final int children = flip.getChildCount();
+                       for (int i = 0; i < children; i++) {
+                               final View view = flip.getChildAt(i).findViewById(R.id.console_flip);
+
+                               if (view == null || !(view instanceof TerminalView)) {
+                                       // How did that happen?
+                                       continue;
+                               }
+
+                               final TerminalView tv = (TerminalView) view;
+
+                               if (tv.bridge == bridge) {
+                                       return i;
+                               }
+                       }
+               }
+
+               return -1;
+       }
+
+       /**
+        * Displays the child in the ViewFlipper at the requestedIndex and updates the prompts.
+        *
+        * @param requestedIndex the index of the terminal view to display
+        */
+       private void setDisplayedTerminal(int requestedIndex) {
+               synchronized (flip) {
+                       try {
+                               // show the requested bridge if found, also fade out overlay
+                               flip.setDisplayedChild(requestedIndex);
+                               flip.getCurrentView().findViewById(R.id.terminal_overlay)
+                                               .startAnimation(fade_out_delayed);
+                       } catch (NullPointerException npe) {
+                               Log.d(TAG, "View went away when we were about to display it", npe);
+                       }
+
+                       updatePromptVisible();
+                       updateEmptyVisible();
                }
        }
 }
index 061af84..089e485 100644 (file)
@@ -99,7 +99,7 @@ public class GeneratePubkeyActivity extends Activity implements OnEntropyGathere
 
                save = (Button) findViewById(R.id.save);
 
-               inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+               inflater = LayoutInflater.from(this);
 
                nickname.addTextChangedListener(textChecker);
                password1.addTextChangedListener(textChecker);
index e8202e2..95d04cc 100644 (file)
@@ -240,13 +240,7 @@ public class HostEditorActivity extends PreferenceActivity implements OnSharedPr
                        public void onServiceConnected(ComponentName className, IBinder service) {
                                TerminalManager bound = ((TerminalManager.TerminalBinder) service).getService();
 
-                               for (TerminalBridge bridge: bound.bridges) {
-                                       if (bridge.host.equals(host)) {
-                                               hostBridge = bridge;
-                                               Log.d(TAG, "Found host bridge; charset updates will be made live");
-                                               break;
-                                       }
-                               }
+                               hostBridge = bound.getConnectedBridge(host);
                        }
 
                        public void onServiceDisconnected(ComponentName name) {
index c477a58..f65c069 100644 (file)
@@ -252,7 +252,7 @@ public class HostListActivity extends ListActivity {
                });
                transportSpinner.setAdapter(transportSelection);
 
-               this.inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+               this.inflater = LayoutInflater.from(this);
        }
 
        @Override
@@ -330,7 +330,7 @@ public class HostListActivity extends ListActivity {
 
                // edit, disconnect, delete
                MenuItem connect = menu.add(R.string.list_host_disconnect);
-               final TerminalBridge bridge = bound.findBridge(host);
+               final TerminalBridge bridge = bound.getConnectedBridge(host);
                connect.setEnabled((bridge != null));
                connect.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {
@@ -473,7 +473,7 @@ public class HostListActivity extends ListActivity {
                        if (this.manager == null)
                                return STATE_UNKNOWN;
 
-                       if (manager.findBridge(host) != null)
+                       if (manager.getConnectedBridge(host) != null)
                                return STATE_CONNECTED;
 
                        if (manager.disconnected.contains(host))
index 2cb5dbc..e5c6d21 100644 (file)
@@ -132,16 +132,8 @@ public class PortForwardListActivity extends ListActivity {
                        public void onServiceConnected(ComponentName className, IBinder service) {
                                TerminalManager bound = ((TerminalManager.TerminalBinder) service).getService();
 
-                               for (TerminalBridge bridge: bound.bridges) {
-                                       if (bridge.host.equals(host)) {
-                                               hostBridge = bridge;
-                                               updateHandler.sendEmptyMessage(-1);
-                                               Log.d(TAG, "Found host bridge; using that instead of database");
-                                               break;
-                                       }
-                               }
-
-
+                               hostBridge = bound.getConnectedBridge(host);
+                               updateHandler.sendEmptyMessage(-1);
                        }
 
                        public void onServiceDisconnected(ComponentName name) {
@@ -171,7 +163,7 @@ public class PortForwardListActivity extends ListActivity {
                        }
                });
 
-               this.inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+               this.inflater = LayoutInflater.from(this);
        }
 
        @Override
index b445d18..9106e1a 100644 (file)
@@ -172,7 +172,7 @@ public class PubkeyListActivity extends ListActivity implements EventListener {
 
                clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
 
-               inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+               inflater = LayoutInflater.from(this);
        }
 
        /**
@@ -292,10 +292,8 @@ public class PubkeyListActivity extends ListActivity implements EventListener {
 
                Log.d(TAG, String.format("Unlocked key '%s'", pubkey.getNickname()));
 
-               // save this key in-memory if option enabled
-               if(bound.isSavingKeys()) {
-                       bound.addKey(pubkey, trileadKey);
-               }
+               // save this key in memory
+               bound.addKey(pubkey, trileadKey);
 
                updateHandler.sendEmptyMessage(-1);
        }
index 4e1fefc..35a3c56 100644 (file)
@@ -20,6 +20,7 @@ package org.connectbot;
 import org.connectbot.bean.SelectionArea;
 import org.connectbot.service.FontSizeChangedListener;
 import org.connectbot.service.TerminalBridge;
+import org.connectbot.service.TerminalKeyListener;
 
 import android.app.Activity;
 import android.content.Context;
@@ -110,7 +111,7 @@ public class TerminalView extends View implements FontSizeChangedListener {
                bridge.addFontSizeChangedListener(this);
 
                // connect our view up to the bridge
-               setOnKeyListener(bridge);
+               setOnKeyListener(bridge.getKeyHandler());
        }
 
        public void destroy() {
@@ -149,14 +150,18 @@ public class TerminalView extends View implements FontSizeChangedListener {
                        // also draw cursor if visible
                        if (bridge.buffer.isCursorVisible()) {
                                int cursorColumn = bridge.buffer.getCursorColumn();
-                               int columns = bridge.buffer.getColumns();
+                               final int cursorRow = bridge.buffer.getCursorRow();
+
+                               final int columns = bridge.buffer.getColumns();
 
                                if (cursorColumn == columns)
                                        cursorColumn = columns - 1;
 
+                               if (cursorColumn < 0 || cursorRow < 0)
+                                       return;
+
                                int currentAttribute = bridge.buffer.getAttributes(
-                                               cursorColumn,
-                                               bridge.buffer.getCursorRow());
+                                               cursorColumn, cursorRow);
                                boolean onWideCharacter = (currentAttribute & VDUBuffer.FULLWIDTH) != 0;
 
                                int x = cursorColumn * bridge.charWidth;
@@ -176,21 +181,21 @@ public class TerminalView extends View implements FontSizeChangedListener {
                                // Make sure we scale our decorations to the correct size.
                                canvas.concat(scaleMatrix);
 
-                               int metaState = bridge.getMetaState();
+                               int metaState = bridge.getKeyHandler().getMetaState();
 
-                               if ((metaState & TerminalBridge.META_SHIFT_ON) != 0)
+                               if ((metaState & TerminalKeyListener.META_SHIFT_ON) != 0)
                                        canvas.drawPath(shiftCursor, cursorStrokePaint);
-                               else if ((metaState & TerminalBridge.META_SHIFT_LOCK) != 0)
+                               else if ((metaState & TerminalKeyListener.META_SHIFT_LOCK) != 0)
                                        canvas.drawPath(shiftCursor, cursorPaint);
 
-                               if ((metaState & TerminalBridge.META_ALT_ON) != 0)
+                               if ((metaState & TerminalKeyListener.META_ALT_ON) != 0)
                                        canvas.drawPath(altCursor, cursorStrokePaint);
-                               else if ((metaState & TerminalBridge.META_ALT_LOCK) != 0)
+                               else if ((metaState & TerminalKeyListener.META_ALT_LOCK) != 0)
                                        canvas.drawPath(altCursor, cursorPaint);
 
-                               if ((metaState & TerminalBridge.META_CTRL_ON) != 0)
+                               if ((metaState & TerminalKeyListener.META_CTRL_ON) != 0)
                                        canvas.drawPath(ctrlCursor, cursorStrokePaint);
-                               else if ((metaState & TerminalBridge.META_CTRL_LOCK) != 0)
+                               else if ((metaState & TerminalKeyListener.META_CTRL_LOCK) != 0)
                                        canvas.drawPath(ctrlCursor, cursorPaint);
 
                                // Restore previous clip region
index cbad106..35a60ca 100644 (file)
@@ -46,7 +46,7 @@ public class WizardActivity extends Activity {
                this.flipper = (ViewFlipper) findViewById(R.id.wizard_flipper);
 
                // inflate the layout for EULA step
-               LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+               LayoutInflater inflater = LayoutInflater.from(this);
                this.flipper.addView(inflater.inflate(R.layout.wiz_eula, this.flipper, false));
 
                // Add a view for each help topic we want the user to see.
diff --git a/src/org/connectbot/service/BackupAgent.java b/src/org/connectbot/service/BackupAgent.java
new file mode 100644 (file)
index 0000000..1e3bd81
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2010 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.connectbot.service;
+
+import java.io.IOException;
+
+import org.connectbot.util.HostDatabase;
+import org.connectbot.util.PreferenceConstants;
+import org.connectbot.util.PubkeyDatabase;
+
+import android.app.backup.BackupAgentHelper;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.FileBackupHelper;
+import android.app.backup.SharedPreferencesBackupHelper;
+import android.os.ParcelFileDescriptor;
+import android.util.Log;
+
+/**
+ * @author kroot
+ *
+ */
+public class BackupAgent extends BackupAgentHelper {
+       @Override
+       public void onCreate() {
+               Log.d("ConnectBot.BackupAgent", "onCreate called");
+
+               SharedPreferencesBackupHelper prefs = new SharedPreferencesBackupHelper(this, getPackageName() + "_preferences");
+               addHelper(PreferenceConstants.BACKUP_PREF_KEY, prefs);
+
+               FileBackupHelper hosts = new FileBackupHelper(this, "../databases/" + HostDatabase.DB_NAME);
+               addHelper(HostDatabase.DB_NAME, hosts);
+
+               FileBackupHelper pubkeys = new FileBackupHelper(this, "../databases/" + PubkeyDatabase.DB_NAME);
+               addHelper(PubkeyDatabase.DB_NAME, pubkeys);
+
+       }
+
+       @Override
+       public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
+             ParcelFileDescriptor newState) throws IOException {
+               synchronized (HostDatabase.dbLock) {
+                       super.onBackup(oldState, data, newState);
+               }
+       }
+
+       @Override
+       public void onRestore(BackupDataInput data, int appVersionCode,
+                       ParcelFileDescriptor newState) throws IOException {
+               Log.d("ConnectBot.BackupAgent", "onRestore called");
+
+               synchronized (HostDatabase.dbLock) {
+                       Log.d("ConnectBot.BackupAgent", "onRestore in-lock");
+
+                       super.onRestore(data, appVersionCode, newState);
+               }
+       }
+}
diff --git a/src/org/connectbot/service/BackupWrapper.java b/src/org/connectbot/service/BackupWrapper.java
new file mode 100644 (file)
index 0000000..bfc7535
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2010 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.connectbot.service;
+
+import org.connectbot.util.PreferenceConstants;
+
+import android.app.backup.BackupManager;
+import android.content.Context;
+
+/**
+ * @author kroot
+ *
+ */
+public abstract class BackupWrapper {
+       public static BackupWrapper getInstance() {
+               if (PreferenceConstants.PRE_FROYO)
+                       return PreFroyo.Holder.sInstance;
+               else
+                       return FroyoAndBeyond.Holder.sInstance;
+       }
+
+       public abstract void onDataChanged(Context context);
+
+       private static class PreFroyo extends BackupWrapper {
+               private static class Holder {
+                       private static final PreFroyo sInstance = new PreFroyo();
+               }
+
+               @Override
+               public void onDataChanged(Context context) {
+                       // do nothing for now
+               }
+       }
+
+       private static class FroyoAndBeyond extends BackupWrapper {
+               private static class Holder {
+                       private static final FroyoAndBeyond sInstance = new FroyoAndBeyond();
+               }
+
+               private static BackupManager mBackupManager;
+
+               @Override
+               public void onDataChanged(Context context) {
+                       checkBackupManager(context);
+                       if (mBackupManager != null) {
+                               mBackupManager.dataChanged();
+                       }
+               }
+
+               private void checkBackupManager(Context context) {
+                       if (mBackupManager == null) {
+                               mBackupManager = new BackupManager(context);
+                       }
+               }
+       }
+}
index 0a2594a..a7e3f8b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ConnectBot: simple, powerful, open-source SSH client for Android
- * Copyright 2007 Kenny Root, Jeffrey Sharkey
+ * Copyright 2010 Kenny Root, Jeffrey Sharkey
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,6 +20,7 @@ package org.connectbot.service;
 import org.connectbot.ConsoleActivity;
 import org.connectbot.R;
 import org.connectbot.bean.HostBean;
+import org.connectbot.util.HostDatabase;
 import org.connectbot.util.PreferenceConstants;
 
 import android.app.Notification;
@@ -29,6 +30,7 @@ import android.app.Service;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
+import android.graphics.Color;
 
 /**
  * @author Kenny Root
@@ -77,6 +79,19 @@ public abstract class ConnectionNotifier {
 
                notification.flags = Notification.FLAG_AUTO_CANCEL;
 
+               notification.flags |= Notification.DEFAULT_LIGHTS;
+               if (HostDatabase.COLOR_RED.equals(host.getColor()))
+                       notification.ledARGB = Color.RED;
+               else if (HostDatabase.COLOR_GREEN.equals(host.getColor()))
+                       notification.ledARGB = Color.GREEN;
+               else if (HostDatabase.COLOR_BLUE.equals(host.getColor()))
+                       notification.ledARGB = Color.BLUE;
+               else
+                       notification.ledARGB = Color.WHITE;
+               notification.ledOnMS = 300;
+               notification.ledOffMS = 1000;
+               notification.flags |= Notification.FLAG_SHOW_LIGHTS;
+
                return notification;
        }
 
diff --git a/src/org/connectbot/service/ConnectivityReceiver.java b/src/org/connectbot/service/ConnectivityReceiver.java
new file mode 100644 (file)
index 0000000..908298f
--- /dev/null
@@ -0,0 +1,154 @@
+/**
+ *
+ */
+package org.connectbot.service;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.NetworkInfo.State;
+import android.net.wifi.WifiManager;
+import android.net.wifi.WifiManager.WifiLock;
+import android.util.Log;
+
+/**
+ * @author kroot
+ *
+ */
+public class ConnectivityReceiver extends BroadcastReceiver {
+       private static final String TAG = "ConnectBot.ConnectivityManager";
+
+       private boolean mIsConnected = false;
+
+       final private TerminalManager mTerminalManager;
+
+       final private WifiLock mWifiLock;
+
+       private int mNetworkRef = 0;
+
+       private boolean mLockingWifi;
+
+       private Object[] mLock = new Object[0];
+
+       public ConnectivityReceiver(TerminalManager manager, boolean lockingWifi) {
+               mTerminalManager = manager;
+
+               final ConnectivityManager cm =
+                               (ConnectivityManager) manager.getSystemService(Context.CONNECTIVITY_SERVICE);
+
+               final WifiManager wm = (WifiManager) manager.getSystemService(Context.WIFI_SERVICE);
+               mWifiLock = wm.createWifiLock(TAG);
+
+               final NetworkInfo info = cm.getActiveNetworkInfo();
+               if (info != null) {
+                       mIsConnected = (info.getState() == State.CONNECTED);
+               }
+
+               mLockingWifi = lockingWifi;
+
+               final IntentFilter filter = new IntentFilter();
+               filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+               manager.registerReceiver(this, filter);
+       }
+
+       /* (non-Javadoc)
+        * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
+        */
+       @Override
+       public void onReceive(Context context, Intent intent) {
+               final String action = intent.getAction();
+
+               if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
+            Log.w(TAG, "onReceived() called: " + intent);
+            return;
+               }
+
+               boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
+               boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
+
+               Log.d(TAG, "onReceived() called; noConnectivity? " + noConnectivity + "; isFailover? " + isFailover);
+
+               if (noConnectivity && !isFailover && mIsConnected) {
+                       mIsConnected = false;
+                       mTerminalManager.onConnectivityLost();
+               } else if (!mIsConnected) {
+                       NetworkInfo info = (NetworkInfo) intent.getExtras()
+                                       .get(ConnectivityManager.EXTRA_NETWORK_INFO);
+
+                       if (mIsConnected = (info.getState() == State.CONNECTED)) {
+                               mTerminalManager.onConnectivityRestored();
+                       }
+               }
+       }
+
+       /**
+        *
+        */
+       public void cleanup() {
+               if (mWifiLock.isHeld())
+                       mWifiLock.release();
+
+               mTerminalManager.unregisterReceiver(this);
+       }
+
+       /**
+        * Increase the number of things using the network. Acquire a Wi-Fi lock
+        * if necessary.
+        */
+       public void incRef() {
+               synchronized (mLock) {
+                       acquireWifiLockIfNecessaryLocked();
+
+                       mNetworkRef  += 1;
+               }
+       }
+
+       /**
+        * Decrease the number of things using the network. Release the Wi-Fi lock
+        * if necessary.
+        */
+       public void decRef() {
+               synchronized (mLock) {
+                       mNetworkRef -= 1;
+
+                       releaseWifiLockIfNecessaryLocked();
+               }
+       }
+
+       /**
+        * @param mLockingWifi
+        */
+       public void setWantWifiLock(boolean lockingWifi) {
+               synchronized (mLock) {
+                       mLockingWifi = lockingWifi;
+
+                       if (mLockingWifi) {
+                               acquireWifiLockIfNecessaryLocked();
+                       } else {
+                               releaseWifiLockIfNecessaryLocked();
+                       }
+               }
+       }
+
+       private void acquireWifiLockIfNecessaryLocked() {
+               if (mLockingWifi && mNetworkRef > 0 && !mWifiLock.isHeld()) {
+                       mWifiLock.acquire();
+               }
+       }
+
+       private void releaseWifiLockIfNecessaryLocked() {
+               if (mNetworkRef == 0 && mWifiLock.isHeld()) {
+                       mWifiLock.release();
+               }
+       }
+
+       /**
+        * @return whether we're connected to a network
+        */
+       public boolean isConnected() {
+               return mIsConnected;
+       }
+}
index 41082c7..f0a37be 100644 (file)
@@ -66,6 +66,9 @@ public class PromptHelper {
         */
        public void setResponse(Object value) {
                response = value;
+               promptRequested = null;
+               promptInstructions = null;
+               promptHint = null;
                promptResponse.release();
        }
 
@@ -101,9 +104,6 @@ public class PromptHelper {
 
                        // acquire lock until user passes back value
                        promptResponse.acquire();
-                       promptInstructions = null;
-                       promptHint = null;
-                       promptRequested = null;
 
                        response = popResponse();
                } finally {
index c748046..e9e69ca 100644 (file)
@@ -32,10 +32,8 @@ import org.connectbot.bean.SelectionArea;
 import org.connectbot.transport.AbsTransport;
 import org.connectbot.transport.TransportFactory;
 import org.connectbot.util.HostDatabase;
-import org.connectbot.util.PreferenceConstants;
 
 import android.content.Context;
-import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -45,10 +43,6 @@ import android.graphics.Bitmap.Config;
 import android.graphics.Paint.FontMetrics;
 import android.text.ClipboardManager;
 import android.util.Log;
-import android.view.KeyCharacterMap;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnKeyListener;
 import de.mud.terminal.VDUBuffer;
 import de.mud.terminal.VDUDisplay;
 import de.mud.terminal.vt320;
@@ -63,10 +57,11 @@ import de.mud.terminal.vt320;
  * This class also provides SSH hostkey verification prompting, and password
  * prompting.
  */
-public class TerminalBridge implements VDUDisplay, OnKeyListener {
+public class TerminalBridge implements VDUDisplay {
        public final static String TAG = "ConnectBot.TerminalBridge";
 
        public final static int DEFAULT_FONT_SIZE = 10;
+       private final static int FONT_SIZE_STEP = 2;
 
        public Integer[] color;
 
@@ -77,7 +72,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
 
        public HostBean host;
 
-       private AbsTransport transport;
+       /* package */ AbsTransport transport;
 
        final Paint defaultPaint;
 
@@ -92,26 +87,6 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
        private TerminalView parent = null;
        private final Canvas canvas = new Canvas();
 
-       private int metaState = 0;
-
-       public final static int META_CTRL_ON = 0x01;
-       public final static int META_CTRL_LOCK = 0x02;
-       public final static int META_ALT_ON = 0x04;
-       public final static int META_ALT_LOCK = 0x08;
-       public final static int META_SHIFT_ON = 0x10;
-       public final static int META_SHIFT_LOCK = 0x20;
-       public final static int META_SLASH = 0x40;
-       public final static int META_TAB = 0x80;
-
-       // The bit mask of momentary and lock states for each
-       public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK;
-       public final static int META_ALT_MASK = META_ALT_ON | META_ALT_LOCK;
-       public final static int META_SHIFT_MASK = META_SHIFT_ON | META_SHIFT_LOCK;
-
-       // All the transient key codes
-       public final static int META_TRANSIENT = META_CTRL_ON | META_ALT_ON
-                       | META_SHIFT_ON;
-
        private boolean disconnected = false;
        private boolean awaitingClose = false;
 
@@ -119,16 +94,12 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
        private int columns;
        private int rows;
 
-       private String keymode = null;
-
-       private boolean hardKeyboard = false;
+       /* package */ final TerminalKeyListener keyListener;
 
        private boolean selectingForCopy = false;
        private final SelectionArea selectionArea;
        private ClipboardManager clipboard;
 
-       protected KeyCharacterMap keymap = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD);
-
        public int charWidth = -1;
        public int charHeight = -1;
        private int charTop = -1;
@@ -179,6 +150,8 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
                fontSizeChangedListeners = new LinkedList<FontSizeChangedListener>();
 
                transport = null;
+
+               keyListener = new TerminalKeyListener(manager, this, buffer, null);
        }
 
        /**
@@ -187,7 +160,6 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
         * and password authentication.
         */
        public TerminalBridge(final TerminalManager manager, final HostBean host) throws IOException {
-
                this.manager = manager;
                this.host = host;
 
@@ -270,8 +242,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
 
                selectionArea = new SelectionArea();
 
-               hardKeyboard = (manager.res.getConfiguration().keyboard
-                               == Configuration.KEYBOARD_QWERTY);
+               keyListener = new TerminalKeyListener(manager, this, buffer, host.getEncoding());
        }
 
        public PromptHelper getPromptHelper() {
@@ -336,6 +307,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
        public void setCharset(String encoding) {
                if (relay != null)
                        relay.setCharset(encoding);
+               keyListener.setCharset(encoding);
        }
 
        /**
@@ -455,8 +427,12 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
                        if (disconnectListener != null)
                                disconnectListener.onDisconnected(TerminalBridge.this);
                } else {
+                       {
+                               final String line = manager.res.getString(R.string.alert_disconnect_msg);
+                               ((vt320) buffer).putString("\r\n" + line + "\r\n");
+                       }
                        if (host.getStayConnected()) {
-                               startConnection();
+                               manager.requestReconnect(this);
                                return;
                        }
                        Thread disconnectPromptThread = new Thread(new Runnable() {
@@ -478,394 +454,6 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
                }
        }
 
-       public void refreshKeymode() {
-               keymode = manager.getKeyMode();
-       }
-
-       /**
-        * Handle onKey() events coming down from a {@link TerminalView} above us.
-        * Modify the keys to make more sense to a host then pass it to the transport.
-        */
-       public boolean onKey(View v, int keyCode, KeyEvent event) {
-               try {
-
-                       boolean hardKeyboardHidden =
-                               manager.res.getConfiguration().hardKeyboardHidden ==
-                                       Configuration.HARDKEYBOARDHIDDEN_YES;
-
-                       // Ignore all key-up events except for the special keys
-                       if (event.getAction() == KeyEvent.ACTION_UP) {
-                               // There's nothing here for virtual keyboard users.
-                               if (!hardKeyboard || (hardKeyboard && hardKeyboardHidden))
-                                       return false;
-
-                               // skip keys if we aren't connected yet or have been disconnected
-                               if (disconnected || transport == null)
-                                       return false;
-
-                               if (PreferenceConstants.KEYMODE_RIGHT.equals(keymode)) {
-                                       if (keyCode == KeyEvent.KEYCODE_ALT_RIGHT
-                                                       && (metaState & META_SLASH) != 0) {
-                                               metaState &= ~(META_SLASH | META_TRANSIENT);
-                                               transport.write('/');
-                                               return true;
-                                       } else if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT
-                                                       && (metaState & META_TAB) != 0) {
-                                               metaState &= ~(META_TAB | META_TRANSIENT);
-                                               transport.write(0x09);
-                                               return true;
-                                       }
-                               } else if (PreferenceConstants.KEYMODE_LEFT.equals(keymode)) {
-                                       if (keyCode == KeyEvent.KEYCODE_ALT_LEFT
-                                                       && (metaState & META_SLASH) != 0) {
-                                               metaState &= ~(META_SLASH | META_TRANSIENT);
-                                               transport.write('/');
-                                               return true;
-                                       } else if (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
-                                                       && (metaState & META_TAB) != 0) {
-                                               metaState &= ~(META_TAB | META_TRANSIENT);
-                                               transport.write(0x09);
-                                               return true;
-                                       }
-                               }
-
-                               return false;
-                       }
-
-                       // check for terminal resizing keys
-                       if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
-                               forcedSize = false;
-                               setFontSize(fontSize + 2);
-                               return true;
-                       } else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
-                               forcedSize = false;
-                               setFontSize(fontSize - 2);
-                               return true;
-                       }
-
-                       // skip keys if we aren't connected yet or have been disconnected
-                       if (disconnected || transport == null)
-                               return false;
-
-                       // if we're in scrollback, scroll to bottom of window on input
-                       if (buffer.windowBase != buffer.screenBase)
-                               buffer.setWindowBase(buffer.screenBase);
-
-                       boolean printing = (keymap.isPrintingKey(keyCode) || keyCode == KeyEvent.KEYCODE_SPACE);
-
-                       // otherwise pass through to existing session
-                       // print normal keys
-                       if (printing) {
-                               int curMetaState = event.getMetaState();
-
-                               metaState &= ~(META_SLASH | META_TAB);
-
-                               if ((metaState & META_SHIFT_MASK) != 0) {
-                                       curMetaState |= KeyEvent.META_SHIFT_ON;
-                                       metaState &= ~META_SHIFT_ON;
-                                       redraw();
-                               }
-
-                               if ((metaState & META_ALT_MASK) != 0) {
-                                       curMetaState |= KeyEvent.META_ALT_ON;
-                                       metaState &= ~META_ALT_ON;
-                                       redraw();
-                               }
-
-                               int key = keymap.get(keyCode, curMetaState);
-
-                               if ((metaState & META_CTRL_MASK) != 0) {
-                                       metaState &= ~META_CTRL_ON;
-                                       redraw();
-
-                                       if ((!hardKeyboard || (hardKeyboard && hardKeyboardHidden))
-                                                       && sendFunctionKey(keyCode))
-                                               return true;
-
-                                       // Support CTRL-a through CTRL-z
-                                       if (key >= 0x61 && key <= 0x7A)
-                                               key -= 0x60;
-                                       // Support CTRL-A through CTRL-_
-                                       else if (key >= 0x41 && key <= 0x5F)
-                                               key -= 0x40;
-                                       else if (key == 0x20)
-                                               key = 0x00;
-                                       else if (key == 0x3F)
-                                               key = 0x7F;
-                               }
-
-                               // handle pressing f-keys
-                               if ((hardKeyboard && !hardKeyboardHidden)
-                                               && (curMetaState & KeyEvent.META_SHIFT_ON) != 0
-                                               && sendFunctionKey(keyCode))
-                                       return true;
-
-                               if (key < 0x80)
-                                       transport.write(key);
-                               else
-                                       // TODO write encoding routine that doesn't allocate each time
-                                       transport.write(new String(Character.toChars(key))
-                                                       .getBytes(host.getEncoding()));
-
-                               return true;
-                       }
-
-                       if (keyCode == KeyEvent.KEYCODE_UNKNOWN &&
-                                       event.getAction() == KeyEvent.ACTION_MULTIPLE) {
-                               byte[] input = event.getCharacters().getBytes(host.getEncoding());
-                               transport.write(input);
-                               return true;
-                       }
-
-                       // try handling keymode shortcuts
-                       if (hardKeyboard && !hardKeyboardHidden &&
-                                       event.getRepeatCount() == 0) {
-                               if (PreferenceConstants.KEYMODE_RIGHT.equals(keymode)) {
-                                       switch (keyCode) {
-                                       case KeyEvent.KEYCODE_ALT_RIGHT:
-                                               metaState |= META_SLASH;
-                                               return true;
-                                       case KeyEvent.KEYCODE_SHIFT_RIGHT:
-                                               metaState |= META_TAB;
-                                               return true;
-                                       case KeyEvent.KEYCODE_SHIFT_LEFT:
-                                               metaPress(META_SHIFT_ON);
-                                               return true;
-                                       case KeyEvent.KEYCODE_ALT_LEFT:
-                                               metaPress(META_ALT_ON);
-                                               return true;
-                                       }
-                               } else if (PreferenceConstants.KEYMODE_LEFT.equals(keymode)) {
-                                       switch (keyCode) {
-                                       case KeyEvent.KEYCODE_ALT_LEFT:
-                                               metaState |= META_SLASH;
-                                               return true;
-                                       case KeyEvent.KEYCODE_SHIFT_LEFT:
-                                               metaState |= META_TAB;
-                                               return true;
-                                       case KeyEvent.KEYCODE_SHIFT_RIGHT:
-                                               metaPress(META_SHIFT_ON);
-                                               return true;
-                                       case KeyEvent.KEYCODE_ALT_RIGHT:
-                                               metaPress(META_ALT_ON);
-                                               return true;
-                                       }
-                               } else {
-                                       switch (keyCode) {
-                                       case KeyEvent.KEYCODE_ALT_LEFT:
-                                       case KeyEvent.KEYCODE_ALT_RIGHT:
-                                               metaPress(META_ALT_ON);
-                                               return true;
-                                       case KeyEvent.KEYCODE_SHIFT_LEFT:
-                                       case KeyEvent.KEYCODE_SHIFT_RIGHT:
-                                               metaPress(META_SHIFT_ON);
-                                               return true;
-                                       }
-                               }
-                       }
-
-                       // look for special chars
-                       switch(keyCode) {
-                       case KeyEvent.KEYCODE_CAMERA:
-
-                               // check to see which shortcut the camera button triggers
-                               String camera = manager.prefs.getString(
-                                               PreferenceConstants.CAMERA,
-                                               PreferenceConstants.CAMERA_CTRLA_SPACE);
-                               if(PreferenceConstants.CAMERA_CTRLA_SPACE.equals(camera)) {
-                                       transport.write(0x01);
-                                       transport.write(' ');
-                               } else if(PreferenceConstants.CAMERA_CTRLA.equals(camera)) {
-                                       transport.write(0x01);
-                               } else if(PreferenceConstants.CAMERA_ESC.equals(camera)) {
-                                       ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
-                               }
-
-                               break;
-
-                       case KeyEvent.KEYCODE_DEL:
-                               ((vt320) buffer).keyPressed(vt320.KEY_BACK_SPACE, ' ',
-                                               getStateForBuffer());
-                               metaState &= ~META_TRANSIENT;
-                               return true;
-                       case KeyEvent.KEYCODE_ENTER:
-                               ((vt320)buffer).keyTyped(vt320.KEY_ENTER, ' ', 0);
-                               metaState &= ~META_TRANSIENT;
-                               return true;
-
-                       case KeyEvent.KEYCODE_DPAD_LEFT:
-                               if (selectingForCopy) {
-                                       selectionArea.decrementColumn();
-                                       redraw();
-                               } else {
-                                       ((vt320) buffer).keyPressed(vt320.KEY_LEFT, ' ',
-                                                       getStateForBuffer());
-                                       metaState &= ~META_TRANSIENT;
-                                       tryKeyVibrate();
-                               }
-                               return true;
-
-                       case KeyEvent.KEYCODE_DPAD_UP:
-                               if (selectingForCopy) {
-                                       selectionArea.decrementRow();
-                                       redraw();
-                               } else {
-                                       ((vt320) buffer).keyPressed(vt320.KEY_UP, ' ',
-                                                       getStateForBuffer());
-                                       metaState &= ~META_TRANSIENT;
-                                       tryKeyVibrate();
-                               }
-                               return true;
-
-                       case KeyEvent.KEYCODE_DPAD_DOWN:
-                               if (selectingForCopy) {
-                                       selectionArea.incrementRow();
-                                       redraw();
-                               } else {
-                                       ((vt320) buffer).keyPressed(vt320.KEY_DOWN, ' ',
-                                                       getStateForBuffer());
-                                       metaState &= ~META_TRANSIENT;
-                                       tryKeyVibrate();
-                               }
-                               return true;
-
-                       case KeyEvent.KEYCODE_DPAD_RIGHT:
-                               if (selectingForCopy) {
-                                       selectionArea.incrementColumn();
-                                       redraw();
-                               } else {
-                                       ((vt320) buffer).keyPressed(vt320.KEY_RIGHT, ' ',
-                                                       getStateForBuffer());
-                                       metaState &= ~META_TRANSIENT;
-                                       tryKeyVibrate();
-                               }
-                               return true;
-
-                       case KeyEvent.KEYCODE_DPAD_CENTER:
-                               if (selectingForCopy) {
-                                       if (selectionArea.isSelectingOrigin())
-                                               selectionArea.finishSelectingOrigin();
-                                       else {
-                                               if (parent != null && clipboard != null) {
-                                                       // copy selected area to clipboard
-                                                       String copiedText = selectionArea.copyFrom(buffer);
-
-                                                       clipboard.setText(copiedText);
-                                                       parent.notifyUser(parent.getContext().getString(
-                                                                       R.string.console_copy_done,
-                                                                       copiedText.length()));
-
-                                                       selectingForCopy = false;
-                                                       selectionArea.reset();
-                                               }
-                                       }
-                               } else {
-                                       if ((metaState & META_CTRL_ON) != 0) {
-                                               ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
-                                               metaState &= ~META_CTRL_ON;
-                                       } else
-                                               metaState |= META_CTRL_ON;
-                               }
-
-                               redraw();
-
-                               return true;
-                       }
-
-               } catch (IOException e) {
-                       Log.e(TAG, "Problem while trying to handle an onKey() event", e);
-                       try {
-                               transport.flush();
-                       } catch (IOException ioe) {
-                               Log.d(TAG, "Our transport was closed, dispatching disconnect event");
-                               dispatchDisconnect(false);
-                       }
-               } catch (NullPointerException npe) {
-                       Log.d(TAG, "Input before connection established ignored.");
-                       return true;
-               }
-
-               return false;
-       }
-
-       /**
-        * @param key
-        * @return successful
-        */
-       private boolean sendFunctionKey(int keyCode) {
-               switch (keyCode) {
-               case KeyEvent.KEYCODE_1:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F1, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_2:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F2, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_3:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F3, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_4:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F4, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_5:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F5, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_6:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F6, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_7:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F7, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_8:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F8, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_9:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F9, ' ', 0);
-                       return true;
-               case KeyEvent.KEYCODE_0:
-                       ((vt320) buffer).keyPressed(vt320.KEY_F10, ' ', 0);
-                       return true;
-               default:
-                       return false;
-               }
-       }
-
-       /**
-        * Handle meta key presses where the key can be locked on.
-        * <p>
-        * 1st press: next key to have meta state<br />
-        * 2nd press: meta state is locked on<br />
-        * 3rd press: disable meta state
-        *
-        * @param code
-        */
-       private void metaPress(int code) {
-               if ((metaState & (code << 1)) != 0) {
-                       metaState &= ~(code << 1);
-               } else if ((metaState & code) != 0) {
-                       metaState &= ~code;
-                       metaState |= code << 1;
-               } else
-                       metaState |= code;
-               redraw();
-       }
-
-       public int getMetaState() {
-               return metaState;
-       }
-
-       private int getStateForBuffer() {
-               int bufferState = 0;
-
-               if ((metaState & META_CTRL_MASK) != 0)
-                       bufferState |= vt320.KEY_CONTROL;
-               if ((metaState & META_SHIFT_MASK) != 0)
-                       bufferState |= vt320.KEY_SHIFT;
-               if ((metaState & META_ALT_MASK) != 0)
-                       bufferState |= vt320.KEY_ALT;
-
-               return bufferState;
-       }
-
        public void setSelectingForCopy(boolean selectingForCopy) {
                this.selectingForCopy = selectingForCopy;
        }
@@ -886,7 +474,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
         * Request a different font size. Will make call to parentChanged() to make
         * sure we resize PTY if needed.
         */
-       private final void setFontSize(float size) {
+       /* package */ final void setFontSize(float size) {
                if (size <= 0.0)
                        return;
 
@@ -911,6 +499,8 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
 
                host.setFontSize((int) fontSize);
                manager.hostdb.updateFontSize(host);
+
+               forcedSize = false;
        }
 
        /**
@@ -946,14 +536,15 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
                }
 
                this.parent = parent;
-               int width = parent.getWidth();
-               int height = parent.getHeight();
+               final int width = parent.getWidth();
+               final int height = parent.getHeight();
 
                // Something has gone wrong with our layout; we're 0 width or height!
                if (width <= 0 || height <= 0)
                        return;
 
                clipboard = (ClipboardManager) parent.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
+               keyListener.setClipboardManager(clipboard);
 
                if (!forcedSize) {
                        // recalculate buffer size
@@ -1203,10 +794,10 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
                if (direction > 0)
                        size -= step;
 
-               forcedSize = true;
                this.columns = cols;
                this.rows = rows;
                setFontSize(size);
+               forcedSize = true;
        }
 
        private int fontSizeCompare(float size, int cols, int rows, int width, int height) {
@@ -1348,4 +939,41 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener {
 
                return urls;
        }
+
+       /**
+        * @return
+        */
+       public boolean isUsingNetwork() {
+               return transport.usesNetwork();
+       }
+
+       /**
+        * @return
+        */
+       public TerminalKeyListener getKeyHandler() {
+               return keyListener;
+       }
+
+       /**
+        *
+        */
+       public void resetScrollPosition() {
+               // if we're in scrollback, scroll to bottom of window on input
+               if (buffer.windowBase != buffer.screenBase)
+                       buffer.setWindowBase(buffer.screenBase);
+       }
+
+       /**
+        *
+        */
+       public void increaseFontSize() {
+               setFontSize(fontSize + FONT_SIZE_STEP);
+       }
+
+       /**
+        *
+        */
+       public void decreaseFontSize() {
+               setFontSize(fontSize - FONT_SIZE_STEP);
+       }
 }
diff --git a/src/org/connectbot/service/TerminalKeyListener.java b/src/org/connectbot/service/TerminalKeyListener.java
new file mode 100644 (file)
index 0000000..deba880
--- /dev/null
@@ -0,0 +1,506 @@
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2010 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.connectbot.service;
+
+import java.io.IOException;
+
+import org.connectbot.TerminalView;
+import org.connectbot.bean.SelectionArea;
+import org.connectbot.util.PreferenceConstants;
+
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.content.res.Configuration;
+import android.preference.PreferenceManager;
+import android.text.ClipboardManager;
+import android.util.Log;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnKeyListener;
+import de.mud.terminal.VDUBuffer;
+import de.mud.terminal.vt320;
+
+/**
+ * @author kenny
+ *
+ */
+public class TerminalKeyListener implements OnKeyListener, OnSharedPreferenceChangeListener {
+       private static final String TAG = "ConnectBot.OnKeyListener";
+
+       public final static int META_CTRL_ON = 0x01;
+       public final static int META_CTRL_LOCK = 0x02;
+       public final static int META_ALT_ON = 0x04;
+       public final static int META_ALT_LOCK = 0x08;
+       public final static int META_SHIFT_ON = 0x10;
+       public final static int META_SHIFT_LOCK = 0x20;
+       public final static int META_SLASH = 0x40;
+       public final static int META_TAB = 0x80;
+
+       // The bit mask of momentary and lock states for each
+       public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK;
+       public final static int META_ALT_MASK = META_ALT_ON | META_ALT_LOCK;
+       public final static int META_SHIFT_MASK = META_SHIFT_ON | META_SHIFT_LOCK;
+
+       // All the transient key codes
+       public final static int META_TRANSIENT = META_CTRL_ON | META_ALT_ON
+                       | META_SHIFT_ON;
+
+       private final TerminalManager manager;
+       private final TerminalBridge bridge;
+       private final VDUBuffer buffer;
+
+       protected KeyCharacterMap keymap = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD);
+
+       private String keymode = null;
+       private boolean hardKeyboard = false;
+
+       private int metaState = 0;
+
+       private ClipboardManager clipboard = null;
+       private boolean selectingForCopy = false;
+       private final SelectionArea selectionArea;
+
+       private String encoding;
+
+       private final SharedPreferences prefs;
+
+       public TerminalKeyListener(TerminalManager manager,
+                       TerminalBridge bridge,
+                       VDUBuffer buffer,
+                       String encoding) {
+               this.manager = manager;
+               this.bridge = bridge;
+               this.buffer = buffer;
+               this.encoding = encoding;
+
+               selectionArea = new SelectionArea();
+
+               prefs = PreferenceManager.getDefaultSharedPreferences(manager);
+               prefs.registerOnSharedPreferenceChangeListener(this);
+
+               hardKeyboard = (manager.res.getConfiguration().keyboard
+                               == Configuration.KEYBOARD_QWERTY);
+
+               updateKeymode();
+       }
+
+       /**
+        * Handle onKey() events coming down from a {@link TerminalView} above us.
+        * Modify the keys to make more sense to a host then pass it to the transport.
+        */
+       public boolean onKey(View v, int keyCode, KeyEvent event) {
+               try {
+                       final boolean hardKeyboardHidden = manager.hardKeyboardHidden;
+
+                       // Ignore all key-up events except for the special keys
+                       if (event.getAction() == KeyEvent.ACTION_UP) {
+                               // There's nothing here for virtual keyboard users.
+                               if (!hardKeyboard || (hardKeyboard && hardKeyboardHidden))
+                                       return false;
+
+                               // skip keys if we aren't connected yet or have been disconnected
+                               if (bridge.isDisconnected() || bridge.transport == null)
+                                       return false;
+
+                               if (PreferenceConstants.KEYMODE_RIGHT.equals(keymode)) {
+                                       if (keyCode == KeyEvent.KEYCODE_ALT_RIGHT
+                                                       && (metaState & META_SLASH) != 0) {
+                                               metaState &= ~(META_SLASH | META_TRANSIENT);
+                                               bridge.transport.write('/');
+                                               return true;
+                                       } else if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT
+                                                       && (metaState & META_TAB) != 0) {
+                                               metaState &= ~(META_TAB | META_TRANSIENT);
+                                               bridge.transport.write(0x09);
+                                               return true;
+                                       }
+                               } else if (PreferenceConstants.KEYMODE_LEFT.equals(keymode)) {
+                                       if (keyCode == KeyEvent.KEYCODE_ALT_LEFT
+                                                       && (metaState & META_SLASH) != 0) {
+                                               metaState &= ~(META_SLASH | META_TRANSIENT);
+                                               bridge.transport.write('/');
+                                               return true;
+                                       } else if (keyCode == KeyEvent.KEYCODE_SHIFT_LEFT
+                                                       && (metaState & META_TAB) != 0) {
+                                               metaState &= ~(META_TAB | META_TRANSIENT);
+                                               bridge.transport.write(0x09);
+                                               return true;
+                                       }
+                               }
+
+                               return false;
+                       }
+
+                       // check for terminal resizing keys
+                       if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
+                               bridge.increaseFontSize();
+                               return true;
+                       } else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
+                               bridge.decreaseFontSize();
+                               return true;
+                       }
+
+                       // skip keys if we aren't connected yet or have been disconnected
+                       if (bridge.isDisconnected() || bridge.transport == null)
+                               return false;
+
+                       bridge.resetScrollPosition();
+
+                       boolean printing = (keymap.isPrintingKey(keyCode) || keyCode == KeyEvent.KEYCODE_SPACE);
+
+                       // otherwise pass through to existing session
+                       // print normal keys
+                       if (printing) {
+                               int curMetaState = event.getMetaState();
+
+                               metaState &= ~(META_SLASH | META_TAB);
+
+                               if ((metaState & META_SHIFT_MASK) != 0) {
+                                       curMetaState |= KeyEvent.META_SHIFT_ON;
+                                       metaState &= ~META_SHIFT_ON;
+                                       bridge.redraw();
+                               }
+
+                               if ((metaState & META_ALT_MASK) != 0) {
+                                       curMetaState |= KeyEvent.META_ALT_ON;
+                                       metaState &= ~META_ALT_ON;
+                                       bridge.redraw();
+                               }
+
+                               int key = keymap.get(keyCode, curMetaState);
+
+                               if ((metaState & META_CTRL_MASK) != 0) {
+                                       metaState &= ~META_CTRL_ON;
+                                       bridge.redraw();
+
+                                       if ((!hardKeyboard || (hardKeyboard && hardKeyboardHidden))
+                                                       && sendFunctionKey(keyCode))
+                                               return true;
+
+                                       // Support CTRL-a through CTRL-z
+                                       if (key >= 0x61 && key <= 0x7A)
+                                               key -= 0x60;
+                                       // Support CTRL-A through CTRL-_
+                                       else if (key >= 0x41 && key <= 0x5F)
+                                               key -= 0x40;
+                                       else if (key == 0x20)
+                                               key = 0x00;
+                                       else if (key == 0x3F)
+                                               key = 0x7F;
+                               }
+
+                               // handle pressing f-keys
+                               if ((hardKeyboard && !hardKeyboardHidden)
+                                               && (curMetaState & KeyEvent.META_SHIFT_ON) != 0
+                                               && sendFunctionKey(keyCode))
+                                       return true;
+
+                               if (key < 0x80)
+                                       bridge.transport.write(key);
+                               else
+                                       // TODO write encoding routine that doesn't allocate each time
+                                       bridge.transport.write(new String(Character.toChars(key))
+                                                       .getBytes(encoding));
+
+                               return true;
+                       }
+
+                       if (keyCode == KeyEvent.KEYCODE_UNKNOWN &&
+                                       event.getAction() == KeyEvent.ACTION_MULTIPLE) {
+                               byte[] input = event.getCharacters().getBytes(encoding);
+                               bridge.transport.write(input);
+                               return true;
+                       }
+
+                       // try handling keymode shortcuts
+                       if (hardKeyboard && !hardKeyboardHidden &&
+                                       event.getRepeatCount() == 0) {
+                               if (PreferenceConstants.KEYMODE_RIGHT.equals(keymode)) {
+                                       switch (keyCode) {
+                                       case KeyEvent.KEYCODE_ALT_RIGHT:
+                                               metaState |= META_SLASH;
+                                               return true;
+                                       case KeyEvent.KEYCODE_SHIFT_RIGHT:
+                                               metaState |= META_TAB;
+                                               return true;
+                                       case KeyEvent.KEYCODE_SHIFT_LEFT:
+                                               metaPress(META_SHIFT_ON);
+                                               return true;
+                                       case KeyEvent.KEYCODE_ALT_LEFT:
+                                               metaPress(META_ALT_ON);
+                                               return true;
+                                       }
+                               } else if (PreferenceConstants.KEYMODE_LEFT.equals(keymode)) {
+                                       switch (keyCode) {
+                                       case KeyEvent.KEYCODE_ALT_LEFT:
+                                               metaState |= META_SLASH;
+                                               return true;
+                                       case KeyEvent.KEYCODE_SHIFT_LEFT:
+                                               metaState |= META_TAB;
+                                               return true;
+                                       case KeyEvent.KEYCODE_SHIFT_RIGHT:
+                                               metaPress(META_SHIFT_ON);
+                                               return true;
+                                       case KeyEvent.KEYCODE_ALT_RIGHT:
+                                               metaPress(META_ALT_ON);
+                                               return true;
+                                       }
+                               } else {
+                                       switch (keyCode) {
+                                       case KeyEvent.KEYCODE_ALT_LEFT:
+                                       case KeyEvent.KEYCODE_ALT_RIGHT:
+                                               metaPress(META_ALT_ON);
+                                               return true;
+                                       case KeyEvent.KEYCODE_SHIFT_LEFT:
+                                       case KeyEvent.KEYCODE_SHIFT_RIGHT:
+                                               metaPress(META_SHIFT_ON);
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       // look for special chars
+                       switch(keyCode) {
+                       case KeyEvent.KEYCODE_CAMERA:
+
+                               // check to see which shortcut the camera button triggers
+                               String camera = manager.prefs.getString(
+                                               PreferenceConstants.CAMERA,
+                                               PreferenceConstants.CAMERA_CTRLA_SPACE);
+                               if(PreferenceConstants.CAMERA_CTRLA_SPACE.equals(camera)) {
+                                       bridge.transport.write(0x01);
+                                       bridge.transport.write(' ');
+                               } else if(PreferenceConstants.CAMERA_CTRLA.equals(camera)) {
+                                       bridge.transport.write(0x01);
+                               } else if(PreferenceConstants.CAMERA_ESC.equals(camera)) {
+                                       ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
+                               } else if(PreferenceConstants.CAMERA_ESC_A.equals(camera)) {
+                                       ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
+                                       bridge.transport.write('a');
+                               }
+
+                               break;
+
+                       case KeyEvent.KEYCODE_DEL:
+                               ((vt320) buffer).keyPressed(vt320.KEY_BACK_SPACE, ' ',
+                                               getStateForBuffer());
+                               metaState &= ~META_TRANSIENT;
+                               return true;
+                       case KeyEvent.KEYCODE_ENTER:
+                               ((vt320)buffer).keyTyped(vt320.KEY_ENTER, ' ', 0);
+                               metaState &= ~META_TRANSIENT;
+                               return true;
+
+                       case KeyEvent.KEYCODE_DPAD_LEFT:
+                               if (selectingForCopy) {
+                                       selectionArea.decrementColumn();
+                                       bridge.redraw();
+                               } else {
+                                       ((vt320) buffer).keyPressed(vt320.KEY_LEFT, ' ',
+                                                       getStateForBuffer());
+                                       metaState &= ~META_TRANSIENT;
+                                       bridge.tryKeyVibrate();
+                               }
+                               return true;
+
+                       case KeyEvent.KEYCODE_DPAD_UP:
+                               if (selectingForCopy) {
+                                       selectionArea.decrementRow();
+                                       bridge.redraw();
+                               } else {
+                                       ((vt320) buffer).keyPressed(vt320.KEY_UP, ' ',
+                                                       getStateForBuffer());
+                                       metaState &= ~META_TRANSIENT;
+                                       bridge.tryKeyVibrate();
+                               }
+                               return true;
+
+                       case KeyEvent.KEYCODE_DPAD_DOWN:
+                               if (selectingForCopy) {
+                                       selectionArea.incrementRow();
+                                       bridge.redraw();
+                               } else {
+                                       ((vt320) buffer).keyPressed(vt320.KEY_DOWN, ' ',
+                                                       getStateForBuffer());
+                                       metaState &= ~META_TRANSIENT;
+                                       bridge.tryKeyVibrate();
+                               }
+                               return true;
+
+                       case KeyEvent.KEYCODE_DPAD_RIGHT:
+                               if (selectingForCopy) {
+                                       selectionArea.incrementColumn();
+                                       bridge.redraw();
+                               } else {
+                                       ((vt320) buffer).keyPressed(vt320.KEY_RIGHT, ' ',
+                                                       getStateForBuffer());
+                                       metaState &= ~META_TRANSIENT;
+                                       bridge.tryKeyVibrate();
+                               }
+                               return true;
+
+                       case KeyEvent.KEYCODE_DPAD_CENTER:
+                               if (selectingForCopy) {
+                                       if (selectionArea.isSelectingOrigin())
+                                               selectionArea.finishSelectingOrigin();
+                                       else {
+                                               if (clipboard != null) {
+                                                       // copy selected area to clipboard
+                                                       String copiedText = selectionArea.copyFrom(buffer);
+
+                                                       clipboard.setText(copiedText);
+                                                       // XXX STOPSHIP
+//                                                     manager.notifyUser(manager.getString(
+//                                                                     R.string.console_copy_done,
+//                                                                     copiedText.length()));
+
+                                                       selectingForCopy = false;
+                                                       selectionArea.reset();
+                                               }
+                                       }
+                               } else {
+                                       if ((metaState & META_CTRL_ON) != 0) {
+                                               ((vt320)buffer).keyTyped(vt320.KEY_ESCAPE, ' ', 0);
+                                               metaState &= ~META_CTRL_ON;
+                                       } else
+                                               metaState |= META_CTRL_ON;
+                               }
+
+                               bridge.redraw();
+
+                               return true;
+                       }
+
+               } catch (IOException e) {
+                       Log.e(TAG, "Problem while trying to handle an onKey() event", e);
+                       try {
+                               bridge.transport.flush();
+                       } catch (IOException ioe) {
+                               Log.d(TAG, "Our transport was closed, dispatching disconnect event");
+                               bridge.dispatchDisconnect(false);
+                       }
+               } catch (NullPointerException npe) {
+                       Log.d(TAG, "Input before connection established ignored.");
+                       return true;
+               }
+
+               return false;
+       }
+
+
+       /**
+        * @param key
+        * @return successful
+        */
+       private boolean sendFunctionKey(int keyCode) {
+               switch (keyCode) {
+               case KeyEvent.KEYCODE_1:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F1, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_2:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F2, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_3:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F3, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_4:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F4, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_5:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F5, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_6:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F6, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_7:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F7, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_8:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F8, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_9:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F9, ' ', 0);
+                       return true;
+               case KeyEvent.KEYCODE_0:
+                       ((vt320) buffer).keyPressed(vt320.KEY_F10, ' ', 0);
+                       return true;
+               default:
+                       return false;
+               }
+       }
+
+       /**
+        * Handle meta key presses where the key can be locked on.
+        * <p>
+        * 1st press: next key to have meta state<br />
+        * 2nd press: meta state is locked on<br />
+        * 3rd press: disable meta state
+        *
+        * @param code
+        */
+       private void metaPress(int code) {
+               if ((metaState & (code << 1)) != 0) {
+                       metaState &= ~(code << 1);
+               } else if ((metaState & code) != 0) {
+                       metaState &= ~code;
+                       metaState |= code << 1;
+               } else
+                       metaState |= code;
+               bridge.redraw();
+       }
+
+       public void setTerminalKeyMode(String keymode) {
+               this.keymode = keymode;
+       }
+
+       private int getStateForBuffer() {
+               int bufferState = 0;
+
+               if ((metaState & META_CTRL_MASK) != 0)
+                       bufferState |= vt320.KEY_CONTROL;
+               if ((metaState & META_SHIFT_MASK) != 0)
+                       bufferState |= vt320.KEY_SHIFT;
+               if ((metaState & META_ALT_MASK) != 0)
+                       bufferState |= vt320.KEY_ALT;
+
+               return bufferState;
+       }
+
+       public int getMetaState() {
+               return metaState;
+       }
+
+       public void setClipboardManager(ClipboardManager clipboard) {
+               this.clipboard = clipboard;
+       }
+
+       public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
+                       String key) {
+               if (PreferenceConstants.KEYMODE.equals(key)) {
+                       updateKeymode();
+               }
+       }
+
+       private void updateKeymode() {
+               keymode = prefs.getString(PreferenceConstants.KEYMODE, PreferenceConstants.KEYMODE_RIGHT);
+       }
+
+       public void setCharset(String encoding) {
+               this.encoding = encoding;
+       }
+}
index 438636e..521ce4b 100644 (file)
@@ -18,6 +18,7 @@
 package org.connectbot.service;
 
 import java.io.IOException;
+import java.lang.ref.WeakReference;
 import java.security.PrivateKey;
 import java.security.PublicKey;
 import java.util.Arrays;
@@ -44,14 +45,12 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
 import android.content.res.AssetFileDescriptor;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.media.AudioManager;
 import android.media.MediaPlayer;
 import android.media.MediaPlayer.OnCompletionListener;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
 import android.net.Uri;
-import android.net.wifi.WifiManager;
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
@@ -73,6 +72,11 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
        public final static String TAG = "ConnectBot.TerminalManager";
 
        public List<TerminalBridge> bridges = new LinkedList<TerminalBridge>();
+       public Map<HostBean, WeakReference<TerminalBridge>> mHostBridgeMap =
+               new HashMap<HostBean, WeakReference<TerminalBridge>>();
+       public Map<String, WeakReference<TerminalBridge>> mNicknameBridgeMap =
+               new HashMap<String, WeakReference<TerminalBridge>>();
+
        public TerminalBridge defaultBridge = null;
 
        public List<HostBean> disconnected = new LinkedList<HostBean>();
@@ -88,10 +92,9 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
 
        protected SharedPreferences prefs;
 
-       private final IBinder binder = new TerminalBinder();
+       final private IBinder binder = new TerminalBinder();
 
-       private ConnectivityManager connectivityManager;
-       private WifiManager.WifiLock wifilock;
+       private ConnectivityReceiver connectivityManager;
 
        private MediaPlayer mediaPlayer;
 
@@ -108,6 +111,13 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
 
        private boolean resizeAllowed = true;
 
+       private boolean savingKeys;
+
+       protected List<WeakReference<TerminalBridge>> mPendingReconnect
+                       = new LinkedList<WeakReference<TerminalBridge>>();
+
+       public boolean hardKeyboardHidden;
+
        @Override
        public void onCreate() {
                Log.i(TAG, "Starting background service");
@@ -139,29 +149,31 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
                        }
                }
 
-               connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-
-               WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
-               wifilock = manager.createWifiLock(TAG);
-
                vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                wantKeyVibration = prefs.getBoolean(PreferenceConstants.BUMPY_ARROWS, true);
 
                wantBellVibration = prefs.getBoolean(PreferenceConstants.BELL_VIBRATE, true);
                enableMediaPlayer();
+
+               hardKeyboardHidden = (res.getConfiguration().hardKeyboardHidden ==
+                       Configuration.HARDKEYBOARDHIDDEN_YES);
+
+               final boolean lockingWifi = prefs.getBoolean(PreferenceConstants.WIFI_LOCK, true);
+
+               connectivityManager = new ConnectivityReceiver(this, lockingWifi);
+
+               updateSavingKeys();
+       }
+
+       private void updateSavingKeys() {
+               savingKeys = prefs.getBoolean(PreferenceConstants.MEMKEYS, true);
        }
 
        @Override
        public void onDestroy() {
                Log.i(TAG, "Destroying background service");
 
-               if (bridges.size() > 0) {
-                       TerminalBridge[] tmpBridges = bridges.toArray(new TerminalBridge[bridges.size()]);
-
-                       // disconnect and dispose of any existing bridges
-                       for (int i = 0; i < tmpBridges.length; i++)
-                               tmpBridges[i].dispatchDisconnect(true);
-               }
+               disconnectAll(true);
 
                if(hostdb != null) {
                        hostdb.close();
@@ -180,8 +192,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
                                pubkeyTimer.cancel();
                }
 
-               if (wifilock != null && wifilock.isHeld())
-                       wifilock.release();
+               connectivityManager.cleanup();
 
                ConnectionNotifier.getInstance().hideRunningNotification(this);
 
@@ -189,30 +200,60 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
        }
 
        /**
+        * Disconnect all currently connected bridges.
+        */
+       private void disconnectAll(final boolean immediate) {
+               TerminalBridge[] tmpBridges = null;
+
+               synchronized (bridges) {
+                       if (bridges.size() > 0) {
+                               tmpBridges = bridges.toArray(new TerminalBridge[bridges.size()]);
+                       }
+               }
+
+               if (tmpBridges != null) {
+                       // disconnect and dispose of any existing bridges
+                       for (int i = 0; i < tmpBridges.length; i++)
+                               tmpBridges[i].dispatchDisconnect(immediate);
+               }
+       }
+
+       /**
         * Open a new SSH session using the given parameters.
         */
-       private void openConnection(HostBean host) throws IllegalArgumentException, IOException {
+       private TerminalBridge openConnection(HostBean host) throws IllegalArgumentException, IOException {
                // throw exception if terminal already open
-               if (findBridge(host) != null) {
+               if (getConnectedBridge(host) != null) {
                        throw new IllegalArgumentException("Connection already open for that nickname");
                }
 
                TerminalBridge bridge = new TerminalBridge(this, host);
                bridge.setOnDisconnectedListener(this);
                bridge.startConnection();
-               bridges.add(bridge);
 
-               // Add a reference to the WifiLock
-               NetworkInfo info = connectivityManager.getActiveNetworkInfo();
-               if (isLockingWifi() &&
-                               info != null &&
-                               info.getType() == ConnectivityManager.TYPE_WIFI) {
-                       Log.d(TAG, "Acquiring WifiLock");
-                       wifilock.acquire();
+               synchronized (bridges) {
+                       bridges.add(bridge);
+                       WeakReference<TerminalBridge> wr = new WeakReference<TerminalBridge>(bridge);
+                       mHostBridgeMap.put(bridge.host, wr);
+                       mNicknameBridgeMap.put(bridge.host.getNickname(), wr);
+               }
+
+               synchronized (disconnected) {
+                       disconnected.remove(bridge.host);
+               }
+
+               if (bridge.isUsingNetwork()) {
+                       connectivityManager.incRef();
+               }
+
+               if (prefs.getBoolean(PreferenceConstants.CONNECTION_PERSIST, true)) {
+                       ConnectionNotifier.getInstance().showRunningNotification(this);
                }
 
                // also update database with new connected time
                touchHost(host);
+
+               return bridge;
        }
 
        public String getEmulation() {
@@ -228,29 +269,17 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
                return scrollback;
        }
 
-       public boolean isSavingKeys() {
-               return prefs.getBoolean(PreferenceConstants.MEMKEYS, true);
-       }
-
-       public String getKeyMode() {
-               return prefs.getString(PreferenceConstants.KEYMODE, PreferenceConstants.KEYMODE_RIGHT); // "Use right-side keys"
-       }
-
-       public boolean isLockingWifi() {
-               return prefs.getBoolean(PreferenceConstants.WIFI_LOCK, true);
-       }
-
        /**
         * Open a new connection by reading parameters from the given URI. Follows
         * format specified by an individual transport.
         */
-       public void openConnection(Uri uri) throws Exception {
+       public TerminalBridge openConnection(Uri uri) throws Exception {
                HostBean host = TransportFactory.findHost(hostdb, uri);
 
                if (host == null)
                        host = TransportFactory.getTransport(uri.getScheme()).createHost(uri);
 
-               openConnection(host);
+               return openConnection(host);
        }
 
        /**
@@ -262,35 +291,72 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
        }
 
        /**
-        * Find the {@link TerminalBridge} with the given nickname.
+        * Find a connected {@link TerminalBridge} with the given HostBean.
+        *
+        * @param host the HostBean to search for
+        * @return TerminalBridge that uses the HostBean
         */
-       public TerminalBridge findBridge(HostBean host) {
-               // find the first active bridge with given nickname
-               for(TerminalBridge bridge : bridges) {
-                       if (bridge.host.equals(host))
-                               return bridge;
+       public TerminalBridge getConnectedBridge(HostBean host) {
+               WeakReference<TerminalBridge> wr = mHostBridgeMap.get(host);
+               if (wr != null) {
+                       return wr.get();
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Find a connected {@link TerminalBridge} using its nickname.
+        *
+        * @param nickname
+        * @return TerminalBridge that matches nickname
+        */
+       public TerminalBridge getConnectedBridge(final String nickname) {
+               if (nickname == null) {
+                       return null;
+               }
+               WeakReference<TerminalBridge> wr = mNicknameBridgeMap.get(nickname);
+               if (wr != null) {
+                       return wr.get();
+               } else {
+                       return null;
                }
-               return null;
        }
 
        /**
         * Called by child bridge when somehow it's been disconnected.
         */
        public void onDisconnected(TerminalBridge bridge) {
-               // remove this bridge from our list
-               bridges.remove(bridge);
+               boolean shouldHideRunningNotification = false;
+
+               synchronized (bridges) {
+                       // remove this bridge from our list
+                       bridges.remove(bridge);
+
+                       mHostBridgeMap.remove(bridge.host);
+                       mNicknameBridgeMap.remove(bridge.host.getNickname());
+
+                       if (bridge.isUsingNetwork()) {
+                               connectivityManager.decRef();
+                       }
+
+                       if (bridges.size() == 0 &&
+                                       mPendingReconnect.size() == 0) {
+                               shouldHideRunningNotification = true;
+                       }
+               }
 
-               if (bridges.size() == 0 && wifilock.isHeld()) {
-                       Log.d(TAG, "WifiLock was held, releasing");
-                       wifilock.release();
+               synchronized (disconnected) {
+                       disconnected.add(bridge.host);
                }
 
-               disconnected.add(bridge.host);
+               if (shouldHideRunningNotification) {
+                       ConnectionNotifier.getInstance().hideRunningNotification(this);
+               }
 
                // pass notification back up to gui
                if (disconnectHandler != null)
                        Message.obtain(disconnectHandler, -1, bridge).sendToTarget();
-
        }
 
        public boolean isKeyLoaded(String nickname) {
@@ -298,6 +364,9 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
        }
 
        public void addKey(PubkeyBean pubkey, Object trileadKey) {
+               if (!savingKeys)
+                       return;
+
                removeKey(pubkey.getNickname());
 
                byte[] sshPubKey = PubkeyUtils.extractOpenSSHPublic(trileadKey);
@@ -410,8 +479,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
 
                setResizeAllowed(true);
 
-               ConnectionNotifier.getInstance().hideRunningNotification(this);
-
                stopIdleTimer();
 
                // Make sure we stay running to maintain the bridges
@@ -426,8 +493,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
 
                setResizeAllowed(true);
 
-               ConnectionNotifier.getInstance().hideRunningNotification(this);
-
                Log.i(TAG, "Someone rebound to TerminalManager");
 
                stopIdleTimer();
@@ -441,13 +506,6 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
 
                if (bridges.size() == 0) {
                        stopWithDelay();
-               } else {
-                       /* If user wants the connections to stay alive at all costs,
-                        * set the service to be "foreground."
-                        */
-                       if (prefs.getBoolean(PreferenceConstants.CONNECTION_PERSIST, true)) {
-                               ConnectionNotifier.getInstance().showRunningNotification(this);
-                       }
                }
 
                return true;
@@ -510,7 +568,7 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
                        vibrate();
        }
 
-       class BeepListener implements OnCompletionListener {
+       private static class BeepListener implements OnCompletionListener {
                public void onCompletion(MediaPlayer mp) {
                        mp.seekTo(0);
                }
@@ -555,6 +613,11 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
                } else if (PreferenceConstants.BUMPY_ARROWS.equals(key)) {
                        wantKeyVibration = sharedPreferences.getBoolean(
                                        PreferenceConstants.BUMPY_ARROWS, true);
+               } else if (PreferenceConstants.WIFI_LOCK.equals(key)) {
+                       final boolean lockingWifi = prefs.getBoolean(PreferenceConstants.WIFI_LOCK, true);
+                       connectivityManager.setWantWifiLock(lockingWifi);
+               } else if (PreferenceConstants.MEMKEYS.equals(key)) {
+                       updateSavingKeys();
                }
        }
 
@@ -570,9 +633,72 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
                return resizeAllowed;
        }
 
-       public class KeyHolder {
+       public static class KeyHolder {
                public PubkeyBean bean;
                public Object trileadKey;
                public byte[] openSSHPubkey;
        }
+
+       /**
+        * Called when connectivity to the network is lost and it doesn't appear
+        * we'll be getting a different connection any time soon.
+        */
+       public void onConnectivityLost() {
+               final Thread t = new Thread() {
+                       @Override
+                       public void run() {
+                               disconnectAll(false);
+                       }
+               };
+               t.setName("Disconnector");
+               t.start();
+       }
+
+       /**
+        * Called when connectivity to the network is restored.
+        */
+       public void onConnectivityRestored() {
+               final Thread t = new Thread() {
+                       @Override
+                       public void run() {
+                               reconnectPending();
+                       }
+               };
+               t.setName("Reconnector");
+               t.start();
+       }
+
+       /**
+        * Insert request into reconnect queue to be executed either immediately
+        * or later when connectivity is restored depending on whether we're
+        * currently connected.
+        *
+        * @param bridge the TerminalBridge to reconnect when possible
+        */
+       public void requestReconnect(TerminalBridge bridge) {
+               synchronized (mPendingReconnect) {
+                       mPendingReconnect.add(new WeakReference<TerminalBridge>(bridge));
+                       if (!bridge.isUsingNetwork() ||
+                                       connectivityManager.isConnected()) {
+                               reconnectPending();
+                       }
+               }
+       }
+
+       /**
+        * Reconnect all bridges that were pending a reconnect when connectivity
+        * was lost.
+        */
+       private void reconnectPending() {
+               synchronized (mPendingReconnect) {
+                       for (WeakReference<TerminalBridge> ref : mPendingReconnect) {
+                               TerminalBridge bridge = ref.get();
+                               if (bridge == null) {
+                                       continue;
+                               }
+                               bridge.startConnection();
+                       }
+                       mPendingReconnect.clear();
+               }
+       }
 }
index fbd4655..18397ea 100644 (file)
@@ -246,4 +246,9 @@ public abstract class AbsTransport {
        public static String getFormatHint(Context context) {
                return "???";
        }
+
+       /**
+        * @return
+        */
+       public abstract boolean usesNetwork();
 }
index 46903b2..5ace1b0 100644 (file)
@@ -208,4 +208,12 @@ public class Local extends AbsTransport {
        public static String getFormatHint(Context context) {
                return context.getString(R.string.hostpref_nickname_title);
        }
+
+       /* (non-Javadoc)
+        * @see org.connectbot.transport.AbsTransport#usesNetwork()
+        */
+       @Override
+       public boolean usesNetwork() {
+               return false;
+       }
 }
index 11e0659..8a90f72 100644 (file)
@@ -299,7 +299,7 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC
                        Log.d(TAG, String.format("Found unlocked key '%s' already in-memory", pubkey.getNickname()));
 
                        if (pubkey.isConfirmUse()) {
-                               if (promptForPubkeyUse(pubkey.getNickname()))
+                               if (!promptForPubkeyUse(pubkey.getNickname()))
                                        return false;
                        }
 
@@ -342,10 +342,8 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC
 
                        Log.d(TAG, String.format("Unlocked key '%s'", pubkey.getNickname()));
 
-                       // save this key in-memory if option enabled
-                       if(manager.isSavingKeys()) {
-                               manager.addKey(pubkey, trileadKey);
-                       }
+                       // save this key in memory
+                       manager.addKey(pubkey, trileadKey);
                }
 
                return tryPublicKey(host.getUsername(), pubkey.getNickname(), trileadKey);
@@ -944,4 +942,12 @@ public class SSH extends AbsTransport implements ConnectionMonitor, InteractiveC
                agentLockPassphrase = lockPassphrase;
                return true;
        }
+
+       /* (non-Javadoc)
+        * @see org.connectbot.transport.AbsTransport#usesNetwork()
+        */
+       @Override
+       public boolean usesNetwork() {
+               return true;
+       }
 }
index b7388ad..5fde2f6 100644 (file)
@@ -319,4 +319,12 @@ public class Telnet extends AbsTransport {
                                context.getString(R.string.format_hostname),
                                context.getString(R.string.format_port));
        }
+
+       /* (non-Javadoc)
+        * @see org.connectbot.transport.AbsTransport#usesNetwork()
+        */
+       @Override
+       public boolean usesNetwork() {
+               return true;
+       }
 }
index bd567ce..b0dce6d 100644 (file)
@@ -134,14 +134,12 @@ public class HostDatabase extends RobustSQLiteOpenHelper {
                addIndexName(TABLE_COLOR_DEFAULTS + FIELD_COLOR_SCHEME + "index");
        }
 
-       private Object dbLock;
+       public static final Object[] dbLock = new Object[0];
 
        public HostDatabase(Context context) {
                super(context, DB_NAME, null, DB_VERSION);
 
                getWritableDatabase().close();
-
-               dbLock = new Object();
        }
 
        @Override
diff --git a/src/org/connectbot/util/OnDbWrittenListener.java b/src/org/connectbot/util/OnDbWrittenListener.java
new file mode 100644 (file)
index 0000000..ef33797
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2010 Kenny Root, Jeffrey Sharkey
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.connectbot.util;
+
+/**
+ * @author kroot
+ *
+ */
+public interface OnDbWrittenListener {
+       public void onDbWritten();
+}
index 261152a..37e1871 100644 (file)
@@ -25,6 +25,8 @@ 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);
 
        public static final String MEMKEYS = "memkeys";
        public static final String UPDATE = "update";
@@ -58,6 +60,7 @@ public class PreferenceConstants {
        public static final String CAMERA_CTRLA_SPACE = "Ctrl+A then Space";
        public static final String CAMERA_CTRLA = "Ctrl+A";
        public static final String CAMERA_ESC = "Esc";
+       public static final String CAMERA_ESC_A = "Esc+A";
 
        public static final String KEEP_ALIVE = "keepalive";
 
@@ -76,4 +79,7 @@ public class PreferenceConstants {
        public static final float DEFAULT_BELL_VOLUME = 0.25f;
 
        public static final String CONNECTION_PERSIST = "connPersist";
+
+       /* Backup identifiers */
+       public static final String BACKUP_PREF_KEY = "prefs";
 }
index 923a027..e12307e 100644 (file)
@@ -571,17 +571,6 @@ public class UberColorPickerDialog extends Dialog {
                }
 
                /**
-                * Convert a slider position in the range [0,PALETTE_DIM] to a byte value in the range [0,255].
-                * @param sliderPos in the range [0,PALETTE_DIM].
-                * @return
-                */
-               public int sliderPosTo255(int sliderPos) {
-                       int int255 = (int)(255.0f * ((float)sliderPos / (float)PALETTE_DIM));
-                       int255 = pinToByte(int255);
-                       return int255;
-               }
-
-               /**
                 * Wrap Math.round().  I'm not a Java expert.  Is this the only way to avoid writing "(int)Math.round" everywhere?
                 * @param x
                 * @return
@@ -591,20 +580,6 @@ public class UberColorPickerDialog extends Dialog {
                }
 
                /**
-                * Limit a value to a min and max range.
-                * @param n
-                * @return
-                */
-               private int pinToByte(int n) {
-                       if (n < 0) {
-                               n = 0;
-                       } else if (n > 255) {
-                               n = 255;
-                       }
-                       return n;
-               }
-
-               /**
                 * Limit a value to the range [0,1].
                 * @param n
                 * @return