Compare commits

..

15 Commits
v0.55 ... v0.57

Author SHA1 Message Date
Fredrik Fornwall
cee0466dd7 Bump version to 0.57 2017-12-07 01:48:51 +01:00
Fredrik Fornwall
de4f334e24 Remove the fullscreen setting
Trying to use fullscreen doesn't work well in a multi-windowed world
and makes using translucent navigation and status bars more complicated.
2017-12-07 01:46:16 +01:00
Fredrik Fornwall
ab205ae05b Update build tools in travis 2017-12-07 01:45:30 +01:00
Fredrik Fornwall
b29b24f507 Add android.max_aspect=10.0 metadata
This is needed to mark the app with

	"This app is optimized to run in full screen"

when run on a Samsung Galaxy S8.
2017-12-07 01:39:43 +01:00
Fredrik Fornwall
b3472e9e62 Disable the "quick scale" gesture
Disable the default android behaviour where a double tap followed by a
swipe is interpreted as a zoom gesture. Most people seem not to know
about it and hit it by mistake, see #495 for an example.
2017-12-07 01:36:29 +01:00
Fredrik Fornwall
ab59e08959 Update build tools 2017-12-07 01:12:39 +01:00
Fredrik Fornwall
8b566485e8 Do not clear the sessions on ACTION_STOP_SERVICE
There is no point doing so and it may cause problems with the list
adapter.
2017-11-26 00:56:13 +01:00
Fredrik Fornwall
231c02a0c7 Check for null mTermSession in inputCodePoint() 2017-11-26 00:50:13 +01:00
Fredrik Fornwall
65f30e77ba Add tools:ignore="AppLinkUrlError" 2017-11-25 22:59:03 +01:00
Fredrik Fornwall
686677ae45 Update android support dependencies 2017-11-25 22:58:46 +01:00
Fredrik Fornwall
85037a75a6 Remove redundant cast 2017-11-25 22:58:23 +01:00
Fredrik Fornwall
6025afc2c0 Update the Android Plugin for Gradle to 3.0.1 2017-11-24 23:11:55 +01:00
Fredrik Fornwall
a4e4f76775 Remove some Android Studio warnings 2017-11-22 01:27:14 +01:00
Fredrik Fornwall
02af113dda Bump app version to 0.56 2017-11-19 20:54:16 +01:00
Fredrik Fornwall
fc4ef838bf Configure proguard to keep line numbers 2017-11-19 20:53:56 +01:00
18 changed files with 44 additions and 136 deletions

View File

@@ -12,7 +12,7 @@ android:
components: components:
- platform-tools - platform-tools
- tools - tools
- build-tools-27.0.1 - build-tools-27.0.2
- android-27 - android-27
- extra-android-m2repository - extra-android-m2repository

View File

