diff options
Diffstat (limited to 'app/src/main/java')
| -rw-r--r-- | app/src/main/java/invalid/lena/scrcpy/Main.java | 7 | ||||
| -rw-r--r-- | app/src/main/java/invalid/lena/scrcpy/SettingsActivity.java | 3 | ||||
| -rw-r--r-- | app/src/main/java/invalid/lena/scrcpy/Ui.java | 34 |
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(); + } +} |