         activePlayback?.play()
     }
     
-    public func changeIcon() {
-        guard let playback = activePlayback else { return }
-
-        if playback.state == .paused {
-            button.setImage(playIcon, for: .normal)
-        } else if playback.state == .playing {
-            button.setImage(pauseIcon, for: .normal)
-        }
+    private func changeToPlayIcon() {
+        guard canShowPlayIcon else { return }
+        
+        button.setImage(playIcon, for: .normal)
+    }
+    
+    private func changeToPauseIcon() {
+        guard canShowPauseIcon else { return }
+        
+        button.setImage(pauseIcon, for: .normal)
     }
 }

    func bindPlaybackEvents() {
        if let playback = activePlayback {
            listenTo(playback, eventName: Event.didPause.rawValue) { [weak self] _ in self?.onPause() }
            listenTo(playback, eventName: Event.playing.rawValue) { [weak self] _ in self?.onPlay() }
            listenTo(playback, eventName: Event.stalling.rawValue) { [weak self] _ in self?.hide() }
        }

            button.bindFrameToSuperviewBounds()
        }
    }
    
    private var canShowPlayIcon: Bool {
        activePlayback?.state == .paused || activePlayback?.state == .idle
    }
    
    private var canShowPauseIcon: Bool {
        activePlayback?.state == .playing
    }

    override open func bindEvents() {
        bindPlaybackEvents()
