From 94949e14a6b65f93baa36bf63dc4181f65918016 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 14 Jul 2025 00:38:00 +0200 Subject: [PATCH] Android: add inset spacers (experimental) --- src/Logic/Web/AndroidPolyfill.ts | 31 +++++++++++++++++++++ src/UI/AllThemesGui.svelte | 12 +++++++- src/UI/Base/InsetSpacer.svelte | 8 ++++++ src/UI/BigComponents/MenuDrawerIndex.svelte | 7 +++++ src/UI/ThemeViewGUI.svelte | 4 +++ 5 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/UI/Base/InsetSpacer.svelte diff --git a/src/Logic/Web/AndroidPolyfill.ts b/src/Logic/Web/AndroidPolyfill.ts index 1c54ae5e3..a81589283 100644 --- a/src/Logic/Web/AndroidPolyfill.ts +++ b/src/Logic/Web/AndroidPolyfill.ts @@ -94,6 +94,37 @@ export class AndroidPolyfill { return token } + /** + * Gets how much padding we should add on top and at the bottom; in pixels + */ + private static insets: { top: Store, bottom: Store } = undefined + + public static getInsetSizes(): Readonly<{ top: Store, bottom: Store }> { + if (AndroidPolyfill.insets) { + return AndroidPolyfill.insets + } + const insets = { + top: new UIEventSource(0), + bottom: new UIEventSource(0), + } + AndroidPolyfill.insets = insets + + console.log("Web: requesting inset sizes") + DatabridgePluginSingleton.request<{ top: number, bottom: number }>({ + key: "insets", + }).then((result) => { + let v = result.value + if(typeof v === "string"){ + v = JSON.parse(v) + } + console.log("Got inset sizes:", result) + insets.bottom.set(v.bottom) + insets.top.set(v.top) + }) + + return insets + } + public static onBackButton( callback: () => boolean, options: { diff --git a/src/UI/AllThemesGui.svelte b/src/UI/AllThemesGui.svelte index 359929c53..b2fdace37 100644 --- a/src/UI/AllThemesGui.svelte +++ b/src/UI/AllThemesGui.svelte @@ -25,6 +25,7 @@ import { MenuIcon } from "@rgossiaux/svelte-heroicons/solid" import AccordionSingle from "./Flowbite/AccordionSingle.svelte" import MenuDrawerIndex from "./BigComponents/MenuDrawerIndex.svelte" + import InsetSpacer from "./Base/InsetSpacer.svelte" AndroidPolyfill.init().then(() => console.log("Android polyfill setup completed")) const featureSwitches = new OsmConnectionFeatureSwitches() @@ -133,6 +134,9 @@ { returnToIndex: new ImmutableStore(false) } ) + const topSPace = AndroidPolyfill.getInsetSizes().top + const bottom = AndroidPolyfill.getInsetSizes().bottom + /** * Opens the first search candidate */ @@ -155,8 +159,8 @@ -
+
+ Inset sizes: + {$topSPace} {$bottom} +
+ + + diff --git a/src/UI/Base/InsetSpacer.svelte b/src/UI/Base/InsetSpacer.svelte new file mode 100644 index 000000000..56e391936 --- /dev/null +++ b/src/UI/Base/InsetSpacer.svelte @@ -0,0 +1,8 @@ + + +
diff --git a/src/UI/BigComponents/MenuDrawerIndex.svelte b/src/UI/BigComponents/MenuDrawerIndex.svelte index 5fc914af5..2fbcfa256 100644 --- a/src/UI/BigComponents/MenuDrawerIndex.svelte +++ b/src/UI/BigComponents/MenuDrawerIndex.svelte @@ -59,6 +59,7 @@ import { PhotoIcon } from "@babeard/svelte-heroicons/outline" import ImageUploadQueue from "../../Logic/ImageProviders/ImageUploadQueue" import QueuedImagesView from "../Image/QueuedImagesView.svelte" + import InsetSpacer from "../Base/InsetSpacer.svelte" export let state: { favourites: FavouritesFeatureSource @@ -102,6 +103,9 @@
+ {#if onlyLink} + + {/if}

@@ -330,4 +334,7 @@ {/if}

+ {#if onlyLink} + + {/if}
diff --git a/src/UI/ThemeViewGUI.svelte b/src/UI/ThemeViewGUI.svelte index daa0a47b9..65e22a932 100644 --- a/src/UI/ThemeViewGUI.svelte +++ b/src/UI/ThemeViewGUI.svelte @@ -54,6 +54,8 @@ import GpsElementHelper from "./BigComponents/GpsElementHelper.svelte" import { dragDetection } from "../Utils/dragDetection" import WelcomeBack from "./BigComponents/WelcomeBack.svelte" + import InsetSpacer from "./Base/InsetSpacer.svelte" + import { AndroidPolyfill } from "../Logic/Web/AndroidPolyfill" export let state: WithSearchState new TitleHandler(state.selectedElement, state) @@ -332,6 +334,7 @@
+ @@ -340,6 +343,7 @@
+