diff --git a/lib/common/view/audio_card_vignette.dart b/lib/common/view/audio_card_vignette.dart new file mode 100644 index 000000000..48ced15e7 --- /dev/null +++ b/lib/common/view/audio_card_vignette.dart @@ -0,0 +1,44 @@ +import '../../extensions/build_context_x.dart'; +import '../../l10n/l10n.dart'; +import 'package:flutter/material.dart'; +import 'package:yaru/yaru.dart'; +import 'theme.dart'; + +class AudioCardVignette extends StatelessWidget { + const AudioCardVignette({ + super.key, + this.onTap, + required this.iconData, + }); + + final void Function()? onTap; + final IconData iconData; + + @override + Widget build(BuildContext context) { + final colorScheme = context.colorScheme; + const borderRadius = BorderRadius.only( + bottomLeft: Radius.circular(kYaruContainerRadius), + topRight: Radius.circular(kYaruContainerRadius), + ); + return Tooltip( + message: context.l10n.unPinAlbum, + child: InkWell( + borderRadius: borderRadius, + onTap: onTap, + child: Container( + decoration: BoxDecoration( + color: colorScheme.inverseSurface, + borderRadius: borderRadius, + ), + width: audioCardDimension / (isMobile ? 3 : 4), + height: audioCardDimension / (isMobile ? 3 : 4), + child: Icon( + iconData, + color: colorScheme.onInverseSurface, + ), + ), + ), + ); + } +} diff --git a/lib/local_audio/local_audio_model.dart b/lib/local_audio/local_audio_model.dart index 3815d6033..62778c6fa 100644 --- a/lib/local_audio/local_audio_model.dart +++ b/lib/local_audio/local_audio_model.dart @@ -5,21 +5,30 @@ import 'package:safe_change_notifier/safe_change_notifier.dart'; import '../common/data/audio.dart'; import '../common/view/audio_filter.dart'; +import '../settings/settings_service.dart'; import 'local_audio_service.dart'; +import 'local_audio_view.dart'; class LocalAudioModel extends SafeChangeNotifier { LocalAudioModel({ required LocalAudioService localAudioService, - }) : _service = localAudioService; + required SettingsService settingsService, + }) : _localAudioService = localAudioService, + _settingsService = settingsService; - final LocalAudioService _service; + final LocalAudioService _localAudioService; + final SettingsService _settingsService; StreamSubscription? _audiosChangedSub; - int _localAudioIndex = 2; - int get localAudioindex => _localAudioIndex; + int? _localAudioIndex; + int get localAudioindex => + _localAudioIndex ?? LocalAudioView.values.indexOf(LocalAudioView.albums); set localAudioindex(int value) { if (value == _localAudioIndex) return; _localAudioIndex = value; + // Note: we do not listen to the local audio index change on purpose, we just pump it into the sink + // and load it fresh in init + _settingsService.setLocalAudioIndex(value); notifyListeners(); } @@ -39,60 +48,61 @@ class LocalAudioModel extends SafeChangeNotifier { notifyListeners(); } - List