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}
-
+