Gramophone icon indicating copy to clipboard operation
Gramophone copied to clipboard

[BUG] Broken notification controls

Open tinkererkzy opened this issue 10 months ago • 31 comments

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:

  1. Play a song
  2. Switch to a another app
  3. Open notification shade
  4. See error

Screenshots

Image

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.

tinkererkzy avatar Feb 14 '25 13:02 tinkererkzy

Uh sorry but is this a device issue or something

tinkererkzy avatar Feb 21 '25 18:02 tinkererkzy

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.

nift4 avatar Feb 21 '25 18:02 nift4

Image On an Android 10 emulator, it works just fine. Can you maybe try the latest CI build from "Actions" tab?

nift4 avatar Mar 03 '25 22:03 nift4

Yep still present 1.0.15.aba27d6

tinkererkzy avatar Mar 07 '25 03:03 tinkererkzy

UPDATE:1.0.14 has proper notification controls 1.0.15 doesn't

Image

tinkererkzy avatar Mar 07 '25 03:03 tinkererkzy

@tinkererkzy can you reproduce it in 1.0.16?

nift4 avatar Mar 07 '25 18:03 nift4

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)

nift4 avatar Mar 10 '25 10:03 nift4

Nope happens on other songs(although these are m4a's)

Image

tinkererkzy avatar Mar 11 '25 17:03 tinkererkzy

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

nift4 avatar Mar 11 '25 17:03 nift4

Yes it does happen in all songs Also what title should I use on the email

tinkererkzy avatar Mar 12 '25 16:03 tinkererkzy

Issue 402

nift4 avatar Mar 12 '25 16:03 nift4

I sent it! But while capturing the report the app crashed so i reopened it mid report

tinkererkzy avatar Mar 12 '25 17:03 tinkererkzy

also here's a dumpsys media_session report (i had to put it in a file because of markdown)

dumpsys.txt

tinkererkzy avatar Mar 12 '25 17:03 tinkererkzy

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

Gramophone-1.0.16.1.ea1bf33-debug.apk.zip

nift4 avatar Mar 12 '25 17:03 nift4

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

tinkererkzy avatar Mar 13 '25 05:03 tinkererkzy

Hi @tinkererkzy does this APK work?

demo-session-debug.apk.zip

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

nift4 avatar Mar 17 '25 06:03 nift4

Yeah it's broken here too(so I guess Google issue)

Image

tinkererkzy avatar Mar 18 '25 14:03 tinkererkzy

@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

nift4 avatar Mar 18 '25 14:03 nift4

Yeah I don't mind at all (Honestly apart from this, I love this app)

tinkererkzy avatar Mar 18 '25 20:03 tinkererkzy

@nift4 If you want to we can hop on a call and I let you control the device directly

tinkererkzy avatar Mar 19 '25 20:03 tinkererkzy

I know it has been a very very long time, but are you still interested in getting this bug fixed?

nift4 avatar Jul 19 '25 13:07 nift4

Yeah ofc (But if you couldn't fix it i would be surprised(since Huawei kinda sucks in terms of android skins)

tinkererkzy avatar Jul 19 '25 13:07 tinkererkzy

Gramophone-1.0.17.6d7bbb8-release.apk.zip does this work?

nift4 avatar Jul 29 '25 11:07 nift4

Sorry for the late reply No it's not working

tinkererkzy avatar Aug 02 '25 09:08 tinkererkzy

Gramophone-1.0.17.9fc300b-release.apk.zip sorry for the late reply, does this work?

nift4 avatar Oct 31 '25 10:10 nift4

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:

Image Image

tinkererkzy avatar Nov 09 '25 21:11 tinkererkzy

@nift4 i hit closed by accident would you mind reopening it?

tinkererkzy avatar Nov 09 '25 21:11 tinkererkzy

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?

tinkererkzy avatar Nov 09 '25 21:11 tinkererkzy

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.

nift4 avatar Nov 10 '25 08:11 nift4