From 9db99a07d0c5ac8eecd8b8c1b42792caab0fcc40 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Tue, 12 Jul 2022 01:35:10 +0600 Subject: [PATCH] Initial Volume maxed out to 100% fixed Android audio is not pausing on other audio source is running --- lib/provider/Playback.dart | 4 +++- lib/services/MobileAudioService.dart | 16 +++++++++++++++- pubspec.lock | 4 ++-- pubspec.yaml | 1 + 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/provider/Playback.dart b/lib/provider/Playback.dart index c5fb7840..0cd7e205 100644 --- a/lib/provider/Playback.dart +++ b/lib/provider/Playback.dart @@ -23,7 +23,6 @@ import 'package:spotube/provider/YouTube.dart'; import 'package:spotube/services/LinuxAudioService.dart'; import 'package:spotube/services/MobileAudioService.dart'; import 'package:spotube/utils/PersistedChangeNotifier.dart'; -import 'package:spotube/utils/platform.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart' hide Playlist; import 'package:collection/collection.dart'; import 'package:spotube/extensions/list-sort-multiple.dart'; @@ -80,6 +79,9 @@ class Playback extends PersistedChangeNotifier { (() async { cache = await Hive.openLazyBox("track-cache"); + + await player.setVolume(volume); + _subscriptions.addAll([ player.onPlayerStateChanged.listen( (state) async { diff --git a/lib/services/MobileAudioService.dart b/lib/services/MobileAudioService.dart index a426a262..87109ef8 100644 --- a/lib/services/MobileAudioService.dart +++ b/lib/services/MobileAudioService.dart @@ -1,13 +1,23 @@ import 'dart:async'; import 'package:audio_service/audio_service.dart'; +import 'package:audio_session/audio_session.dart'; import 'package:audioplayers/audioplayers.dart'; import 'package:spotube/provider/Playback.dart'; class MobileAudioService extends BaseAudioHandler { final Playback playback; + AudioSession? session; MobileAudioService(this.playback) { + AudioSession.instance.then((s) { + session = s; + s.interruptionEventStream.listen((event) { + if (event.type != AudioInterruptionType.duck) { + playback.pause(); + } + }); + }); final _player = playback.player; _player.onPlayerStateChanged.listen((state) async { if (state != PlayerState.completed) { @@ -31,6 +41,7 @@ class MobileAudioService extends BaseAudioHandler { } void addItem(MediaItem item) { + session?.setActive(true); mediaItem.add(item); } @@ -44,7 +55,10 @@ class MobileAudioService extends BaseAudioHandler { Future seek(Duration position) => playback.seekPosition(position); @override - Future stop() => playback.stop(); + Future stop() async { + await session?.setActive(true); + await playback.stop(); + } @override Future skipToNext() async { diff --git a/pubspec.lock b/pubspec.lock index 70e08e12..c3ec6182 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -65,12 +65,12 @@ packages: source: hosted version: "0.1.1" audio_session: - dependency: transitive + dependency: "direct main" description: name: audio_session url: "https://pub.dartlang.org" source: hosted - version: "0.1.6+1" + version: "0.1.9" audioplayers: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 4b8953e3..4cb82f63 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,6 +64,7 @@ dependencies: dbus: ^0.7.3 audioplayers: ^1.0.1 introduction_screen: ^3.0.2 + audio_session: ^0.1.9 dev_dependencies: flutter_test: