VolumeController.kt 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package com.mjdev.audio
  2. /**
  3. * Rozhraní pro jednotné ovládání systémové hlasitosti napříč platformami.
  4. * Implementace pro Linux desktop (PulseAudio/PipeWire) a Android (AudioManager).
  5. */
  6. expect class VolumeController private constructor() {
  7. /**
  8. * Aktuální hlasitost v rozsahu 0.0 - 1.0
  9. */
  10. val volume: Float
  11. get() = getVolume()
  12. /**
  13. * Zda je zvuk ztlumen
  14. */
  15. val isMuted: Boolean
  16. get() = getIsMuted()
  17. /**
  18. * Callback při změně hlasitosti
  19. */
  20. var onVolumeChanged: ((Float) -> Unit)? = null
  21. get() = getOnVolumeChanged()
  22. set(value) = setOnVolumeChanged(value)
  23. /**
  24. * Callback při změně mute stavu
  25. */
  26. var onMuteChanged: ((Boolean) -> Unit)? = null
  27. get() = getOnMuteChanged()
  28. set(value) = setOnMuteChanged(value)
  29. // Platform-specific implementations
  30. protected expect fun getVolume(): Float
  31. protected expect fun getIsMuted(): Boolean
  32. protected expect fun getOnVolumeChanged(): ((Float) -> Unit)?
  33. protected expect fun setOnVolumeChanged(listener: ((Float) -> Unit)?)
  34. protected expect fun getOnMuteChanged(): ((Boolean) -> Unit)?
  35. protected expect fun setOnMuteChanged(listener: ((Boolean) -> Unit)?)
  36. /**
  37. * Nastaví hlasitost (0.0 - 1.0)
  38. */
  39. expect fun setVolume(volume: Float)
  40. /**
  41. * Přepne mute stav
  42. */
  43. expect fun toggleMute()
  44. /**
  45. * Nastaví mute stav
  46. */
  47. expect fun setMuted(muted: Boolean)
  48. /**
  49. * Zvýší hlasitost o krok (default 5%)
  50. */
  51. fun volumeUp(step: Float = 0.05f) {
  52. setVolume((volume + step).coerceIn(0f, 1f))
  53. }
  54. /**
  55. * Sníží hlasitost o krok (default 5%)
  56. */
  57. fun volumeDown(step: Float = 0.05f) {
  58. setVolume((volume - step).coerceIn(0f, 1f))
  59. }
  60. companion object {
  61. /**
  62. * Singleton instance pro danou platformu
  63. */
  64. @Suppress("UNUSED_PARAMETER")
  65. expect fun getInstance(): VolumeController
  66. }
  67. }