Tinker-Feedback: 5 Bugfixes (Shuffle/Repeat, Full-Cover, Auto-Play, Scan-Button, Back-Geste) #6
@@ -5,6 +5,23 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### 🔄 Doppelten Scan-Button auf Android entfernt (2026-08-27)
|
||||||
|
|
||||||
|
- 🐛 **In den Einstellungen gab es auf Android zwei Buttons für dieselbe
|
||||||
|
Aktion** ("Musik scannen" und "Erneut scannen") — beide riefen dort
|
||||||
|
denselben geräteweiten MediaStore-Scan auf (`LibraryService.
|
||||||
|
pickFolderAndScan()` und `.rescan()` sind auf Android identisch, da
|
||||||
|
Scoped Storage keine Ordnerwahl erlaubt). Nur auf Desktop unterscheiden
|
||||||
|
sie sich echt (Ordner hinzufügen vs. bekannte Ordner erneut scannen).
|
||||||
|
- 🔧 **Fix:** Der zweite `ListTile` ("Erneut scannen") wird in
|
||||||
|
`settings_screen.dart` nur noch angezeigt, wenn `zeigeErneutScannenButton
|
||||||
|
(Platform.isAndroid)` das zulässt. Die Sichtbarkeits-Entscheidung ist als
|
||||||
|
pure Funktion in `library_service.dart` ausgelagert (statt direkt
|
||||||
|
`Platform.isAndroid` in der UI abzufragen), weil sich die echte Plattform
|
||||||
|
in Flutter-Tests nicht sauber auf "Android" umschalten lässt.
|
||||||
|
- ✅ **Getestet:** 2 neue Unit-Tests für `zeigeErneutScannenButton` (RED→
|
||||||
|
GREEN), volle Suite (592 Tests) grün, `flutter analyze` ohne Befund.
|
||||||
|
|
||||||
### 🎧 Song antippen öffnet den Vollbild-Player (2026-08-27)
|
### 🎧 Song antippen öffnet den Vollbild-Player (2026-08-27)
|
||||||
|
|
||||||
- 🐛 **Ein Song antippen öffnete früher nur die Wiedergabe, ohne zum
|
- 🐛 **Ein Song antippen öffnete früher nur die Wiedergabe, ohne zum
|
||||||
|
|||||||
@@ -13,6 +13,13 @@ import 'scan_service.dart';
|
|||||||
String get addMusicLabel =>
|
String get addMusicLabel =>
|
||||||
Platform.isAndroid ? 'Musik scannen' : 'Musikordner hinzufügen';
|
Platform.isAndroid ? 'Musik scannen' : 'Musikordner hinzufügen';
|
||||||
|
|
||||||
|
/// Ob der "Erneut scannen"-Button zusätzlich zum [addMusicLabel]-Button
|
||||||
|
/// angezeigt wird. Auf Android tun [LibraryService.pickFolderAndScan] und
|
||||||
|
/// [LibraryService.rescan] dasselbe (kompletter MediaStore-Scan) — dort
|
||||||
|
/// reicht ein Button. Pure Funktion statt direkter [Platform.isAndroid]-
|
||||||
|
/// Abfrage, damit sie unabhängig von der echten Plattform testbar ist.
|
||||||
|
bool zeigeErneutScannenButton(bool isAndroid) => !isAndroid;
|
||||||
|
|
||||||
/// Koordiniert Ordnerwahl und Scans; hält den Scan-Fortschritt für die UI.
|
/// Koordiniert Ordnerwahl und Scans; hält den Scan-Fortschritt für die UI.
|
||||||
/// Android scannt automatisch über MediaStore (Scoped Storage lässt keinen
|
/// Android scannt automatisch über MediaStore (Scoped Storage lässt keinen
|
||||||
/// direkten Dateizugriff zu); Desktop scannt vom Nutzer gewählte Ordner.
|
/// direkten Dateizugriff zu); Desktop scannt vom Nutzer gewählte Ordner.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:package_info_plus/package_info_plus.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
@@ -103,6 +105,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||||||
enabled: !lib.scanning,
|
enabled: !lib.scanning,
|
||||||
onTap: lib.pickFolderAndScan,
|
onTap: lib.pickFolderAndScan,
|
||||||
),
|
),
|
||||||
|
if (zeigeErneutScannenButton(Platform.isAndroid))
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.refresh),
|
leading: const Icon(Icons.refresh),
|
||||||
title: const Text('Erneut scannen'),
|
title: const Text('Erneut scannen'),
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:melo/library/library_service.dart';
|
||||||
|
|
||||||
|
// Bug (Tinker): Auf Android zeigten die Einstellungen zwei Buttons mit
|
||||||
|
// identischer Aufgabe ("Musik scannen" und "Erneut scannen") — beide riefen
|
||||||
|
// auf Android denselben Geräte-weiten MediaStore-Scan auf. Die Sichtbarkeit
|
||||||
|
// des zweiten Buttons hängt eigentlich von Platform.isAndroid ab, das sich
|
||||||
|
// in Tests nicht sauber auf "Android" umschalten lässt — deshalb ist die
|
||||||
|
// Entscheidung hier als pure, plattformunabhängig testbare Funktion
|
||||||
|
// ausgelagert.
|
||||||
|
void main() {
|
||||||
|
group('zeigeErneutScannenButton', () {
|
||||||
|
test('auf Android ausgeblendet (identisch zu "Musik scannen")', () {
|
||||||
|
expect(zeigeErneutScannenButton(true), isFalse);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('auf Desktop angezeigt (echter Unterschied: bekannte Ordner erneut scannen)', () {
|
||||||
|
expect(zeigeErneutScannenButton(false), isTrue);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user