Bug 1284387 - Remove audio control notification after playing tab has been closed. r?ahunt draft
authorSebastian Kaspari <s.kaspari@gmail.com>
Thu, 21 Jul 2016 15:33:48 +0200
changeset 390604 a124a49ea0bc758be5a879aae6fc7f3fbd1c6bc2
parent 390603 d8a5ea157504793ff2bb2b5161103154a31f08e3
child 526029 f692403a38c826276920099f95efbadcbf6d87fb
push id23706
push users.kaspari@gmail.com
push dateThu, 21 Jul 2016 13:37:48 +0000
reviewersahunt
bugs1284387
milestone50.0a1
Bug 1284387 - Remove audio control notification after playing tab has been closed. r?ahunt MozReview-Commit-ID: 9nrlKpcedzQ
mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java
--- a/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java
+++ b/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java
@@ -97,23 +97,33 @@ public class MediaControlService extends
     }
 
     @Override
     public void onTabChanged(Tab tab, Tabs.TabEvents msg, String data) {
         if (!mIsInitMediaSession) {
             return;
         }
 
-        if (tab == mTabReference.get()) {
-            return;
-        }
+        switch (msg) {
+            case AUDIO_PLAYING_CHANGE:
+                if (tab == mTabReference.get()) {
+                    return;
+                }
 
-        if (msg == Tabs.TabEvents.AUDIO_PLAYING_CHANGE && tab.isAudioPlaying()) {
-            mTabReference = new WeakReference<Tab>(tab);
-            notifyControlInterfaceChanged(ACTION_PAUSE);
+                mTabReference = new WeakReference<>(tab);
+                notifyControlInterfaceChanged(ACTION_PAUSE);
+                break;
+
+            case CLOSED:
+                final Tab playingTab = mTabReference.get();
+                if (playingTab == null || playingTab == tab) {
+                    // The playing tab disappeared or was closed. Remove the controls and stop the service.
+                    notifyControlInterfaceChanged(ACTION_REMOVE_CONTROL);
+                }
+                break;
         }
     }
 
     private boolean isAndroidVersionLollopopOrHigher() {
         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
     }
 
     private void handleIntent(Intent intent) {