mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Music notification: properly parse HH:MM:SS string duration
The DoggCatcher app will send an `com.android.music.metachanged` Intent with a String extra "duration" formatted as "HH:MM:SS" or "MM:SS": ``` n.f.g.e.MusicPlaybackReceiver - duration 18:49 (java.lang.String) n.f.g.e.MusicPlaybackReceiver - artist stripped (java.lang.String) n.f.g.e.MusicPlaybackReceiver - package com.snoggdoggler.android.applications.doggcatcher.v1_0 (java.lang.String) n.f.g.e.MusicPlaybackReceiver - playing true (java.lang.Boolean) n.f.g.e.MusicPlaybackReceiver - album stripped (java.lang.String) n.f.g.e.MusicPlaybackReceiver - track stripped (java.lang.String) n.f.g.e.MusicPlaybackReceiver - position 533968 (java.lang.Integer) n.f.g.e.MusicPlaybackReceiver - Got metadata changed intent, but nothing changed, ignoring. ``` This code will parse duration Strings as HH:MM:SS, MM:SS or, if it is a single number, as milliseconds (which is the old default).
This commit is contained in:
+14
-1
@@ -34,6 +34,19 @@ public class MusicPlaybackReceiver extends BroadcastReceiver {
|
||||
private static MusicSpec lastMusicSpec = new MusicSpec();
|
||||
private static MusicStateSpec lastStateSpec = new MusicStateSpec();
|
||||
|
||||
public int parseTime(String time) {
|
||||
// will accept "23", "1:23", "03:07:23"
|
||||
String[] segments = time.split(":");
|
||||
int result = 0;
|
||||
for (String element : segments) {
|
||||
result = result*60 + Integer.parseInt(element, 10);
|
||||
}
|
||||
// single number must be milliseconds
|
||||
if (segments.length == 1)
|
||||
return result / 1000;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
/*
|
||||
@@ -76,7 +89,7 @@ public class MusicPlaybackReceiver extends BroadcastReceiver {
|
||||
stateSpec.state = (byte) (((Boolean) incoming) ? MusicStateSpec.STATE_PLAYING : MusicStateSpec.STATE_PAUSED);
|
||||
stateSpec.playRate = (byte) (((Boolean) incoming) ? 100 : 0);
|
||||
} else if (incoming instanceof String && "duration".equals(key)) {
|
||||
musicSpec.duration = Integer.parseInt((String) incoming) / 1000;
|
||||
musicSpec.duration = parseTime((String) incoming);
|
||||
} else if (incoming instanceof String && "trackno".equals(key)) {
|
||||
musicSpec.trackNr = Integer.parseInt((String) incoming);
|
||||
} else if (incoming instanceof String && "totaltrack".equals(key)) {
|
||||
|
||||
Reference in New Issue
Block a user