@@ -2,11 +2,11 @@ apply plugin: 'com.android.application'
android { android {
compileSdkVersion 27 compileSdkVersion 27
buildToolsVersion "27.0.1" buildToolsVersion "27.0.2"
dependencies { dependencies {
implementation 'com.android.support:support-annotations:27.0.0' implementation 'com.android.support:support-annotations:27.0.1'
implementation "com.android.support:support-core-ui:27.0.0" implementation "com.android.support:support-core-ui:27.0.1"
implementation project(":terminal-view") implementation project(":terminal-view")
} }
@@ -14,8 +14,8 @@ android {
applicationId "com.termux" applicationId "com.termux"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 27 targetSdkVersion 27
versionCode 55 versionCode 57
versionName "0.55" versionName "0.57"
} }
buildTypes { buildTypes {

View File

@@ -7,11 +7,5 @@
# For more details, see # For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html # http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here: -renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

View File

@@ -1,4 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.termux" package="com.termux"
android:installLocation="internalOnly" android:installLocation="internalOnly"
android:sharedUserId="com.termux" android:sharedUserId="com.termux"
@@ -23,6 +24,10 @@
android:theme="@style/Theme.Termux" android:theme="@style/Theme.Termux"
android:supportsRtl="false" > android:supportsRtl="false" >
<!-- This (or rather, value 2.1 or higher) is needed to make the Samsung Galaxy S8
mark the app with "This app is optimized to run in full screen." -->
<meta-data android:name="android.max_aspect" android:value="10.0" />
<activity <activity
android:name="com.termux.app.TermuxActivity" android:name="com.termux.app.TermuxActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
@@ -65,7 +70,7 @@
<data android:mimeType="video/*" /> <data android:mimeType="video/*" />
</intent-filter> </intent-filter>
<!-- Be more restrictive for viewing files, restricting ourselves to text files. --> <!-- Be more restrictive for viewing files, restricting ourselves to text files. -->
<intent-filter> <intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW"/> <action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/*" /> <data android:mimeType="text/*" />

View File

@@ -61,7 +61,7 @@ public final class ExtraKeysView extends GridLayout {
view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode)); view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode)); view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
} else { } else {
TerminalView terminalView = (TerminalView) view.findViewById(R.id.terminal_view); TerminalView terminalView = view.findViewById(R.id.terminal_view);
TerminalSession session = terminalView.getCurrentSession(); TerminalSession session = terminalView.getCurrentSession();
if (session != null) session.write(chars); if (session != null) session.write(chars);
} }

View File

@@ -1,67 +0,0 @@
package com.termux.app;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.view.View;
import com.termux.R;
/**
* Utility to manage full screen immersive mode.
* <p/>
* See https://code.google.com/p/android/issues/detail?id=5497
*/
final class FullScreenHelper {
private boolean mEnabled = false;
final TermuxActivity mActivity;
public FullScreenHelper(TermuxActivity activity) {
this.mActivity = activity;
}
public void setImmersive(boolean enabled) {
if (enabled == mEnabled) return;
mEnabled = enabled;
View decorView = mActivity.getWindow().getDecorView();
if (enabled) {
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
if (mActivity.mSettings.isShowExtraKeys()) {
mActivity.findViewById(R.id.viewpager).setVisibility(View.VISIBLE);
}
setImmersiveMode();
} else {
mActivity.findViewById(R.id.viewpager).setVisibility(View.GONE);
}
}
});
setImmersiveMode();
} else {
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
decorView.setOnSystemUiVisibilityChangeListener(null);
}
}
private static boolean isColorLight(int color) {
double darkness = 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255;
return darkness < 0.5;
}
void setImmersiveMode() {
int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN;
int color = ((ColorDrawable) mActivity.getWindow().getDecorView().getBackground()).getColor();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isColorLight(color))
flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
mActivity.getWindow().getDecorView().setSystemUiVisibility(flags);
}
}

View File

