- Replace legacy MediaBrowserServiceCompat/MediaSessionCompat with
Media3 MediaSessionService (MusicService.kt) + ExoPlayer set to
WAKE_MODE_NETWORK — holds WakeLock + WifiLock through Doze so audio
plays uninterrupted on locked screen
- Media3 manages the notification; no manual NotificationCompat.Builder
→ no disappear/reappear flicker when skipping tracks
- Full bidirectional bridge:
JS → native: window.NSBridge.* (WebBridge.kt, 13 methods)
Native → JS: window.NSPlayer.* callbacks (onReady, onTrackChanged,
onPositionUpdate, onPlaybackStateChanged, onQueueEnded, onError)
- player.js: progressive enhancement — all playback routes through
NSBridge when running inside the wrapper, falls back to S.audio on
plain PWA/browser; removes all window.Android.* calls
- main.js: guard _onForeground mediaSession playbackState setter behind
!window.NSBridge so native Media3 session is never stomped
- ProGuard rules updated to keep WebBridge @JavascriptInterface methods
and Media3 classes
- bridge-test.html: manual integration test page for every bridge method
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
9 lines
372 B
Prolog
9 lines
372 B
Prolog
# Keep @JavascriptInterface methods — called by WebView via reflection, stripped otherwise.
|
|
-keepclassmembers class com.novasonic.app.WebBridge {
|
|
@android.webkit.JavascriptInterface <methods>;
|
|
}
|
|
|
|
# Keep Media3 session / exoplayer classes used by reflection / service binding.
|
|
-keep class androidx.media3.** { *; }
|
|
-keep class com.google.android.exoplayer2.** { *; }
|