feat(library): highlight high-bitrate quality badges

This commit is contained in:
zarzet
2026-07-27 16:58:58 +07:00
parent af6ca12e85
commit e4cd52f29f
4 changed files with 53 additions and 3 deletions
+1
View File
@@ -9,6 +9,7 @@ import 'package:spotiflac_android/services/platform_bridge.dart';
import 'package:spotiflac_android/l10n/l10n.dart';
import 'package:spotiflac_android/utils/adaptive_layout.dart';
import 'package:spotiflac_android/utils/app_bar_layout.dart';
import 'package:spotiflac_android/utils/audio_quality_badge_policy.dart';
import 'package:spotiflac_android/utils/nav_bar_inset.dart';
import 'package:spotiflac_android/utils/re_enrich_release_policy.dart';
import 'package:spotiflac_android/widgets/settings_group.dart';
+3 -3
View File
@@ -336,11 +336,11 @@ extension _QueueTabCollectionItemWidgets on _QueueTabState {
String quality, {
bool listStyle = false,
}) {
final isHighResolution = quality.startsWith('24');
final isHighlightedQuality = shouldHighlightAudioQualityBadge(quality);
return Container(
padding: EdgeInsets.symmetric(horizontal: listStyle ? 6 : 4, vertical: 2),
decoration: BoxDecoration(
color: isHighResolution
color: isHighlightedQuality
? listStyle
? colorScheme.primaryContainer
: colorScheme.primary
@@ -350,7 +350,7 @@ extension _QueueTabCollectionItemWidgets on _QueueTabState {
child: Text(
listStyle ? quality : _getQualityBadgeText(quality),
style: Theme.of(context).textTheme.labelSmall?.copyWith(
color: isHighResolution
color: isHighlightedQuality
? listStyle
? colorScheme.onPrimaryContainer
: colorScheme.onPrimary
+24
View File
@@ -0,0 +1,24 @@
const highQualityBadgeBitrateThresholdKbps = 900;
/// Preserves the highlighted color used by legacy 24-bit Library badges while
/// also supporting newer labels that display a measured bitrate instead.
bool shouldHighlightAudioQualityBadge(String quality) {
final normalized = quality.trim().toLowerCase();
if (RegExp(r'\b24(?:\s*[- ]?\s*bit|/)').hasMatch(normalized)) {
return true;
}
final kbpsMatch = RegExp(
r'\b(\d+(?:\.\d+)?)\s*k(?:bps)?\b',
).firstMatch(normalized);
final kbps = double.tryParse(kbpsMatch?.group(1) ?? '');
if (kbps != null) {
return kbps > highQualityBadgeBitrateThresholdKbps;
}
final mbpsMatch = RegExp(
r'\b(\d+(?:\.\d+)?)\s*mbps\b',
).firstMatch(normalized);
final mbps = double.tryParse(mbpsMatch?.group(1) ?? '');
return mbps != null && mbps * 1000 > highQualityBadgeBitrateThresholdKbps;
}