Skip to content

Conversation

sentinelweb
Copy link
Owner

@sentinelweb sentinelweb commented Jul 17, 2024

  • dialog for selecting player focus / cast coonection, move out chrome cast icon on right of media player - make a popup menu to setect control target possibly (cast, remote or floating) - maybe floating is automatic only and not selectable
  • todo push volume control through the MVI and save/restore it - playerCommand for vol change
  • volume control cuer cast
  • way to disconnect cuer cast (can use menu item in remotes) - add connected state to model
  • item/media conflict in player status message
  • return player status message to command api (for update)
  • skip need to send configured skip time from control device
  • disconnect cuercast if request fails
  • bug: cuercast doesnt connect after file browser select
  • filebrowser remote + screen selection for playback (+ remember option) -
    • bypass if already connected to a device
  • screen select dialog (if>1) - add to RemoteSelectDialog
  • show the notification when app is minimised
  • fix any todos in branch
  • connection name in compact player
  • bug: skip buttons dont show in notification
  • notification deosnt show on lock screen for cuercast - check mediasession is setup properly - manage media session in CuerCastPlayerWatcher
  • connection target held on connector (with selected screen),
  • Show selected screen on connection display string -[1]
  • shareactivity injection is now messed up would have to inject player controls from notif (if available .. else empty player controls?)
  • add a focus button to connect cuer cast row in dialog
  • click item in player should goto file browser folder
  • back nav not working from FileBrowserFragment when form remotes screen (ok from player for some reason?)
  • play media on hub then stop and play again (with cuercast connected?) - doesnt play again second time
  • fix exceptions below
  • try to get target device showing in notification
  • add skippresenter into vlc player to accumulate skip presses
  • title in file browser on app

chromecast

  • player state doesnt show after chromecast connect
  • test chormecast operation and ensure working
  • chromecast volume not adjusting properly
  • play path -> chromecast needs to goto cuercast dialog. also pass item.
  • seems to disconnect after a while in bg -> [ ] log stuff
  • reconnect to existing chromecast session if available

cuercast

  • first time a file is played after start the player doesn't init properly - no playback - only from cast, not on device

volume

  • try setting VolumeProviderCompat on MediaSessionManager
  • cuercast host doesnt send volume to cilent when updated on mac - think just need to push update to view.
  • volume from host is zero when play starts possibly needs to be set in the state on init.
  • possibly make a volume control notification.

notification

  • live offset when in live mode. ("-30m / LIVE")
  • skip times on buttons
  • bring image under title (down to progress)
  • opens in expanded mode? maybe not possible.
  • add an error state (e.g. when cuercast connected cant access device) - show an error message, help text and image.
    • only allow relevant actions e.g. stop/disconnect
  • change media notif to use notify after startForeground
  • use swipe dismiss to swap between media and custom - make a pref - doesnt work

connection

  • save last connection state (null if not connected) and restore on app restart
  • check not connected behaviour show message and disable controls
  • if device already has a playing session then skip screen seslection on cuer connect dialog
  • if hub is running but no video window then state should be connected but not playing. UI on client should reflect this.
  • if hub not running then disconnect.
  • when hub isnt running maccy still shows as available.- think of a better availability system. help user know if device is pwered off vs app not running.
  • disconnect cuer cast (x) doesn't reset layer
  • stop cuer cast in dialog doesnt hide dialog
  • if connected but no host and then close activity get a blank notification - should sty connected but hide notif if no PlayerSession
  • gets into a state where it shows connected but isnt - CuerCastPlayerWatcher.remoteNode is null - debug it when this occurs. -> [ ] log stuff
  • dialogs should support dark theme
  • able to connect to chromecast while cuercast connected should disconnect
    • the two cast methods fight for the player controls - must be connected to both
  • notif doesn't disconnect if still showing but not on WiFi

@sentinelweb sentinelweb mentioned this pull request Jul 21, 2024
4 tasks
@sentinelweb
Copy link
Owner Author

sentinelweb commented Jul 24, 2024

FATAL EXCEPTION: main
 Process: uk.co.sentinelweb.cuer.app.debug, PID: 6039
     android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. Expected: main Calling: DefaultDispatcher-worker-10
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:12137)
at android.widget.TextView.setText(TextView.java:7547)
at android.widget.TextView.setText(TextView.java:7334)
at android.widget.TextView.setText(TextView.java:7286)
at uk.co.sentinelweb.cuer.app.ui.play_control.CastPlayerFragment.setTitle(CastPlayerFragment.kt:229)
at uk.co.sentinelweb.cuer.app.ui.play_control.CastPlayerPresenter.reset(CastPlayerPresenter.kt:194)
at uk.co.sentinelweb.cuer.app.util.cuercast.CuerCastPlayerWatcher.cleanup(CuerCastPlayerWatcher.kt:160)
at uk.co.sentinelweb.cuer.app.util.cuercast.CuerCastPlayerWatcher$sendStop$2.invokeSuspend(CuerCastPlayerWatcher.kt:154)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)