@@ -73,6 +73,7 @@ import java.io.InputStream;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -95,7 +96,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
private static final int CONTEXTMENU_KILL_PROCESS_ID = 4; private static final int CONTEXTMENU_KILL_PROCESS_ID = 4;
private static final int CONTEXTMENU_RESET_TERMINAL_ID = 5; private static final int CONTEXTMENU_RESET_TERMINAL_ID = 5;
private static final int CONTEXTMENU_STYLING_ID = 6; private static final int CONTEXTMENU_STYLING_ID = 6;
private static final int CONTEXTMENU_TOGGLE_FULLSCREEN_ID = 7;
private static final int CONTEXTMENU_HELP_ID = 8; private static final int CONTEXTMENU_HELP_ID = 8;
private static final int MAX_SESSIONS = 8; private static final int MAX_SESSIONS = 8;
@@ -111,8 +111,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
ExtraKeysView mExtraKeysView; ExtraKeysView mExtraKeysView;
final FullScreenHelper mFullScreenHelper = new FullScreenHelper(this);
TermuxPreferences mSettings; TermuxPreferences mSettings;
/** /**
@@ -211,14 +209,13 @@ public final class TermuxActivity extends Activity implements ServiceConnection
mSettings = new TermuxPreferences(this); mSettings = new TermuxPreferences(this);
setContentView(R.layout.drawer_layout); setContentView(R.layout.drawer_layout);
mTerminalView = (TerminalView) findViewById(R.id.terminal_view); mTerminalView = findViewById(R.id.terminal_view);
mTerminalView.setOnKeyListener(new TermuxViewClient(this)); mTerminalView.setOnKeyListener(new TermuxViewClient(this));
mTerminalView.setTextSize(mSettings.getFontSize()); mTerminalView.setTextSize(mSettings.getFontSize());
mFullScreenHelper.setImmersive(mSettings.isFullScreen());
mTerminalView.requestFocus(); mTerminalView.requestFocus();
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); final ViewPager viewPager = findViewById(R.id.viewpager);
if (mSettings.isShowExtraKeys()) viewPager.setVisibility(View.VISIBLE); if (mSettings.isShowExtraKeys()) viewPager.setVisibility(View.VISIBLE);
viewPager.setAdapter(new PagerAdapter() { viewPager.setAdapter(new PagerAdapter() {
@@ -228,19 +225,20 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
@Override @Override
public boolean isViewFromObject(View view, Object object) { public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object; return view == object;
} }
@NonNull
@Override @Override
public Object instantiateItem(ViewGroup collection, int position) { public Object instantiateItem(@NonNull ViewGroup collection, int position) {
LayoutInflater inflater = LayoutInflater.from(TermuxActivity.this); LayoutInflater inflater = LayoutInflater.from(TermuxActivity.this);
View layout; View layout;
if (position == 0) { if (position == 0) {
layout = mExtraKeysView = (ExtraKeysView) inflater.inflate(R.layout.extra_keys_main, collection, false); layout = mExtraKeysView = (ExtraKeysView) inflater.inflate(R.layout.extra_keys_main, collection, false);
} else { } else {
layout = inflater.inflate(R.layout.extra_keys_right, collection, false); layout = inflater.inflate(R.layout.extra_keys_right, collection, false);
final EditText editText = (EditText) layout.findViewById(R.id.text_input); final EditText editText = layout.findViewById(R.id.text_input);
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override @Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
@@ -264,7 +262,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
@Override @Override
public void destroyItem(ViewGroup collection, int position, Object view) { public void destroyItem(@NonNull ViewGroup collection, int position, @NonNull Object view) {
collection.removeView((View) view); collection.removeView((View) view);
} }
}); });
@@ -275,7 +273,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
if (position == 0) { if (position == 0) {
mTerminalView.requestFocus(); mTerminalView.requestFocus();
} else { } else {
final EditText editText = (EditText) viewPager.findViewById(R.id.text_input); final EditText editText = viewPager.findViewById(R.id.text_input);
if (editText != null) editText.requestFocus(); if (editText != null) editText.requestFocus();
} }
} }
@@ -339,7 +337,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
void toggleShowExtraKeys() { void toggleShowExtraKeys() {
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); final ViewPager viewPager = findViewById(R.id.viewpager);
final boolean showNow = mSettings.toggleShowExtraKeys(TermuxActivity.this); final boolean showNow = mSettings.toggleShowExtraKeys(TermuxActivity.this);
viewPager.setVisibility(showNow ? View.VISIBLE : View.GONE); viewPager.setVisibility(showNow ? View.VISIBLE : View.GONE);
if (showNow && viewPager.getCurrentItem() == 1) { if (showNow && viewPager.getCurrentItem() == 1) {
@@ -424,7 +422,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
}; };
ListView listView = (ListView) findViewById(R.id.left_drawer_list); ListView listView = findViewById(R.id.left_drawer_list);
mListViewAdapter = new ArrayAdapter<TerminalSession>(getApplicationContext(), R.layout.line_in_drawer, mTermService.getSessions()) { mListViewAdapter = new ArrayAdapter<TerminalSession>(getApplicationContext(), R.layout.line_in_drawer, mTermService.getSessions()) {
final StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); final StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
final StyleSpan italicSpan = new StyleSpan(Typeface.ITALIC); final StyleSpan italicSpan = new StyleSpan(Typeface.ITALIC);
@@ -441,7 +439,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
TerminalSession sessionAtRow = getItem(position); TerminalSession sessionAtRow = getItem(position);
boolean sessionRunning = sessionAtRow.isRunning(); boolean sessionRunning = sessionAtRow.isRunning();
TextView firstLineView = (TextView) row.findViewById(R.id.row_line); TextView firstLineView = row.findViewById(R.id.row_line);
String name = sessionAtRow.mSessionName; String name = sessionAtRow.mSessionName;
String sessionTitle = sessionAtRow.getTitle(); String sessionTitle = sessionAtRow.getTitle();
@@ -537,10 +535,8 @@ public final class TermuxActivity extends Activity implements ServiceConnection
@Override @Override
public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) {
if (mTermService != null) { // Respect being stopped from the TermuxService notification action.
// Respect being stopped from the TermuxService notification action. finish();
finish();
}
} }
@Nullable @Nullable
@@ -644,7 +640,7 @@ public final class TermuxActivity extends Activity implements ServiceConnection
final int indexOfSession = mTermService.getSessions().indexOf(session); final int indexOfSession = mTermService.getSessions().indexOf(session);
showToast(toToastTitle(session), false); showToast(toToastTitle(session), false);
mListViewAdapter.notifyDataSetChanged(); mListViewAdapter.notifyDataSetChanged();
final ListView lv = ((ListView) findViewById(R.id.left_drawer_list)); final ListView lv = findViewById(R.id.left_drawer_list);
lv.setItemChecked(indexOfSession, true); lv.setItemChecked(indexOfSession, true);
lv.smoothScrollToPosition(indexOfSession); lv.smoothScrollToPosition(indexOfSession);
} }
@@ -658,7 +654,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
menu.add(Menu.NONE, CONTEXTMENU_SHARE_TRANSCRIPT_ID, Menu.NONE, R.string.select_all_and_share); menu.add(Menu.NONE, CONTEXTMENU_SHARE_TRANSCRIPT_ID, Menu.NONE, R.string.select_all_and_share);
menu.add(Menu.NONE, CONTEXTMENU_RESET_TERMINAL_ID, Menu.NONE, R.string.reset_terminal); menu.add(Menu.NONE, CONTEXTMENU_RESET_TERMINAL_ID, Menu.NONE, R.string.reset_terminal);
menu.add(Menu.NONE, CONTEXTMENU_KILL_PROCESS_ID, Menu.NONE, getResources().getString(R.string.kill_process, getCurrentTermSession().getPid())).setEnabled(currentSession.isRunning()); menu.add(Menu.NONE, CONTEXTMENU_KILL_PROCESS_ID, Menu.NONE, getResources().getString(R.string.kill_process, getCurrentTermSession().getPid())).setEnabled(currentSession.isRunning());
menu.add(Menu.NONE, CONTEXTMENU_TOGGLE_FULLSCREEN_ID, Menu.NONE, R.string.toggle_fullscreen).setCheckable(true).setChecked(mSettings.isFullScreen());
menu.add(Menu.NONE, CONTEXTMENU_STYLING_ID, Menu.NONE, R.string.style_terminal); menu.add(Menu.NONE, CONTEXTMENU_STYLING_ID, Menu.NONE, R.string.style_terminal);
menu.add(Menu.NONE, CONTEXTMENU_HELP_ID, Menu.NONE, R.string.help); menu.add(Menu.NONE, CONTEXTMENU_HELP_ID, Menu.NONE, R.string.help);
} }
@@ -792,11 +787,8 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
}).setNegativeButton(android.R.string.cancel, null).show(); }).setNegativeButton(android.R.string.cancel, null).show();
} }
}
return true;
case CONTEXTMENU_TOGGLE_FULLSCREEN_ID:
toggleImmersive();
return true; return true;
}
case CONTEXTMENU_HELP_ID: case CONTEXTMENU_HELP_ID:
startActivity(new Intent(this, TermuxHelpActivity.class)); startActivity(new Intent(this, TermuxHelpActivity.class));
return true; return true;
@@ -812,12 +804,6 @@ public final class TermuxActivity extends Activity implements ServiceConnection
} }
} }
void toggleImmersive() {
boolean newValue = !mSettings.isFullScreen();
mSettings.setFullScreen(this, newValue);
mFullScreenHelper.setImmersive(newValue);
}
void changeFontSize(boolean increase) { void changeFontSize(boolean increase) {
mSettings.changeFontSize(this, increase); mSettings.changeFontSize(this, increase);
mTerminalView.setTextSize(mSettings.getFontSize()); mTerminalView.setTextSize(mSettings.getFontSize());
@@ -836,9 +822,8 @@ public final class TermuxActivity extends Activity implements ServiceConnection
public TerminalSession getStoredCurrentSessionOrLast() { public TerminalSession getStoredCurrentSessionOrLast() {
TerminalSession stored = TermuxPreferences.getCurrentSession(this); TerminalSession stored = TermuxPreferences.getCurrentSession(this);
if (stored != null) return stored; if (stored != null) return stored;
int numberOfSessions = mTermService.getSessions().size(); List<TerminalSession> sessions = mTermService.getSessions();
if (numberOfSessions == 0) return null; return sessions.isEmpty() ? null : sessions.get(sessions.size() - 1);
return mTermService.getSessions().get(numberOfSessions - 1);
} }
/** Show a toast and dismiss the last one if still visible. */ /** Show a toast and dismiss the last one if still visible. */

