Compare commits

...
2 Commits
4 changed files with 9 additions and 15 deletions
@@ -15,7 +15,7 @@
android:label="@string/title_activity_main" android:label="@string/title_activity_main"
android:theme="@style/AppTheme.NoActionBarLaunch" android:theme="@style/AppTheme.NoActionBarLaunch"
android:launchMode="singleTask" android:launchMode="singleTask"
android:windowSoftInputMode="adjustNothing" android:windowSoftInputMode="adjustResize"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
@@ -1,9 +1,7 @@
package de.mrterm.app; package de.mrterm.app;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.WindowManager;
import android.webkit.WebView; import android.webkit.WebView;
import androidx.activity.OnBackPressedCallback; import androidx.activity.OnBackPressedCallback;
@@ -28,24 +26,20 @@ public class MainActivity extends BridgeActivity {
} }
}); });
// Edge-to-Edge: Abstände für Statusleiste, Navigationsleiste und Tastatur setzt allein diese Ansicht. // Edge-to-Edge: Ränder für Status- und Navigationsleiste setzt diese Ansicht. Den Platz für die Tastatur
// Die Insets werden danach verbraucht, damit WebView/System nicht ein zweites Mal verkleinern. // schafft Android/WebView selbst – hier nur melden, ob sie offen ist (sonst würde doppelt verkleinert).
View parent = (View) web.getParent(); View parent = (View) web.getParent();
parent.setBackgroundColor(0xFF14161D); parent.setBackgroundColor(0xFF14161D);
final boolean[] imeOpen = { false }; final boolean[] imeOpen = { false };
// Vor Android 11 kommen Tastatur-Insets nicht zuverlässig: dort verkleinert das System das Fenster
final boolean legacyIme = Build.VERSION.SDK_INT < Build.VERSION_CODES.R;
if (legacyIme) getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
ViewCompat.setOnApplyWindowInsetsListener(parent, (v, insets) -> { ViewCompat.setOnApplyWindowInsetsListener(parent, (v, insets) -> {
Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout()); Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout());
int ime = legacyIme ? 0 : insets.getInsets(WindowInsetsCompat.Type.ime()).bottom; boolean open = insets.isVisible(WindowInsetsCompat.Type.ime());
v.setPadding(bars.left, bars.top, bars.right, Math.max(ime, bars.bottom)); v.setPadding(bars.left, bars.top, bars.right, open ? 0 : bars.bottom);
boolean open = ime > 0;
if (open != imeOpen[0]) { if (open != imeOpen[0]) {
imeOpen[0] = open; imeOpen[0] = open;
web.evaluateJavascript("window.mrtermIme && window.mrtermIme(" + open + ")", null); web.evaluateJavascript("window.mrtermIme && window.mrtermIme(" + open + ")", null);
} }
return WindowInsetsCompat.CONSUMED; return insets;
}); });
} }
} }
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "mrterm", "name": "mrterm",
"version": "0.11.3", "version": "0.11.4",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "mrterm", "name": "mrterm",
"version": "0.11.3", "version": "0.11.4",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@xterm/addon-fit": "^0.11.0", "@xterm/addon-fit": "^0.11.0",
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "mrterm", "name": "mrterm",
"productName": "MrTerm", "productName": "MrTerm",
"version": "0.11.3", "version": "0.11.4",
"description": "Moderner SSH-, SFTP- und RDP-Client", "description": "Moderner SSH-, SFTP- und RDP-Client",
"main": "src/main/main.js", "main": "src/main/main.js",
"author": "MrBlake", "author": "MrBlake",