@sentinelweb
Copy link
Owner Author

FATAL EXCEPTION: main
Process: uk.co.sentinelweb.cuer.app.debug, PID: 29671
com.bumptech.glide.load.engine.CallbackException: Unexpected exception thrown by non-Glide code
at com.bumptech.glide.load.engine.EngineJob.callCallbackOnResourceReady(EngineJob.java:161)
at com.bumptech.glide.load.engine.EngineJob$CallResourceReady.run(EngineJob.java:428)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8919)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: java.lang.IllegalArgumentException: No media session ID allocated
at uk.co.sentinelweb.cuer.app.service.cast.notification.player.PlayerControlsNotificationMedia.buildNotification(PlayerControlsNotificationMedia.kt:93)
at uk.co.sentinelweb.cuer.app.service.cast.notification.player.PlayerControlsNotificationMedia.showNotification(PlayerControlsNotificationMedia.kt:52)
at uk.co.sentinelweb.cuer.app.service.cast.notification.player.PlayerControlsNotificationViewProxy.showNotification(PlayerControlsNotificationViewProxy.kt:38)
at uk.co.sentinelweb.cuer.app.service.cast.notification.player.PlayerControlsNotificationController.showNotification(PlayerControlsNotificationController.kt:139)
at uk.co.sentinelweb.cuer.app.service.cast.notification.player.PlayerControlsNotificationController.access$showNotification(PlayerControlsNotificationController.kt:35)
at uk.co.sentinelweb.cuer.app.service.cast.notification.player.PlayerControlsNotificationController$BitmapLoadTarget.onResourceReady(PlayerControlsNotificationController.kt:131)
at uk.co.sentinelweb.cuer.app.service.cast.notification.player.PlayerControlsNotificationController$BitmapLoadTarget.onResourceReady(PlayerControlsNotificationController.kt:126)
at com.bumptech.glide.request.SingleRequest.onResourceReady(SingleRequest.java:639)
at com.bumptech.glide.request.SingleRequest.onResourceReady(SingleRequest.java:578)
at com.bumptech.glide.load.engine.EngineJob.callCallbackOnResourceReady(EngineJob.java:159)
at com.bumptech.glide.load.engine.EngineJob$CallResourceReady.run(EngineJob.java:428) 
at android.os.Handler.handleCallback(Handler.java:958) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loopOnce(Looper.java:230) 
at android.os.Looper.loop(Looper.java:319) 
at android.app.ActivityThread.main(ActivityThread.java:8919) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) 

@sentinelweb
Copy link
Owner Author

sentinelweb commented Sep 15, 2024

FATAL EXCEPTION: main
Process: uk.co.sentinelweb.cuer.app.debug, PID: 16656
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:588)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) 
Caused by: org.koin.core.error.NoBeanDefFoundException: |- No definition found for class:'uk.co.sentinelweb.cuer.app.util.wrapper.StatusBarColorWrapper'. Check your definitions!
at org.koin.core.scope.Scope.throwDefinitionNotFound(Scope.kt:304)
at org.koin.core.scope.Scope.resolveValue(Scope.kt:274)
at org.koin.core.scope.Scope.resolveInstance(Scope.kt:241)
at org.koin.core.scope.Scope.get(Scope.kt:204)
at uk.co.sentinelweb.cuer.app.ui.settings.PrefBackupFragment$special$$inlined$inject$default$6.invoke(ComponentCallbackExt.kt:61)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at uk.co.sentinelweb.cuer.app.ui.settings.PrefBackupFragment.getStatusBarColor(PrefBackupFragment.kt:44)
at uk.co.sentinelweb.cuer.app.ui.settings.PrefBackupFragment.onCreateView(PrefBackupFragment.kt:70)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3115)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:569)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2103)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2004)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1941)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:661)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8919)
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) 

@sentinelweb sentinelweb merged commit 1a4df47 into feature/457-remote-playback Oct 2, 2024
2 checks passed
This was referenced Oct 2, 2024
@sentinelweb sentinelweb deleted the feature/457-remote-playback-cuer-cast branch October 2, 2024 23:02
@sentinelweb sentinelweb linked an issue Oct 16, 2024 that may be closed by this pull request
14 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

remote playback
2 participants