diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index c9e4af2..ac90e19 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -2,6 +2,7 @@
+
@@ -9,6 +10,7 @@
+
diff --git a/app.json b/app.json
index 80ae7ac..3ec3614 100644
--- a/app.json
+++ b/app.json
@@ -37,6 +37,9 @@
],
"bundleIdentifier": "com.omedis.musicland.ai",
"infoPlist": {
+ "UIBackgroundModes": [
+ "audio"
+ ],
"NSMicrophoneUsageDescription": "MusicLand uses the microphone to record your voice and audio so you can create and collaborate on music projects.",
"UISupportedInterfaceOrientations": [
"UIInterfaceOrientationPortrait",
@@ -73,7 +76,9 @@
"permissions": [
"android.permission.CAMERA",
"android.permission.MODIFY_AUDIO_SETTINGS",
- "android.permission.POST_NOTIFICATIONS"
+ "android.permission.POST_NOTIFICATIONS",
+ "android.permission.WAKE_LOCK",
+ "android.permission.FOREGROUND_SERVICE"
]
},
"web": {
diff --git a/package.json b/package.json
index a908331..7aab72f 100644
--- a/package.json
+++ b/package.json
@@ -55,7 +55,6 @@
"expo-linear-gradient": "~14.0.2",
"expo-linking": "~7.0.5",
"expo-location": "~18.0.10",
- "expo-minuit-shake-report": "^0.1.1",
"expo-notifications": "~0.29.14",
"expo-sharing": "~13.0.1",
"expo-speech": "~13.0.1",
diff --git a/src/providers/PlayerProvider.js b/src/providers/PlayerProvider.js
index 6b6805f..62fed3f 100644
--- a/src/providers/PlayerProvider.js
+++ b/src/providers/PlayerProvider.js
@@ -1,4 +1,8 @@
-import { useAudioPlayer, useAudioPlayerStatus } from "expo-audio";
+import {
+ setAudioModeAsync,
+ useAudioPlayer,
+ useAudioPlayerStatus,
+} from "expo-audio";
import React, {
createContext,
useCallback,
@@ -63,8 +67,8 @@ const HIDDEN_ROUTE_NAMES = new Set([
Routes.Register,
]);
-const noopAsync = async () => {};
-const noop = () => {};
+const noopAsync = async () => { };
+const noop = () => { };
const DEFAULT_CONTEXT = {
currentTrack: null,
@@ -274,36 +278,36 @@ const PlayerProvider = ({ children }) => {
(items = [], options = {}) => {
const normalized = Array.isArray(items)
? items
- .map((item) => {
- if (!item) return null;
- if (typeof item === "object") {
- const { metadata, context, ...rest } = item;
- const safeMetadata =
- metadata && typeof metadata === "object"
- ? { ...metadata }
- : undefined;
- if (safeMetadata) {
- delete safeMetadata.queue;
- }
- const safeContext =
- context && typeof context === "object"
- ? { ...context }
- : undefined;
- if (safeContext) {
- delete safeContext.queue;
- }
- return normalizeTrack(
- {
- ...rest,
- ...(safeMetadata ? { metadata: safeMetadata } : {}),
- ...(safeContext ? { context: safeContext } : {}),
- },
- {}
- );
+ .map((item) => {
+ if (!item) return null;
+ if (typeof item === "object") {
+ const { metadata, context, ...rest } = item;
+ const safeMetadata =
+ metadata && typeof metadata === "object"
+ ? { ...metadata }
+ : undefined;
+ if (safeMetadata) {
+ delete safeMetadata.queue;
}
- return normalizeTrack(item, {});
- })
- .filter((track) => !!track?.source)
+ const safeContext =
+ context && typeof context === "object"
+ ? { ...context }
+ : undefined;
+ if (safeContext) {
+ delete safeContext.queue;
+ }
+ return normalizeTrack(
+ {
+ ...rest,
+ ...(safeMetadata ? { metadata: safeMetadata } : {}),
+ ...(safeContext ? { context: safeContext } : {}),
+ },
+ {}
+ );
+ }
+ return normalizeTrack(item, {});
+ })
+ .filter((track) => !!track?.source)
: [];
queueRef.current = normalized;
@@ -374,6 +378,18 @@ const PlayerProvider = ({ children }) => {
return Platform.OS === "web" ? ms : ms / 1000;
}, []);
+ useEffect(() => {
+ setAudioModeAsync({
+ playsInSilentMode: true,
+ shouldPlayInBackground: true,
+ interruptionMode: "doNotMix",
+ allowsRecording: false,
+ shouldRouteThroughEarpiece: false,
+ }).catch((err) =>
+ console.warn("PlayerProvider: impossible de configurer le mode audio", err)
+ );
+ }, []);
+
useEffect(() => {
if (!status) return;
@@ -450,7 +466,7 @@ const PlayerProvider = ({ children }) => {
if (!player) return;
try {
player.loop = !!isLooping;
- } catch (_err) {}
+ } catch (_err) { }
}, [player, isLooping]);
const seekDebounceRef = useRef(null);
diff --git a/src/providers/index.js b/src/providers/index.js
index a1f3ce8..129b53a 100644
--- a/src/providers/index.js
+++ b/src/providers/index.js
@@ -1,11 +1,10 @@
import React from "react";
-import { ShakeReportProvider } from "expo-minuit-shake-report";
import SharedProviders from "./SharedProviders";
export default ({ children }) => {
return (
-
- {children}
-
+ //
+ {children}
+ //
);
};