Bug 1479270 - part2 : remove HLS video player. r=snorp
authoralwu <alwu@mozilla.com>
Fri, 24 Aug 2018 22:36:18 +0000
changeset 481712 75b11f12bf4be13dbcabaf81c322d12ad6106b86
parent 481711 d14df50757255de3cf020d784bf60662a18ac626
child 481713 d3e3d5942e1b4a70963157c7000816c3ca0e604f
push id232
push userfmarier@mozilla.com
push dateWed, 05 Sep 2018 20:45:54 +0000
reviewerssnorp
bugs1479270, 1345752
milestone63.0a1
Bug 1479270 - part2 : remove HLS video player. r=snorp Since we have native HLS support in 59 [1], we can remove those codes which is used to play HLS. [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1345752 Differential Revision: https://phabricator.services.mozilla.com/D4166
mobile/android/app/src/main/res/drawable-xxhdpi/exit_fullscreen.png
mobile/android/app/src/main/res/drawable-xxhdpi/fullscreen.png
mobile/android/app/src/main/res/layout/gecko_app.xml
mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
mobile/android/base/java/org/mozilla/gecko/media/VideoPlayer.java
mobile/android/chrome/content/browser.js
deleted file mode 100644
index 593609038b962ec96125e11947ef03428f1291bf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index baa187662a11a1217e0283b662492ad91520d927..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/mobile/android/app/src/main/res/layout/gecko_app.xml
+++ b/mobile/android/app/src/main/res/layout/gecko_app.xml
@@ -32,21 +32,16 @@
                                              android:layout_height="match_parent"
                                              android:scrollbars="none"/>
 
             <org.mozilla.gecko.FormAssistPopup android:id="@+id/form_assist_popup"
                                                android:layout_width="match_parent"
                                                android:layout_height="match_parent"
                                                android:visibility="gone"/>
 
-            <view class="org.mozilla.gecko.media.VideoPlayer" android:id="@+id/video_player"
-                         android:layout_height="match_parent"
-                         android:layout_width="match_parent">
-            </view>
-
             <FrameLayout android:id="@+id/home_screen_container"
                          android:layout_width="match_parent"
                          android:layout_height="match_parent"
                          android:visibility="gone">
 
                 <ViewStub android:id="@+id/home_pager_stub"
                           android:layout="@layout/home_pager"
                           android:layout_width="match_parent"
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -105,17 +105,16 @@ import org.mozilla.gecko.home.HomeScreen
 import org.mozilla.gecko.home.SearchEngine;
 import org.mozilla.gecko.icons.Icons;
 import org.mozilla.gecko.icons.IconsHelper;
 import org.mozilla.gecko.icons.decoders.FaviconDecoder;
 import org.mozilla.gecko.icons.decoders.IconDirectoryEntry;
 import org.mozilla.gecko.icons.decoders.LoadFaviconResult;
 import org.mozilla.gecko.lwt.LightweightTheme;
 import org.mozilla.gecko.media.PictureInPictureController;
-import org.mozilla.gecko.media.VideoPlayer;
 import org.mozilla.gecko.menu.GeckoMenu;
 import org.mozilla.gecko.menu.GeckoMenuItem;
 import org.mozilla.gecko.mma.MmaDelegate;
 import org.mozilla.gecko.mozglue.SafeIntent;
 import org.mozilla.gecko.notifications.NotificationHelper;
 import org.mozilla.gecko.overlays.ui.ShareDialog;
 import org.mozilla.gecko.permissions.Permissions;
 import org.mozilla.gecko.preferences.ClearOnShutdownPref;
@@ -227,17 +226,16 @@ public class BrowserApp extends GeckoApp
     public static final String ACTION_VIEW_MULTIPLE = AppConstants.ANDROID_PACKAGE_NAME + ".action.VIEW_MULTIPLE";
 
     private BrowserSearch mBrowserSearch;
     private View mBrowserSearchContainer;
 
     public ViewGroup mBrowserChrome;
     public ViewFlipper mActionBarFlipper;
     public ActionModeCompatView mActionBar;
-    private VideoPlayer mVideoPlayer;
     private PictureInPictureController mPipController;
     private BrowserToolbar mBrowserToolbar;
     private View doorhangerOverlay;
     // We can't name the TabStrip class because it's not included on API 9.
     private TabStripInterface mTabStrip;
     private AnimatedProgressBar mProgressView;
     private HomeScreen mHomeScreen;
     private TabsPanel mTabsPanel;
@@ -369,20 +367,16 @@ public class BrowserApp extends GeckoApp
             }
 
             return;
         }
 
         Log.d(LOGTAG, "BrowserApp.onTabChanged: " + tab.getId() + ": " + msg);
         switch (msg) {
             case SELECTED:
-                if (mVideoPlayer.isPlaying()) {
-                    mVideoPlayer.stop();
-                }
-
                 if (Tabs.getInstance().isSelectedTab(tab) && mDynamicToolbar.isEnabled()) {
                     final VisibilityTransition transition = (tab.getShouldShowToolbarWithoutAnimationOnFirstSelection()) ?
                             VisibilityTransition.IMMEDIATE : VisibilityTransition.ANIMATE;
                     mDynamicToolbar.setVisible(true, transition);
 
                     // The first selection has happened - reset the state.
                     tab.setShouldShowToolbarWithoutAnimationOnFirstSelection(false);
                 }
@@ -648,26 +642,16 @@ public class BrowserApp extends GeckoApp
 
         mOnboardingHelper = new OnboardingHelper(this, safeStartingIntent);
         initSwitchboardAndMma(this, safeStartingIntent, isInAutomation);
         initTelemetryUploader(isInAutomation);
 
         mBrowserChrome = (ViewGroup) findViewById(R.id.browser_chrome);
         mActionBarFlipper = (ViewFlipper) findViewById(R.id.browser_actionbar);
         mActionBar = (ActionModeCompatView) findViewById(R.id.actionbar);
-
-        mVideoPlayer = (VideoPlayer) findViewById(R.id.video_player);
-        mVideoPlayer.setFullScreenListener(new VideoPlayer.FullScreenListener() {
-            @Override
-            public void onFullScreenChanged(boolean fullScreen) {
-                mVideoPlayer.setFullScreen(fullScreen);
-                setFullScreen(fullScreen);
-            }
-        });
-
         mBrowserToolbar = (BrowserToolbar) findViewById(R.id.browser_toolbar);
         mBrowserToolbar.setTouchEventInterceptor(new TouchEventInterceptor() {
             @Override
             public boolean onInterceptTouchEvent(View view, MotionEvent event) {
                 // Manually dismiss text selection bar if it's not overlaying the toolbar.
                 mTextSelection.dismiss();
                 return false;
             }
@@ -776,17 +760,16 @@ public class BrowserApp extends GeckoApp
             "Search:Keyword",
             null);
 
         EventDispatcher.getInstance().registerUiThreadListener(this,
             "GeckoView:AccessibilityEnabled",
             "Menu:Open",
             "LightweightTheme:Update",
             "Tab:Added",
-            "Video:Play",
             "CharEncoding:Data",
             "CharEncoding:State",
             "Settings:Show",
             "Updater:Launch",
             "Sanitize:Finished",
             "Sanitize:OpenTabs",
             "NotificationSettings:FeatureTipsStatusUpdated",
             null);
@@ -969,27 +952,16 @@ public class BrowserApp extends GeckoApp
             endActionMode();
             return;
         }
 
         if (hideFirstrunPager(TelemetryContract.Method.BACK)) {
             return;
         }
 
-        if (mVideoPlayer.isFullScreen()) {
-            mVideoPlayer.setFullScreen(false);
-            setFullScreen(false);
-            return;
-        }
-
-        if (mVideoPlayer.isPlaying()) {
-            mVideoPlayer.stop();
-            return;
-        }
-
         super.onBackPressed();
     }
 
     @Override
     public void onAttachedToWindow() {
         final SafeIntent intent = new SafeIntent(getIntent());
 
         if (!IntentUtils.getIsInAutomationFromEnvironment(intent)) {
@@ -1511,17 +1483,16 @@ public class BrowserApp extends GeckoApp
             "Search:Keyword",
             null);
 
         EventDispatcher.getInstance().unregisterUiThreadListener(this,
             "GeckoView:AccessibilityEnabled",
             "Menu:Open",
             "LightweightTheme:Update",
             "Tab:Added",
-            "Video:Play",
             "CharEncoding:Data",
             "CharEncoding:State",
             "Settings:Show",
             "Updater:Launch",
             "Sanitize:Finished",
             "Sanitize:OpenTabs",
             "NotificationSettings:FeatureTipsStatusUpdated",
             null);
@@ -1795,24 +1766,16 @@ public class BrowserApp extends GeckoApp
                 if (message.getBoolean("cancelEditMode")) {
                     // Set the target tab to null so it does not get selected (on editing
                     // mode exit) in lieu of the tab that we're going to open and select.
                     mTargetTabForEditingMode = null;
                     mBrowserToolbar.cancelEdit();
                 }
                 break;
 
-            case "Video:Play":
-                if (SwitchBoard.isInExperiment(this, Experiments.HLS_VIDEO_PLAYBACK)) {
-                    mVideoPlayer.start(Uri.parse(message.getString("uri")));
-                    Telemetry.sendUIEvent(TelemetryContract.Event.SHOW,
-                                          TelemetryContract.Method.CONTENT, "playhls");
-                }
-                break;
-
             case "CharEncoding:Data":
                 final GeckoBundle[] charsets = message.getBundleArray("charsets");
                 final int selected = message.getInt("selected");
 
                 final String[] titleArray = new String[charsets.length];
                 final String[] codeArray = new String[charsets.length];
                 for (int i = 0; i < charsets.length; i++) {
                     final GeckoBundle charset = charsets[i];
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/media/VideoPlayer.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-package org.mozilla.gecko.media;
-
-import android.content.Context;
-
-import android.graphics.Color;
-
-import android.net.Uri;
-
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-
-import android.widget.ImageButton;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.MediaController;
-import android.widget.VideoView;
-
-import org.mozilla.gecko.R;
-
-public class VideoPlayer extends FrameLayout {
-    private VideoView video;
-    private FullScreenMediaController controller;
-    private FullScreenListener fullScreenListener;
-
-    private boolean isFullScreen;
-
-    public VideoPlayer(Context ctx) {
-        this(ctx, null);
-    }
-
-    public VideoPlayer(Context ctx, AttributeSet attrs) {
-        this(ctx, attrs, 0);
-    }
-
-    public VideoPlayer(Context ctx, AttributeSet attrs, int defStyle) {
-        super(ctx, attrs, defStyle);
-        setFullScreen(false);
-        setVisibility(View.GONE);
-    }
-
-    public void start(Uri uri) {
-        stop();
-
-        video = new VideoView(getContext());
-        controller = new FullScreenMediaController(getContext());
-        video.setMediaController(controller);
-        controller.setAnchorView(video);
-
-        video.setVideoURI(uri);
-
-        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
-            FrameLayout.LayoutParams.MATCH_PARENT,
-            FrameLayout.LayoutParams.WRAP_CONTENT,
-            Gravity.CENTER);
-
-        addView(video, layoutParams);
-        setVisibility(View.VISIBLE);
-
-        video.setZOrderOnTop(true);
-        video.start();
-    }
-
-    public boolean isPlaying() {
-        return video != null;
-    }
-
-    public void stop() {
-        if (video == null) {
-            return;
-        }
-
-        removeAllViews();
-        setVisibility(View.GONE);
-        video.stopPlayback();
-
-        video = null;
-        controller = null;
-    }
-
-    public void setFullScreenListener(FullScreenListener listener) {
-        fullScreenListener = listener;
-    }
-
-    public boolean isFullScreen() {
-        return isFullScreen;
-    }
-
-    public void setFullScreen(boolean fullScreen) {
-        isFullScreen = fullScreen;
-        if (fullScreen) {
-            setBackgroundColor(Color.BLACK);
-        } else {
-            setBackgroundResource(R.color.dark_transparent_overlay);
-        }
-
-        if (controller != null) {
-            controller.setFullScreen(fullScreen);
-        }
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        if (event.isSystem()) {
-            return super.onKeyDown(keyCode, event);
-        }
-        return true;
-    }
-
-    @Override
-    public boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (event.isSystem()) {
-            return super.onKeyUp(keyCode, event);
-        }
-        return true;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        super.onTouchEvent(event);
-        return true;
-    }
-
-    @Override
-    public boolean onTrackballEvent(MotionEvent event) {
-        super.onTrackballEvent(event);
-        return true;
-    }
-
-    public interface FullScreenListener {
-        void onFullScreenChanged(boolean fullScreen);
-    }
-
-    private class FullScreenMediaController extends MediaController {
-        private ImageButton mButton;
-
-        public FullScreenMediaController(Context ctx) {
-            super(ctx);
-
-            mButton = new ImageButton(getContext());
-            mButton.setScaleType(ImageView.ScaleType.FIT_CENTER);
-            mButton.setBackgroundColor(Color.TRANSPARENT);
-            mButton.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    FullScreenMediaController.this.onFullScreenClicked();
-                }
-            });
-
-            updateFullScreenButton(false);
-        }
-
-        public void setFullScreen(boolean fullScreen) {
-            updateFullScreenButton(fullScreen);
-        }
-
-        private void updateFullScreenButton(boolean fullScreen) {
-            mButton.setImageResource(fullScreen ? R.drawable.exit_fullscreen : R.drawable.fullscreen);
-        }
-
-        private void onFullScreenClicked() {
-            if (VideoPlayer.this.fullScreenListener != null) {
-                boolean fullScreen = !VideoPlayer.this.isFullScreen();
-                VideoPlayer.this.fullScreenListener.onFullScreenChanged(fullScreen);
-            }
-        }
-
-        @Override
-        public void setAnchorView(final View view) {
-            super.setAnchorView(view);
-
-            // Add the fullscreen button here because this is where the parent class actually creates
-            // the media buttons and their layout.
-            //
-            // http://androidxref.com/6.0.1_r10/xref/frameworks/base/core/java/android/widget/MediaController.java#239
-            //
-            // The media buttons are in a horizontal linear layout which is itself packed into
-            // a vertical layout. The vertical layout is the only child of the FrameLayout which
-            // MediaController inherits from.
-            LinearLayout child = (LinearLayout) getChildAt(0);
-            LinearLayout buttons = (LinearLayout) child.getChildAt(0);
-
-            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
-                                                                             LayoutParams.MATCH_PARENT);
-            params.gravity = Gravity.CENTER_VERTICAL;
-
-            if (mButton.getParent() != null) {
-                ((ViewGroup)mButton.getParent()).removeView(mButton);
-            }
-
-            buttons.addView(mButton, params);
-        }
-    }
-}
\ No newline at end of file
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -4843,17 +4843,16 @@ Tab.prototype = {
 };
 
 var BrowserEventHandler = {
   init: function init() {
     BrowserApp.deck.addEventListener("touchend", this, true);
 
     BrowserApp.deck.addEventListener("DOMUpdateBlockedPopups", PopupBlockerObserver.onUpdateBlockedPopups);
     BrowserApp.deck.addEventListener("MozMouseHittest", this, true);
-    BrowserApp.deck.addEventListener("OpenMediaWithExternalApp", this, true);
 
     // ReaderViews support backPress listeners.
     WindowEventDispatcher.registerListener((event, data, callback) => {
       callback.onSuccess(Reader.onBackPress(BrowserApp.selectedTab.id));
     }, "Browser:OnBackPressed");
   },
 
   handleEvent: function(aEvent) {
@@ -4861,26 +4860,16 @@ var BrowserEventHandler = {
       case 'touchend':
         if (this._inCluster) {
           aEvent.preventDefault();
         }
         break;
       case 'MozMouseHittest':
         this._handleRetargetedTouchStart(aEvent);
         break;
-      case 'OpenMediaWithExternalApp': {
-        let mediaSrc = aEvent.target.currentSrc || aEvent.target.src;
-        let uuid = uuidgen.generateUUID().toString();
-        GlobalEventDispatcher.sendRequest({
-          type: "Video:Play",
-          uri: mediaSrc,
-          uuid: uuid
-        });
-        break;
-      }
     }
   },
 
   _handleRetargetedTouchStart: function(aEvent) {
     // we should only get this called just after a new touchstart with a single
     // touch point.
     if (!BrowserApp.isBrowserContentDocumentDisplayed() || aEvent.defaultPrevented) {
       return;