Conflicts: AndroidManifest.xml res/layout/term_activity.xml res/values/strings.xml src/jackpal/androidterm/Term.java src/jackpal/androidterm/util/ServiceForegroundCompat.java commit e543ef9 Author: Jack Palevich <email@example.com> Date: Sun Sep 18 10:13:05 2011 -0700 Generate native code for x86 as well as armeabi. In theory this will allow Android Terminal Emulator to run on an x86 version of Android. commit 7165bc8 Author: Jack Palevich <firstname.lastname@example.org> Date: Sun Sep 18 10:11:20 2011 -0700 Update config file for latest Android SDK commit 3a738cd Author: Jack Palevich <email@example.com> Date: Sun Sep 18 10:09:24 2011 -0700 Update private build tool to support NDK r6b commit ccfdb92 Author: jjsan <firstname.lastname@example.org> Date: Tue Sep 6 21:36:55 2011 +0200 Updated Slovak Language Change-Id: I7de4ff32182bcba7e0379e3316b05e39a2aa50a8 commit 5238dae Author: Jack Palevich <email@example.com> Date: Mon Aug 29 16:52:45 2011 -0700 Increment version number. commit 811696d Author: Jack Palevich <firstname.lastname@example.org> Date: Sun Aug 28 11:34:21 2011 -0700 Handle fractional-pixel-width fixed-width fonts. This should fix the problems people have been having with text rendering when using non-standard fixed-width fonts. commit f727e5f Author: Jack Palevich <email@example.com> Date: Sun Aug 28 10:29:52 2011 -0700 Remove JDK 1.5-incompatible interface method @Override annotations Allows building with JDK 1.5. commit 62c8611 Author: Steven Luo <firstname.lastname@example.org> Date: Sun Aug 28 09:43:09 2011 -0700 Avoid accessing a finished TranscriptScreen when resuming the terminal activity updatePrefs() may ask each terminal session in the list to update its size, which requires accessing the TranscriptScreen. Therefore, we need to update the list of running terminal sessions before calling updatePrefs(), to preclude the possibility of accessing a finished TranscriptScreen. Also, if a window was closed in the WindowList activity, and then the user selected a specific window, the window number passed to us in onActivityResult() refers to the window list *after* taking window closures into account. We therefore need to defer switching to the user's selected window until after the list of running sessions is updated (onActivityResult() is called before onResume(), so it can't be done there); this avoids calling onResume() on a stale EmulatorView, which results in an attempt to access a finished TranscriptScreen. commit 6b70a47 Author: Jack Palevich <email@example.com> Date: Sat Aug 27 21:43:09 2011 -0700 Fix resource-related problems when running on Android 1.5 to 2.2 Hurray for the emulator for making it easy to test older versions + Use our own copies of system drawables not available in older versions. + Make sure there's a (mdpi resolution) copy of every drawable in the plain "drawable" directory, since that's where Android 1.5 looks. commit 9c11960 Author: Steven Luo <firstname.lastname@example.org> Date: Sat Aug 27 13:33:30 2011 -0700 Add UI for switching and managing terminal sessions. We expose three different ways to manage terminal sessions: * Options menu items to open a new window and close the current window. * A WindowList activity, reachable from the options menu, which lists all the open windows and allows opening, closing, and switching of windows. The behavior is patterned after the window list activity in the Android browser. * Gestures to change windows -- swipe right-to-left for the next window, left-to-right for the previous window. The options menu items have been reordered to make what should be the five most frequently used items (new window, close window, window list, toggle keyboard, special keys reference) appear in the icon menu so that the user doesn't have to touch "More" to reach them. This patch adds several icons. btn_close_window and ic_menu_windows come from the Android browser source, while the rest come from the Android 2.3.3 SDK platform, revision 2 (platforms/android-10/data/res). commit 5f41148 Author: Steven Luo <email@example.com> Date: Sat Aug 27 13:23:52 2011 -0700 Support multiple sessions per terminal activity. This patch does the following: * Replace the EmulatorView widget in the activity layout with a TermViewFlipper, which is a ViewFlipper with a couple of added conveniences for dealing with EmulatorViews (e.g. pausing/resuming them when changing the view). * Add an ArrayList in the service to hold TermSessions, and make the activity bind to the service so that it can retrieve the list. This isn't strictly necessary for multisession support, but allows us to decouple the activity from the sessions, which will (in the future) allow us to restart or even close the activity without losing running sessions. * Now that EmulatorViews aren't being created automatically when the layout is inflated, but are instead created by hand, move a bunch of initialization stuff to the EmulatorView constructor. * Make the input reader threads for each session exit on EOF. These threads hold a reference to their TermSession objects, which would leak otherwise. For now, one EmulatorView and TermSession are created as soon as the activity binds to the service, if none exist; no UI to create additional sessions is included. commit f44119c Author: Steven Luo <firstname.lastname@example.org> Date: Sat Aug 27 13:22:21 2011 -0700 Don't accept input from process after TranscriptScreen is finished. This prevents a bunch of noise in the logs. commit 4ffcbfd Author: Steven Luo <email@example.com> Date: Sat Aug 27 12:37:47 2011 -0700 Throw away TranscriptScreen backing store on session finish Android's InputMethodManager seems to hold a reference to a finished activity object for a while after the activity is destroyed. This keeps everything the activity holds a reference to in memory, which in our case includes a fairly significant chunk of memory: the backing store to the TranscriptScreen. Throw this away when it's not needed, to reduce the memory impact of this behavior. commit 47cc8a2 Author: Steven Luo <firstname.lastname@example.org> Date: Sat Aug 27 12:33:24 2011 -0700 Use TermSession in activity and view instead of old terminal-handling code This completes the process of isolating the code for each terminal session, which should considerably simplify the task of adding support for multiple sessions. commit bf017db Author: Steven Luo <email@example.com> Date: Sat Aug 27 12:29:49 2011 -0700 Add TermSession class to represent a terminal session At the moment, the assumption that each terminal activity contains only one EmulatorView and hosts only one terminal session is fairly deeply embedded into the code. To help break this assumption, we introduce a new TermSession class, which holds the TerminalEmulator and TranscriptScreen for a session, and handles the launching and watching of the process and the setup of the I/O streams. commit be18807 Author: Steven Luo <firstname.lastname@example.org> Date: Sat Aug 27 12:24:29 2011 -0700 Modify the activity and view to use the new TermSettings class. commit 972a349 Author: Steven Luo <email@example.com> Date: Sat Aug 27 12:20:44 2011 -0700 For multisession support, we eventually want to keep the terminal sessions in the service instead of tying them to the activity. This implies that we have to stop holding SharedPreferences objects in all of the classes tied to the session. To this end, introduce a new TermSettings class, which is responsible for reading SharedPreferences and holding the current value of config settings. commit cbd439b Author: Steven Luo <firstname.lastname@example.org> Date: Sat Aug 27 12:12:54 2011 -0700 This patch isn't really necessary, but it makes life easier for me. For local builds, I change the package name to net.steven676.android.terminal, which allows co-installation with the Market version; however, if the debug constants stay in the Term class, I have to change every file using them to either belong to the new package, or else import net.steven676.android.terminal.Term. commit ff2dcf6 Author: Steven Luo <email@example.com> Date: Sat Aug 27 12:02:31 2011 -0700 The fact that Term.java contains substantially all of the classes of the application clashes with Java's model of one class per file, and is inconvenient when refactoring the code to allow for multiple terminal sessions in the activity. This patch splits out all of the classes into separate files, and groups related classes into packages; no actual changes to the code are made. commit 56dc959 Author: Jack Palevich <firstname.lastname@example.org> Date: Sat Aug 27 11:38:01 2011 -0700 Ignore local.properties contains machine-specific information, not useful to save in repo. commit 029570a Author: Jack Palevich <email@example.com> Date: Mon Aug 22 20:53:29 2011 -0700 Shrink market icon to match "safe" bounds See http://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870 commit dd43ce4 Author: Jack Palevich <firstname.lastname@example.org> Date: Mon Aug 22 20:39:40 2011 -0700 Improve market icon. Shinier, and more like a terminal. commit 3f50ffa Author: Jack Palevich <email@example.com> Date: Sun Aug 21 16:44:04 2011 -0700 Updated translations Thanks to firstname.lastname@example.org commit a6f3ac3 Author: Ondrej Zima <email@example.com> Date: Tue Aug 16 10:27:44 2011 +0200 Added Czech translation. Change-Id: I42fc8a3c56c5ce7fa457a3f1b7f54c875cb9ce2b commit 804f3b5 Author: Jack Palevich <firstname.lastname@example.org> Date: Sat Jun 25 20:11:04 2011 +0800 Increment version number. commit 839ac83 Author: Jack Palevich <email@example.com> Date: Sat Jun 25 20:09:29 2011 +0800 Update in-app documentation for special keys Contributed by Steven Luo firstname.lastname@example.org commit cb368f0 Author: Jack Palevich <email@example.com> Date: Sat Jun 25 20:07:44 2011 +0800 Add F1-F12 and Ins/Del/Home/End keys Contributed by Steven Luo firstname.lastname@example.org who writes: The mapping is as follows: Fn-[1-9]: F1-F9 Fn-0: F10 Ctrl-9: F11 Ctrl-0: F12 Fn-I: Ins Fn-X: Del Fn-H: Home Fn-F: End It should be noted that a real VT100 does not have Home/End keys, and as such, the terminfo entry for TERM=vt100 doesn't contain escape codes for Home and End. This bothers some applications, but not others. The codes generated match those sent by the Linux console (TERM=linux), which appears to work fine as a TERM setting since the emulation fixes in 1.0.30. xterm sends different escape codes, though; I left the escape codes at their present values because TERM=xterm causes problems with some applications. Addresses GitHub issue #9. --- I'm unhappy with the reintroduction of different behaviors for the Ctrl key, but I couldn't think of another choice that's guaranteed to make sense on any soft keyboard layout. (Fn-J/K and Fn-(/) are the two other possibilities that occurred to me.) Feel free to change. commit 29e95e9 Author: Jack Palevich <email@example.com> Date: Sat Jun 25 20:03:30 2011 +0800 Fix behavior of Ctrl-[0-9] Patch contributed by Steven Luo. firstname.lastname@example.org Steven writes: In xterm on my Debian system, the Ctrl-[0-9] combinations appear to map to the following: Ctrl-2: ^@ (NUL) Ctrl-3: ^[ (ESC) Ctrl-4: ^\ Ctrl-5: ^] Ctrl-6: ^^ Ctrl-7: ^_ Ctrl-8: \177 (DEL) Ctrl-1, Ctrl-9, and Ctrl-0 appear to send 1, 9, and 0 respectively. I have no idea whether anyone actually seriously uses these, but make these key combinations behave in that manner, and remove the bogus Ctrl-[0-9] and superfluous Fn- combos. commit 8928316 Author: Jack Palevich <email@example.com> Date: Sat Jun 25 20:00:54 2011 +0800 Make Ctrl/Fn-[A-Z] work with uppercase as well as lowercase letters Patch courtesy Steven Luo firstname.lastname@example.org Steven says: For Ctrl-[A-Z], this matches the behavior of xterm running on my Debian box; for Fn-[A-Z], there are no possible compatibility issues and it seems like the most natural thing to do. commit 290aaf2 Author: Jack Palevich <email@example.com> Date: Sat Jun 25 19:50:56 2011 +0800 Add link to Downloads page to README file. commit 2802515 Author: Jack Palevich <firstname.lastname@example.org> Date: Sat Jun 25 19:45:32 2011 +0800 Enable an initial command string to be passed as part of the intent. Thanks to Christoph Schmidt-Hieber, M.D., email@example.com for the idea and the patch. commit cd9a67a Author: Jack Palevich <firstname.lastname@example.org> Date: Sat Jun 25 19:35:39 2011 +0800 Update Italian localization Thanks to email@example.com commit 9c5e6f7 Author: Jack Palevich <firstname.lastname@example.org> Date: Sat Jun 18 19:43:58 2011 +0800 Increment version number. commit a6e99b9 Author: Jack Palevich <email@example.com> Date: Sat Jun 18 21:16:32 2011 +0800 Implement a "None" setting for control and function keys. Thanks to Eli Grey <firstname.lastname@example.org> for the idea. Also made the "Special keys" dialog text localizable. commit c19d57e Author: Jack Palevich <email@example.com> Date: Sat Jun 18 21:11:42 2011 +0800 Rename the rt tool to pushAndRun This tool is used to build and test the terminal emulator. commit 5d499f4 Author: Jack Palevich <firstname.lastname@example.org> Date: Sat Jun 18 19:43:22 2011 +0800 Allow application to be installed on the SD Card. commit 81ddd14 Author: Jack Palevich <email@example.com> Date: Sat Jun 18 19:40:54 2011 +0800 Fix insert and delete line code. Thanks to Sam Jacobson <firstname.lastname@example.org> for the bug report and fix! commit 4f369e5 Author: Jack Palevich <email@example.com> Date: Sat Jun 18 19:37:15 2011 +0800 Implement missing SGR escape codes Thanks to Sam Jacobson <firstname.lastname@example.org> for the bug report! commit c66d078 Author: Jack Palevich <email@example.com> Date: Sat Jun 18 21:17:09 2011 +0800 Escape single quote character so string resource compiles. commit 6ddda13 Merge: df515f5 1d8bfb7 Author: Jack Palevich <firstname.lastname@example.org> Date: Sat Jun 18 04:02:36 2011 -0700 Merge pull request #20 from cpasmoi/master missing translations commit 8568e0d Author: Patrik Kullman <email@example.com> Date: Sun Jun 12 09:48:43 2011 +0200 Mark non-translatable strings Change-Id: I923fa5aafb0345fcfba0ad6d6ae01feb9d0f2c48
Since it's installed as a system app, AndroidTerm needs its library to be located in /system/lib/ rather than within its apk. Change-Id: I528325f9745c52bd427e3f861536834270eac6fd
…Emulator into HEAD Conflicts: Android.mk AndroidManifest.xml jni/Android.mk res/values-de/arrays.xml res/values-de/strings.xml res/values/arrays.xml src/jackpal/androidterm/Exec.java src/jackpal/androidterm/Term.java Change-Id: I4eb8df22794c17b490ca5131f10af6f11506891b
This bug was detected by using CheckJNI (setprop dalvik.vm.checkjni true; stop; start).
(Maybe I shouldn't check this file in at all.)
…ence on CyanogenMod Commit 28d47b8... ("Fix java.lang.UnsatisfiedLinkError error.") changed the name of the shared library from libandroidterm to libandroidterm2, to avoid a potential library conflict with API/ABI incompatible versions being shipped in some custom firmwares. Unfortunately, CyanogenMod also uses the name libandroidterm2: CyanogenMod@7d0de89 Change the name again, this time to something that should hopefully be unique, which should fix the problems that CyanogenMod users have been reporting in the Android Market comments. (A big scary warning to firmware distributors that the shared library ABI must not be modified without consulting upstream might be appropriate somewhere ...) Signed-off-by: Jack Palevich <firstname.lastname@example.org>
…checked for errors by WGSpoelstra, thank you." into gingerbread
Completely checked for errors by WGSpoelstra, thank you.
Change shared library name from libandroidterm to libandroidterm2 My theory is that this bug is happening on systems that have system versions of the libandroidterm shared library. Version 1.0.26 of Android Terminal Emulator added a new API, hangupProcessGroup, to the libandroidterm library. I think on devices that have libandroidterm in their system library, that version takes precedence over the version in the application, and so the hangupProcessGroup API is not found. By changing the name of the libandroidterm library to libandroidterm2 we should avoid loading the system version of the libandroidterm library.
The definition of the InputConnection interface for SDK version >= 9 includes new functions setComposingRegion() and getSelectedText(). If we don't include them in our implementation, the build fails with [javac] /home/steven/devel/android-terminal-emulator/src/jackpal/androidterm/Term.java:2955: <anonymous jackpal.androidterm.EmulatorView$4> is not abstract and does not override abstract method setComposingRegion(int,int) in android.view.inputmethod.InputConnection (at least when building with SDK 10).
With the Terminal activity's launchMode set to singleInstance, the Preferences activity starts a new task, which can lead to some very strange back stack behavior. Set launchMode to singleTask instead, which will allow the Preferences activity into the same task.
It can be very useful to prevent the device from sleeping or from turning off the wifi radio -- but in a general terminal application it's difficult to guess when this is wanted. Consider the following: (1) Nothing is happening. We don't want to hold either a WakeLock or WifiLock. (2) The user is logged into a remote system via SSH on wifi. We don't need to hold a WakeLock, but should take a WifiLock to prevent the SSH session from being disconnected. (3) The user is doing some long-running computation (locally on the device) in the shell. We should take a WakeLock, but not a WifiLock. (4) The user is doing apt-get dist-upgrade in her Debian chroot on the device. We should hold both a WakeLock and a WifiLock. Therefore, assume the user knows best, and add menu options to take/drop a WakeLock and a WifiLock. Note that this requires adding WAKE_LOCK to the set of permissions we use.
By default, an Android process is liable to be killed whenever it's not in the foreground. When this happens to us, it leaves the user unable to resume her terminal session, which is still running. By starting a service in our process (even one which, like this one, does nothing at all) and marking it as a foreground service, we prevent the system from killing our process except in out-of-memory situations.