Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb2f892dc5 | ||
|
|
8b6e8d7fdd | ||
|
|
d0eeaa9fc3 | ||
|
|
b793913481 | ||
|
|
d48b438c40 | ||
|
|
11afe895e1 | ||
|
|
bc96f71a2d | ||
|
|
87dfded5e6 | ||
|
|
7c0ae4cb54 | ||
|
|
b917acbbfa | ||
|
|
7d9d6fb797 | ||
|
|
74040dd37f | ||
|
|
e94f06d0f7 | ||
|
|
af21b6dc3e | ||
|
|
e0e8257f1c |
@@ -5,16 +5,16 @@ android {
|
||||
buildToolsVersion "25.0.2"
|
||||
|
||||
dependencies {
|
||||
compile 'com.android.support:support-annotations:25.0.1'
|
||||
compile "com.android.support:support-v4:25.0.1"
|
||||
compile 'com.android.support:support-annotations:25.1.0'
|
||||
compile "com.android.support:support-v4:25.1.0"
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.termux"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 25
|
||||
versionCode 45
|
||||
versionName "0.45"
|
||||
versionCode 46
|
||||
versionName "0.46"
|
||||
|
||||
externalNativeBuild {
|
||||
ndkBuild {
|
||||
|
||||
@@ -12,6 +12,7 @@ import java.lang.reflect.Field;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -105,7 +106,6 @@ public final class BackgroundJob {
|
||||
// EXTERNAL_STORAGE is needed for /system/bin/am to work on at least
|
||||
// Samsung S7 - see https://plus.google.com/110070148244138185604/posts/gp8Lk3aCGp3.
|
||||
final String externalStorageEnv = "EXTERNAL_STORAGE=" + System.getenv("EXTERNAL_STORAGE");
|
||||
String[] env;
|
||||
if (failSafe) {
|
||||
// Keep the default path so that system binaries can be used in the failsafe session.
|
||||
final String pathEnv = "PATH=" + System.getenv("PATH");
|
||||
@@ -186,9 +186,7 @@ public final class BackgroundJob {
|
||||
List<String> result = new ArrayList<>();
|
||||
if (interpreter != null) result.add(interpreter);
|
||||
result.add(fileToExecute);
|
||||
if (args != null) {
|
||||
for (String arg : args) result.add(arg);
|
||||
}
|
||||
if (args != null) Collections.addAll(result, args);
|
||||
return result.toArray(new String[result.size()]);
|
||||
}
|
||||
|
||||
|
||||
@@ -141,8 +141,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
|
||||
.setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION).build()).build();
|
||||
int mBellSoundId;
|
||||
|
||||
Animation mOnBellAnimation;
|
||||
|
||||
private final BroadcastReceiver mBroadcastReceiever = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
@@ -213,8 +211,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
|
||||
mOnBellAnimation = AnimationUtils.loadAnimation(this, R.anim.on_bell);
|
||||
|
||||
mSettings = new TermuxPreferences(this);
|
||||
|
||||
setContentView(R.layout.drawer_layout);
|
||||
@@ -410,8 +406,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
|
||||
public void onBell(TerminalSession session) {
|
||||
if (!mIsVisible) return;
|
||||
|
||||
mTerminalView.startAnimation(mOnBellAnimation);
|
||||
|
||||
switch (mSettings.mBellBehaviour) {
|
||||
case TermuxPreferences.BELL_BEEP:
|
||||
mBellSoundPool.play(mBellSoundId, 1.f, 1.f, 1, 0, 1.f);
|
||||
|
||||
@@ -14,6 +14,7 @@ import android.os.Binder;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.PowerManager;
|
||||
import android.support.v4.content.WakefulBroadcastReceiver;
|
||||
import android.util.Log;
|
||||
import android.widget.ArrayAdapter;
|
||||
|
||||
@@ -152,6 +153,11 @@ public final class TermuxService extends Service implements SessionChangedCallba
|
||||
Log.e(EmulatorDebug.LOG_TAG, "Unknown TermuxService action: '" + action + "'");
|
||||
}
|
||||
|
||||
if ((flags & START_FLAG_REDELIVERY) == 0) {
|
||||
// Service is started by WBR, not restarted by system, so release the WakeLock from WBR.
|
||||
WakefulBroadcastReceiver.completeWakefulIntent(intent);
|
||||
}
|
||||
|
||||
// If this service really do get killed, there is no point restarting it automatically - let the user do on next
|
||||
// start of {@link Term):
|
||||
return Service.START_NOT_STICKY;
|
||||
|
||||
@@ -123,12 +123,12 @@ public final class TerminalSession extends TerminalOutput {
|
||||
String exitDescription = "\r\n[Process completed";
|
||||
if (exitCode > 0) {
|
||||
// Non-zero process exit.
|
||||
exitDescription += " with code " + exitCode;
|
||||
exitDescription += " (code " + exitCode + ")";
|
||||
} else if (exitCode < 0) {
|
||||
// Negated signal.
|
||||
exitDescription += " with signal " + (-exitCode);
|
||||
exitDescription += " (signal " + (-exitCode) + ")";
|
||||
}
|
||||
exitDescription += " - press Enter to close]";
|
||||
exitDescription += " - press Enter]";
|
||||
|
||||
byte[] bytesToWrite = exitDescription.getBytes(StandardCharsets.UTF_8);
|
||||
mEmulator.append(bytesToWrite, bytesToWrite.length);
|
||||
|
||||
@@ -238,9 +238,9 @@ public final class TerminalView extends View {
|
||||
// https://github.com/termux/termux-app/issues/137 (japanese chars and TYPE_NULL).
|
||||
outAttrs.inputType = InputType.TYPE_NULL;
|
||||
|
||||
outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_FULLSCREEN |
|
||||
EditorInfo.IME_FLAG_NO_ENTER_ACTION |
|
||||
EditorInfo.IME_ACTION_NONE;
|
||||
// Note that IME_ACTION_NONE cannot be used as that makes it impossible to input newlines using the on-screen
|
||||
// keyboard on Android TV (see https://github.com/termux/termux-app/issues/221).
|
||||
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN;
|
||||
|
||||
return new BaseInputConnection(this, true) {
|
||||
|
||||
@@ -298,6 +298,14 @@ public final class TerminalView extends View {
|
||||
|
||||
boolean ctrlHeld = false;
|
||||
if (codePoint <= 31 && codePoint != 27) {
|
||||
if (codePoint == '\n') {
|
||||
// The AOSP keyboard and descendants seems to send \n as text when the enter key is pressed,
|
||||
// instead of a key event like most other keyboard apps. A terminal expects \r for the enter
|
||||
// key (although when icrnl is enabled this doesn't make a difference - run 'stty -icrnl' to
|
||||
// check the behaviour).
|
||||
codePoint = '\r';
|
||||
}
|
||||
|
||||
// E.g. penti keyboard for ctrl input.
|
||||
ctrlHeld = true;
|
||||
switch (codePoint) {
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<set xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<translate android:duration="30"
|
||||
android:fromXDelta="-1%"
|
||||
android:repeatCount="1"
|
||||
android:repeatMode="reverse"
|
||||
android:toXDelta="1%"/>
|
||||
</set>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.3 KiB |
@@ -5,6 +5,7 @@
|
||||
<!-- NOTE: Cannot use "Light." since it hides the terminal scrollbar on the default black background. -->
|
||||
<style name="Theme.Termux" parent="@android:style/Theme.Material.Light.NoActionBar">
|
||||
<item name="android:statusBarColor">#000000</item>
|
||||
<item name="android:colorPrimary">#FF000000</item>
|
||||
<item name="android:windowBackground">@android:color/black</item>
|
||||
|
||||
<!-- Seen in buttons on left drawer: -->
|
||||
@@ -13,6 +14,10 @@
|
||||
<!-- Avoid action mode toolbar pushing down terminal content when
|
||||
selecting text on pre-6.0 (non-floating toolbar). -->
|
||||
<item name="android:windowActionModeOverlay">true</item>
|
||||
|
||||
<!-- https://developer.android.com/training/tv/start/start.html#transition-color -->
|
||||
<item name="android:windowAllowReturnTransitionOverlap">true</item>
|
||||
<item name="android:windowAllowEnterTransitionOverlap">true</item>
|
||||
</style>
|
||||
|
||||
<style name="TermuxAlertDialogStyle" parent="@android:style/Theme.Material.Light.Dialog.Alert">
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<shortcuts xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<shortcut
|
||||
android:shortcutId="new_session"
|
||||
android:enabled="true"
|
||||
android:icon="@drawable/ic_new_session"
|
||||
android:shortcutShortLabel="@string/new_session">
|
||||
android:shortcutShortLabel="@string/new_session"
|
||||
tools:targetApi="n_mr1">
|
||||
<intent
|
||||
android:action="android.intent.action.RUN"
|
||||
android:targetPackage="com.termux"
|
||||
|
||||
@@ -19,6 +19,7 @@ public class WcWidthTest extends TestCase {
|
||||
assertWidthIs(1, 'å');
|
||||
assertWidthIs(1, 'ä');
|
||||
assertWidthIs(1, 'ö');
|
||||
assertWidthIs(1, 0x23F2);
|
||||
}
|
||||
|
||||
public void testSomeWide() {
|
||||
@@ -45,6 +46,7 @@ public class WcWidthTest extends TestCase {
|
||||
public void testCombining() {
|
||||
assertWidthIs(0, 0x0302);
|
||||
assertWidthIs(0, 0x0308);
|
||||
assertWidthIs(0, 0xFE0F);
|
||||
}
|
||||
|
||||
public void testWordJoiner() {
|
||||
|
||||
@@ -7,7 +7,7 @@ for DENSITY in mdpi hdpi xhdpi xxhdpi xxxhdpi; do
|
||||
PNG=$FOLDER/$FILE.png
|
||||
|
||||
# Update other apps:
|
||||
for APP in tasker widget api; do
|
||||
for APP in api boot styling tasker widget; do
|
||||
APPDIR=../../termux-$APP
|
||||
if [ -d $APPDIR ]; then
|
||||
APP_FOLDER=$APPDIR/app/src/main/res/mipmap-$DENSITY
|
||||
|
||||
31
art/feature-graphic.svg
Normal file
31
art/feature-graphic.svg
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!--
|
||||
This is a feature graphic:
|
||||
https://support.google.com/googleplay/android-developer/answer/1078870
|
||||
- 1024px by 500px, no alpha
|
||||
- Don't include any copy or important visual information near the borders of the asset,
|
||||
specifically near the bottom third of the frame.
|
||||
- Try to center align any logo/copy information in the vertical and horizontal center of the frame.
|
||||
- If adding text, use large font sizes.
|
||||
- Your graphic may be displayed alone without the app icon.
|
||||
-->
|
||||
<svg xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
viewBox="0 0 1024 500">
|
||||
|
||||
<rect fill="#0" width="100%" height="100%" />
|
||||
|
||||
<text id="shell_prompt"
|
||||
x="130"
|
||||
y="330"
|
||||
style="fill: #ffffff; font-size: 124px; font-family: Menlo;">
|
||||
<!--
|
||||
<tspan>$</tspan>
|
||||
<tspan x="290">Termux</tspan>
|
||||
<tspan x="734">█</tspan>
|
||||
-->
|
||||
<tspan>$ Termux █</tspan>
|
||||
</text>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1006 B |
5
art/generate-feature-graphic.sh
Executable file
5
art/generate-feature-graphic.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Generating feature graphics to ~/termux-icons/termux-feature-graphic.png..."
|
||||
mkdir -p ~/termux-icons/
|
||||
rsvg-convert feature-graphic.svg > ~/termux-icons/feature-graphic.png
|
||||
9
art/generate-tv-banner.sh
Executable file
9
art/generate-tv-banner.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "Generating feature graphics to ~/termux-icons/termux-feature-graphic.png..."
|
||||
mkdir -p ~/termux-icons/
|
||||
|
||||
# The Android TV banner on google play (1280x720) has same aspect ratio
|
||||
# as the banner in the app (320x180).
|
||||
rsvg-convert -w 1280 -h 720 tv-banner.svg > ~/termux-icons/tv-banner.png
|
||||
rsvg-convert -w 320 -h 180 tv-banner.svg > ../app/src/main/res/drawable/banner.png
|
||||
24
art/tv-banner.svg
Normal file
24
art/tv-banner.svg
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<!--
|
||||
This is a tv banner graphic:
|
||||
https://developer.android.com/design/tv/patterns.html#banner
|
||||
- Size: 320 x 180 px, xhdpi resource in app
|
||||
- Size: 1280 x 720 in google play.
|
||||
- Text must be included in the image. If your app is available in more
|
||||
than one language, you must provide versions of the banner image for each supported language.
|
||||
-->
|
||||
<svg xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
version="1.1"
|
||||
viewBox="0 0 1280 720">
|
||||
|
||||
<rect fill="#0" width="100%" height="100%" />
|
||||
|
||||
<text id="shell_prompt"
|
||||
x="200"
|
||||
y="410"
|
||||
style="fill: #ffffff; font-size: 210px; font-family: Menlo, Monospace;">
|
||||
<tspan>Termux ▌</tspan>
|
||||
</text>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 780 B |
Reference in New Issue
Block a user