View File

@@ -32,12 +32,10 @@ final class TermuxPreferences {
private final int MIN_FONTSIZE; private final int MIN_FONTSIZE;
private static final int MAX_FONTSIZE = 256; private static final int MAX_FONTSIZE = 256;
private static final String FULLSCREEN_KEY = "fullscreen";
private static final String SHOW_EXTRA_KEYS_KEY = "show_extra_keys"; private static final String SHOW_EXTRA_KEYS_KEY = "show_extra_keys";
private static final String FONTSIZE_KEY = "fontsize"; private static final String FONTSIZE_KEY = "fontsize";
private static final String CURRENT_SESSION_KEY = "current_session"; private static final String CURRENT_SESSION_KEY = "current_session";
private boolean mFullScreen;
private int mFontSize; private int mFontSize;
@AsciiBellBehaviour @AsciiBellBehaviour
@@ -56,7 +54,6 @@ final class TermuxPreferences {
// to prevent invisible text due to zoom be mistake: // to prevent invisible text due to zoom be mistake:
MIN_FONTSIZE = (int) (4f * dipInPixels); MIN_FONTSIZE = (int) (4f * dipInPixels);
mFullScreen = prefs.getBoolean(FULLSCREEN_KEY, false);
mShowExtraKeys = prefs.getBoolean(SHOW_EXTRA_KEYS_KEY, false); mShowExtraKeys = prefs.getBoolean(SHOW_EXTRA_KEYS_KEY, false);
// http://www.google.com/design/spec/style/typography.html#typography-line-height // http://www.google.com/design/spec/style/typography.html#typography-line-height
@@ -72,15 +69,6 @@ final class TermuxPreferences {
mFontSize = Math.max(MIN_FONTSIZE, Math.min(mFontSize, MAX_FONTSIZE)); mFontSize = Math.max(MIN_FONTSIZE, Math.min(mFontSize, MAX_FONTSIZE));
} }
boolean isFullScreen() {
return mFullScreen;
}
void setFullScreen(Context context, boolean newValue) {
mFullScreen = newValue;
PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(FULLSCREEN_KEY, newValue).apply();
}
boolean isShowExtraKeys() { boolean isShowExtraKeys() {
return mShowExtraKeys; return mShowExtraKeys;
} }

View File

@@ -244,7 +244,6 @@ public final class TermuxService extends Service implements SessionChangedCallba
for (int i = 0; i < mTerminalSessions.size(); i++) for (int i = 0; i < mTerminalSessions.size(); i++)
mTerminalSessions.get(i).finishIfRunning(); mTerminalSessions.get(i).finishIfRunning();
mTerminalSessions.clear();
} }
public List<TerminalSession> getSessions() { public List<TerminalSession> getSessions() {

View File

@@ -73,8 +73,6 @@ public final class TermuxViewClient implements TerminalViewClient {
mActivity.getDrawer().openDrawer(Gravity.LEFT); mActivity.getDrawer().openDrawer(Gravity.LEFT);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
mActivity.getDrawer().closeDrawers(); mActivity.getDrawer().closeDrawers();
} else if (unicodeChar == 'f'/* full screen */) {
mActivity.toggleImmersive();
} else if (unicodeChar == 'k'/* keyboard */) { } else if (unicodeChar == 'k'/* keyboard */) {
InputMethodManager imm = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE); InputMethodManager imm = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

View File

@@ -1,7 +1,8 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical"
android:fitsSystemWindows="true">
<android.support.v4.widget.DrawerLayout <android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout" android:id="@+id/drawer_layout"

View File

@@ -7,7 +7,6 @@
<string name="toggle_soft_keyboard">Keyboard</string> <string name="toggle_soft_keyboard">Keyboard</string>
<string name="reset_terminal">Reset</string> <string name="reset_terminal">Reset</string>
<string name="style_terminal">Style</string> <string name="style_terminal">Style</string>
<string name="toggle_fullscreen">Fullscreen</string>
<string name="share_transcript_title">Terminal transcript</string> <string name="share_transcript_title">Terminal transcript</string>
<string name="help">Help</string> <string name="help">Help</string>

View File

@@ -15,6 +15,9 @@
selecting text on pre-6.0 (non-floating toolbar). --> selecting text on pre-6.0 (non-floating toolbar). -->
<item name="android:windowActionModeOverlay">true</item> <item name="android:windowActionModeOverlay">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<!-- https://developer.android.com/training/tv/start/start.html#transition-color --> <!-- https://developer.android.com/training/tv/start/start.html#transition-color -->
<item name="android:windowAllowReturnTransitionOverlap">true</item> <item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item> <item name="android:windowAllowEnterTransitionOverlap">true</item>

View File

@@ -4,7 +4,7 @@ buildscript {
google() google()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.0.0' classpath 'com.android.tools.build:gradle:3.0.1'
} }
} }

