From 503fa32f2453d76ed34d4d15f3321c981fc8f952 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 8 Jul 2025 03:35:34 -0700 Subject: inset --- .../app/src/main/java/io/coinos/MainActivity.java | 23 ++++++++----- android/app/src/main/res/layout/activity_main.xml | 13 ++++---- android/app/src/main/res/values/styles.xml | 13 +++++--- bun.lockb | Bin 289631 -> 290051 bytes package.json | 5 ++- src/routes/+layout.svelte | 37 +++++++++------------ 6 files changed, 50 insertions(+), 41 deletions(-) diff --git a/android/app/src/main/java/io/coinos/MainActivity.java b/android/app/src/main/java/io/coinos/MainActivity.java index 791c89a9..501d2e0f 100644 --- a/android/app/src/main/java/io/coinos/MainActivity.java +++ b/android/app/src/main/java/io/coinos/MainActivity.java @@ -8,6 +8,7 @@ import androidx.core.view.ViewCompat; import com.getcapacitor.BridgeActivity; import com.getcapacitor.Bridge; + import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -25,25 +26,31 @@ import java.util.Arrays; public class MainActivity extends BridgeActivity { @Override protected void onCreate(Bundle savedInstanceState) { + // ✅ Let Capacitor inflate its layout and wire everything super.onCreate(savedInstanceState); - // Ensure the WebView doesn't overlap the system status bar + WebView webView = bridge.getWebView(); // This works *after* super.onCreate() + + // ✅ Ensure layout respects system bars if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE); } - WebView webView = bridge.getWebView(); + // ✅ Apply top inset padding if needed + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + webView.setOnApplyWindowInsetsListener((v, insets) -> { + v.setPadding(0, insets.getSystemWindowInsetTop(), 0, 0); + return insets.consumeSystemWindowInsets(); + }); + } + + // Other app setup CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); - // Ensure layout respects system window insets - ViewCompat.setOnApplyWindowInsetsListener(webView, (v, insets) -> { - v.setPadding(0, insets.getSystemWindowInsetTop(), 0, 0); - return insets; - }); - handleIntent(getIntent()); } diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml index b5ad1387..3710e23b 100644 --- a/android/app/src/main/res/layout/activity_main.xml +++ b/android/app/src/main/res/layout/activity_main.xml @@ -1,12 +1,13 @@ - + android:fitsSystemWindows="true"> - + android:layout_height="match_parent" + android:fitsSystemWindows="true" /> + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index be874e54..07128ac1 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,9 +1,7 @@ - - + - \ No newline at end of file + + diff --git a/bun.lockb b/bun.lockb index bcf4f106..2a601932 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 685cb7bb..a2241d3c 100644 --- a/package.json +++ b/package.json @@ -68,5 +68,8 @@ "lint": "prettier --check .", "format": "prettier --write ." }, - "type": "module" + "type": "module", + "dependencies": { + "cordova-plugin-android-notch": "^1.0.3" + } } diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 76db8abe..4317a6a2 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -16,16 +16,6 @@ ? `http://${PUBLIC_DOMAIN}` : `https://${PUBLIC_DOMAIN}`; - function getSafeInsetTop() { - const div = document.createElement("div"); - div.style.cssText = "position:absolute;top:0;padding-top:env(safe-area-inset-top);"; - document.body.appendChild(div); - const computed = getComputedStyle(div).paddingTop; - document.body.removeChild(div); - const px = parseInt(computed, 10); - return isNaN(px) ? 24 : px; - } - onMount(() => { if (!browser) return; @@ -35,11 +25,18 @@ $installPrompt = event; }); - // Fix: Apply top padding manually for Android WebView - const insetTop = getSafeInsetTop(); - const main = document.querySelector("main"); - if (main && insetTop > 0) { - main.style.paddingTop = `${insetTop}px`; + if (typeof window.AndroidNotch !== "undefined") { + window.AndroidNotch.getInsetTop( + (px) => { + document.documentElement.style.setProperty( + "--safe-area-inset-top", + px + "px", + ); + }, + (err) => { + console.error("Failed to get notch inset:", err); + }, + ); } }); @@ -75,15 +72,11 @@ --toastContainerBottom: 8rem; --toastContainerLeft: calc(50vw - 8rem); --toastBackground: #292929; - } - main { - padding-top: env(safe-area-inset-top, 24px); + --safe-area-inset-top: 24px; } - @supports not (padding-top: env(safe-area-inset-top)) { - main { - padding-top: 24px; - } + main { + padding-top: var(--safe-area-inset-top); } -- cgit v1.2.3