From a9509e9949cafa3617de1d8994e70a276f307796 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Mon, 5 Jan 2026 17:30:31 +1300 Subject: [PATCH] Improved search for Android TV --- .../android/app/capacitor.build.gradle | 1 + .../android/app/src/main/AndroidManifest.xml | 1 + .../android/capacitor.settings.gradle | 3 + materialious/package-lock.json | 14 +++- materialious/package.json | 3 +- materialious/src/lib/components/Player.svelte | 20 ++++- materialious/src/lib/components/Search.svelte | 73 ++++++++----------- .../src/lib/components/settings/Player.svelte | 18 +++++ materialious/src/lib/i18n/locales/en.json | 1 + materialious/src/lib/store.ts | 5 ++ materialious/src/routes/(app)/+layout.svelte | 11 +-- .../src/routes/(app)/search/+page.svelte | 57 ++++++++++++--- materialious/src/routes/+layout.svelte | 9 +++ 13 files changed, 147 insertions(+), 69 deletions(-) diff --git a/materialious/android/app/capacitor.build.gradle b/materialious/android/app/capacitor.build.gradle index 149e2450..fb4c4f4f 100644 --- a/materialious/android/app/capacitor.build.gradle +++ b/materialious/android/app/capacitor.build.gradle @@ -13,6 +13,7 @@ dependencies { implementation project(':capacitor-app') implementation project(':capacitor-browser') implementation project(':capacitor-clipboard') + implementation project(':capacitor-network') implementation project(':capacitor-preferences') implementation project(':capacitor-screen-orientation') implementation project(':capacitor-share') diff --git a/materialious/android/app/src/main/AndroidManifest.xml b/materialious/android/app/src/main/AndroidManifest.xml index d9faa8b6..a2ed4bb3 100644 --- a/materialious/android/app/src/main/AndroidManifest.xml +++ b/materialious/android/app/src/main/AndroidManifest.xml @@ -94,6 +94,7 @@ + diff --git a/materialious/android/capacitor.settings.gradle b/materialious/android/capacitor.settings.gradle index 6f462263..0dc65e52 100644 --- a/materialious/android/capacitor.settings.gradle +++ b/materialious/android/capacitor.settings.gradle @@ -14,6 +14,9 @@ project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/ include ':capacitor-clipboard' project(':capacitor-clipboard').projectDir = new File('../node_modules/@capacitor/clipboard/android') +include ':capacitor-network' +project(':capacitor-network').projectDir = new File('../node_modules/@capacitor/network/android') + include ':capacitor-preferences' project(':capacitor-preferences').projectDir = new File('../node_modules/@capacitor/preferences/android') diff --git a/materialious/package-lock.json b/materialious/package-lock.json index c1aa0009..68dd8163 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -1,12 +1,12 @@ { "name": "materialious", - "version": "1.12.11", + "version": "1.13.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "materialious", - "version": "1.12.11", + "version": "1.13.0", "hasInstallScript": true, "dependencies": { "@capacitor-community/electron": "^5.0.1", @@ -16,6 +16,7 @@ "@capacitor/browser": "^8.0.0", "@capacitor/clipboard": "^8.0.0", "@capacitor/core": "^8.0.0", + "@capacitor/network": "^8.0.0", "@capacitor/preferences": "^8.0.0", "@capacitor/screen-orientation": "^8.0.0", "@capacitor/share": "^8.0.0", @@ -2137,6 +2138,15 @@ "tslib": "^2.1.0" } }, + "node_modules/@capacitor/network": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@capacitor/network/-/network-8.0.0.tgz", + "integrity": "sha512-fgvB7pNKn8pKavuzys218j4YuA5euNfavp7nS3NuwWKWNupZAlbucfnl75lazxCyVF/ZRjzYVTb4vtTEfFrK1A==", + "license": "MIT", + "peerDependencies": { + "@capacitor/core": ">=8.0.0" + } + }, "node_modules/@capacitor/preferences": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@capacitor/preferences/-/preferences-8.0.0.tgz", diff --git a/materialious/package.json b/materialious/package.json index 520b72e4..5562994a 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -49,6 +49,7 @@ "@capacitor/browser": "^8.0.0", "@capacitor/clipboard": "^8.0.0", "@capacitor/core": "^8.0.0", + "@capacitor/network": "^8.0.0", "@capacitor/preferences": "^8.0.0", "@capacitor/screen-orientation": "^8.0.0", "@capacitor/share": "^8.0.0", @@ -76,4 +77,4 @@ "svelte-infinite-loading": "^1.4.0", "youtubei.js": "^16.0.1" } -} \ No newline at end of file +} diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte index 7a6889cd..afb2f238 100644 --- a/materialious/src/lib/components/Player.svelte +++ b/materialious/src/lib/components/Player.svelte @@ -24,6 +24,7 @@ isAndroidTvStore, playerAlwaysLoopStore, playerAndroidLockOrientation, + playerAndroidPauseOnNetworkChange, playerAutoPlayStore, playerCCByDefault, playerDefaultLanguage, @@ -53,6 +54,7 @@ import { injectSabr } from '$lib/sabr'; import type { SabrStreamingAdapter } from 'googlevideo/sabr-streaming-adapter'; import { SvelteSet } from 'svelte/reactivity'; + import { Network, type ConnectionStatus } from '@capacitor/network'; interface Props { data: { video: VideoPlay; content: PhasedDescription; playlistId: string | null }; @@ -76,6 +78,8 @@ let watchProgressInterval: NodeJS.Timeout; let showVideoRetry = $state(false); + let androidInitialNetworkStatus: ConnectionStatus | undefined; + let player: shaka.Player; let sabrAdapter: SabrStreamingAdapter | null; @@ -98,7 +102,6 @@ let playerVideoEndTimePretty: string = $state(''); let playerBufferedTo: number = $state(0); let playerCloestTimestamp: Timestamp | undefined = $state(); - let playerControls: HTMLElement | undefined = $state(); // eslint-disable-next-line no-undef let playerAndroidUITimeout: NodeJS.Timeout; @@ -597,6 +600,17 @@ await androidHandleRotate(); if (Capacitor.getPlatform() === 'android') { + androidInitialNetworkStatus = await Network.getStatus(); + + Network.addListener('networkStatusChange', (networkStatus) => { + if ( + androidInitialNetworkStatus?.connectionType !== networkStatus.connectionType && + $playerAndroidPauseOnNetworkChange + ) { + playerElement?.pause(); + } + }); + await CapacitorMusicControls.create({ track: data.video.title, artist: data.video.author, @@ -1024,6 +1038,8 @@ } } + await Network.removeAllListeners(); + await setStatusBarColor(); await CapacitorMusicControls.destroy(); @@ -1123,7 +1139,7 @@ {#if !hideControls} -
+