View File

@@ -18,7 +18,7 @@ ext {
android { android {
compileSdkVersion 27 compileSdkVersion 27
buildToolsVersion "27.0.1" buildToolsVersion "27.0.2"
defaultConfig { defaultConfig {
minSdkVersion 21 minSdkVersion 21

View File

@@ -18,7 +18,7 @@ ext {
android { android {
compileSdkVersion 27 compileSdkVersion 27
buildToolsVersion "27.0.1" buildToolsVersion "27.0.2"
dependencies { dependencies {
implementation 'com.android.support:support-annotations:27.0.0' implementation 'com.android.support:support-annotations:27.0.0'

View File

@@ -85,6 +85,7 @@ final class GestureAndScaleRecognizer {
return mListener.onScale(detector.getFocusX(), detector.getFocusY(), detector.getScaleFactor()); return mListener.onScale(detector.getFocusX(), detector.getFocusY(), detector.getScaleFactor());
} }
}); });
mScaleDetector.setQuickScaleEnabled(false);
} }
public void onTouchEvent(MotionEvent event) { public void onTouchEvent(MotionEvent event) {

View File

@@ -642,6 +642,8 @@ public final class TerminalView extends View {
+ leftAltDownFromEvent + ")"); + leftAltDownFromEvent + ")");
} }
if (mTermSession == null) return;
final boolean controlDown = controlDownFromEvent || mClient.readControlKey(); final boolean controlDown = controlDownFromEvent || mClient.readControlKey();
final boolean altDown = leftAltDownFromEvent || mClient.readAltKey(); final boolean altDown = leftAltDownFromEvent || mClient.readAltKey();