[BUG] Broken notification controls
Describe the bug The time displays(current,length) and the circle in the progress bar is missing(see SS for details)
To Reproduce Steps to reproduce the behavior:
- Play a song
- Switch to a another app
- Open notification shade
- See error
Screenshots
Smartphone (please complete the following information):
- Device: Huawei P30 Pro
- OS:Android 10
- App:1.0.15.64ab51
Additional context Add any other context about the problem here.
- [X] I will open one issue per bug, follow the issue format and will add
[BUG]to the start of my issue title, and I acknowledge that if I don't follow the format, my issue might get closed without further explanation.
Uh sorry but is this a device issue or something
Well, it works on my Android 14 device, but media notifications use media session for data since Android 13 and I didn't get around to trying an emulator. Might also be an problem caused by Huawei considering you're the first to report it but who knows.
On an Android 10 emulator, it works just fine. Can you maybe try the latest CI build from "Actions" tab?
Yep still present 1.0.15.aba27d6
UPDATE:1.0.14 has proper notification controls 1.0.15 doesn't
@tinkererkzy can you reproduce it in 1.0.16?
Hi @tinkererkzy does this happen with all songs or only this specific one? Can you change song position in the app or does that not work either?
EDIT: I'm asking because some special MP3 files cannot be seeked in which would explain the observed behaviour (it will hide the seek handle)
Nope happens on other songs(although these are m4a's)
to reverse the question, does it happen on all songs?
in addition, can you please send an interactive bug report created in developer options to [email protected] - thanks
Yes it does happen in all songs Also what title should I use on the email
Issue 402
I sent it! But while capturing the report the app crashed so i reopened it mid report
also here's a dumpsys media_session report (i had to put it in a file because of markdown)
thanks @tinkererkzy (while the bug report contains that as well, having one from yt music is nice for comparision)
I'm able to see that gramophone advertises the session as seekable so that's not the problem, the file can indeed be seeked in and that gets across to the system. I'm currently suspecting DefaultMediaNotificationProvider. please try this apk
Sorry but it's still broken :( (Also forgot to say the seekbar works,just the handle and the times are missing)
https://github.com/user-attachments/assets/feaeb114-d56b-4fc7-8671-b5eb922c55bc
Hi @tinkererkzy does this APK work?
This is not Gramophone, it's Google's example app how to make a media notification. Gramophone works similarily to it, hence it'd be good to know if it works
Yeah it's broken here too(so I guess Google issue)
@tinkererkzy thanks for testing, I'll get back to you in a few days~weeks with more stuff to test if you don't mind
Yeah I don't mind at all (Honestly apart from this, I love this app)
@nift4 If you want to we can hop on a call and I let you control the device directly
I know it has been a very very long time, but are you still interested in getting this bug fixed?
Yeah ofc (But if you couldn't fix it i would be surprised(since Huawei kinda sucks in terms of android skins)
Gramophone-1.0.17.6d7bbb8-release.apk.zip does this work?
Sorry for the late reply No it's not working
Gramophone-1.0.17.9fc300b-release.apk.zip sorry for the late reply, does this work?
The app just plain crashed after installing on my P30 pro Mean while it worked fine on my A36(OneUI 8) Bug report:
Gramophone version: 1.0.17.9fc300b (org.akanework.gramophone)
Release type: Nick
Brand: HUAWEI
Model: VOG-L29
SDK Level: 29
Thread: DefaultDispatcher-worker-5
Time: 2025-11-10 00:30:52
--------- beginning of crash
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.File.getAbsolutePath()' on a null object reference
at uk.akane.libphonograph.reader.Reader.readFromMediaStore(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:235)
at uk.akane.libphonograph.reader.FlowReader$readerFlow$1$1$1$1$2$1$1.invokeSuspend(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:114)
at uk.akane.libphonograph.reader.FlowReader$readerFlow$1$1$1$1$2$1$1.invoke(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:21)
at uk.akane.libphonograph.reader.FlowReader$special$$inlined$flatMapLatest$1.invokeSuspend(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:68)
at uk.akane.libphonograph.reader.FlowReader$special$$inlined$flatMapLatest$1.invoke(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:25)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invokeSuspend(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:38)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invoke(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:18)
at kotlinx.coroutines.AbstractCoroutine.start(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:39)
at kotlinx.coroutines.JobKt.launch(Unknown Source:24)
at kotlinx.coroutines.JobKt.launch$default(Unknown Source:16)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1.emit(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:101)
at kotlinx.coroutines.flow.StateFlowImpl.collect(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:174)
at kotlinx.coroutines.flow.ReadonlyStateFlow.collect(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:3)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invokeSuspend(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:94)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invoke(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:31)
at androidx.tracing.Trace.startUndspatched(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:19)
at kotlinx.coroutines.JobKt.coroutineScope(Unknown Source:11)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest.flowCollect(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:7)
at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest.collectTo(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:6)
at coil3.RealImageLoader$enqueue$job$1.invokeSuspend(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:176)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:9)
at kotlinx.coroutines.DispatchedTask.run(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:115)
at androidx.recyclerview.widget.DefaultItemAnimator$3.run(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:11)
at kotlinx.coroutines.scheduling.TaskImpl.run(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:3)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(r8-map-id-8808acebd43ff3232ee0e18810896f2b90aeb089834e04c8f260350fee76e7e7:88)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineName(FlowReader), org.akanework.gramophone.logic.utils.flows.CountingPauseManager@d42f7a7, StandaloneCoroutine{Cancelling}@f228454, Dispatchers.IO]
Screenshots from A36:
@nift4 i hit closed by accident would you mind reopening it?
Altough closing maybe beneficial to you since the only person using this edge case now unsupported device has migrated and thus not affected by the bug
So what do you think?
Eh, if you're still willing to test, I'd like to continue trying to fix it, because users being so patient and receptive to test builds is not that common.