aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/invalid/lena/scrcpy/Main.java7
-rw-r--r--app/src/main/java/invalid/lena/scrcpy/SettingsActivity.java3
-rw-r--r--app/src/main/java/invalid/lena/scrcpy/Ui.java34
3 files changed, 43 insertions, 1 deletions
diff --git a/app/src/main/java/invalid/lena/scrcpy/Main.java b/app/src/main/java/invalid/lena/scrcpy/Main.java
index 2f95375..eb8d400 100644
--- a/app/src/main/java/invalid/lena/scrcpy/Main.java
+++ b/app/src/main/java/invalid/lena/scrcpy/Main.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
+import android.view.WindowInsets;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
@@ -34,6 +35,12 @@ public final class Main extends Activity {
super.onCreate(saved);
setContentView(R.layout.main);
+ // The IME inset is in the mask too: the window is edge-to-edge, so
+ // nothing resizes it when the keyboard opens. Padding the root
+ // shrinks the weighted device list and keeps the form reachable.
+ Ui.padForInsets(findViewById(R.id.root),
+ WindowInsets.Type.systemBars() | WindowInsets.Type.ime());
+
EditText host = findViewById(R.id.host);
EditText pairPort = findViewById(R.id.pair_port);
EditText pairCode = findViewById(R.id.pair_code);
diff --git a/app/src/main/java/invalid/lena/scrcpy/SettingsActivity.java b/app/src/main/java/invalid/lena/scrcpy/SettingsActivity.java
index d95ecba..43b0954 100644
--- a/app/src/main/java/invalid/lena/scrcpy/SettingsActivity.java
+++ b/app/src/main/java/invalid/lena/scrcpy/SettingsActivity.java
@@ -2,6 +2,7 @@ package invalid.lena.scrcpy;
import android.app.Activity;
import android.os.Bundle;
+import android.view.WindowInsets;
import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.RadioGroup;
@@ -15,7 +16,7 @@ public final class SettingsActivity extends Activity {
protected void onCreate(Bundle saved) {
super.onCreate(saved);
setContentView(R.layout.settings);
- setTitle(R.string.settings);
+ Ui.padForInsets(findViewById(R.id.root), WindowInsets.Type.systemBars());
RadioGroup videoGroup = findViewById(R.id.video_codec);
RadioGroup audioGroup = findViewById(R.id.audio_codec);
diff --git a/app/src/main/java/invalid/lena/scrcpy/Ui.java b/app/src/main/java/invalid/lena/scrcpy/Ui.java
new file mode 100644
index 0000000..91b8b66
--- /dev/null
+++ b/app/src/main/java/invalid/lena/scrcpy/Ui.java
@@ -0,0 +1,34 @@
+package invalid.lena.scrcpy;
+
+import android.graphics.Insets;
+import android.view.View;
+
+// Window inset plumbing for the non-fullscreen activities.
+//
+// targetSdk 35 makes every window edge-to-edge on Android 15: the system
+// no longer insets the content view, so an unhandled layout draws under
+// the status and navigation bars. Mirror wants that and opts in itself;
+// Main and Settings do not, so they pad their root by the bar sizes.
+public final class Ui {
+
+ private Ui() {}
+
+ // Add the insets of the given WindowInsets.Type mask to whatever
+ // padding the layout already declares. Applied on top of the XML
+ // padding, not instead of it, so the layout stays the source of the
+ // base spacing.
+ public static void padForInsets(View root, int types) {
+ int left = root.getPaddingLeft();
+ int top = root.getPaddingTop();
+ int right = root.getPaddingRight();
+ int bottom = root.getPaddingBottom();
+
+ root.setOnApplyWindowInsetsListener((v, insets) -> {
+ Insets in = insets.getInsets(types);
+ v.setPadding(left + in.left, top + in.top,
+ right + in.right, bottom + in.bottom);
+ return insets;
+ });
+ root.requestApplyInsets();
+ }
+}