Browse Source

Better fullscreen toggle

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 3 years ago
parent
commit
09a02767bc

+ 23 - 11
src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.java

@@ -29,6 +29,7 @@ import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.Color;
 import android.media.MediaMetadataRetriever;
 import android.net.Uri;
 import android.os.AsyncTask;
@@ -41,10 +42,11 @@ import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnTouchListener;
 import android.view.ViewGroup;
+import android.widget.ImageView;
 import android.widget.LinearLayout;
 
+import com.google.android.exoplayer2.ExoPlayer;
 import com.google.android.exoplayer2.MediaItem;
-import com.google.android.exoplayer2.SimpleExoPlayer;
 import com.google.android.exoplayer2.ui.StyledPlayerControlView;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
@@ -73,6 +75,7 @@ import javax.inject.Inject;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.StringRes;
+import androidx.appcompat.widget.AppCompatImageButton;
 import androidx.drawerlayout.widget.DrawerLayout;
 
 /**
@@ -94,7 +97,6 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
     private static final String EXTRA_PLAY_POSITION = "PLAY_POSITION";
     private static final String EXTRA_PLAYING = "PLAYING";
     private static final double MIN_DENSITY_RATIO = 24.0;
-    private static final int MENU_FULLSCREEN_ID = 3344;
 
     private static final String FILE = "FILE";
     private static final String USER = "USER";
@@ -113,7 +115,7 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
     @Inject UserAccountManager accountManager;
     FragmentPreviewMediaBinding binding;
     LinearLayout emptyListView;
-    private SimpleExoPlayer exoPlayer;
+    private ExoPlayer exoPlayer;
 
     /**
      * Creates a fragment to preview a file.
@@ -297,9 +299,26 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
             // bind to any existing player
             mediaPlayerServiceConnection.bind();
 
-            exoPlayer = new SimpleExoPlayer.Builder(getContext()).build();
+            exoPlayer = new ExoPlayer.Builder(requireContext()).build();
             binding.exoplayerView.setPlayer(exoPlayer);
 
+            LinearLayout linearLayout = binding.exoplayerView.findViewById(R.id.exo_center_controls);
+
+            if (linearLayout.getChildCount() == 5) {
+                AppCompatImageButton fullScreenButton = new AppCompatImageButton(requireContext());
+                fullScreenButton.setImageResource(R.drawable.exo_styled_controls_fullscreen_exit);
+                fullScreenButton.setLayoutParams(new LinearLayout.LayoutParams(143, 143));
+                fullScreenButton.setScaleType(ImageView.ScaleType.FIT_CENTER);
+                fullScreenButton.setBackgroundColor(Color.TRANSPARENT);
+
+                fullScreenButton.setOnClickListener(l -> {
+                    startFullScreenVideo();
+                });
+
+                linearLayout.addView(fullScreenButton);
+                linearLayout.invalidate();
+            }
+
             if (MimeTypeUtil.isAudio(file)) {
                 binding.mediaController.setMediaPlayer(mediaPlayerServiceConnection);
                 binding.mediaController.setVisibility(View.VISIBLE);
@@ -324,10 +343,6 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
     public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
         menu.removeItem(R.id.action_search);
-        OCFile file = getFile();
-        if (file != null && MimeTypeUtil.isImageOrVideo(file)) {
-            menu.add(Menu.NONE, MENU_FULLSCREEN_ID, 99, R.string.fullscreen);
-        }
         inflater.inflate(R.menu.item_file, menu);
     }
 
@@ -422,9 +437,6 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
             return true;
         } else if (itemId == R.id.action_stream_media) {
             containerActivity.getFileOperationsHelper().streamMediaFile(getFile());
-        } else if (itemId == MENU_FULLSCREEN_ID) {
-            startFullScreenVideo();
-            return true;
         }
         return super.onOptionsItemSelected(item);
     }

+ 2 - 0
src/main/java/com/owncloud/android/ui/preview/PreviewVideoActivity.java

@@ -90,6 +90,8 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi
         exoPlayer = new SimpleExoPlayer.Builder(this).build();
         playerView.setPlayer(exoPlayer);
 
+        findViewById(R.id.exo_exit_fs).setOnClickListener(v -> finish());
+
         if (mSavedPlaybackPosition >= 0) {
             exoPlayer.seekTo(mSavedPlaybackPosition);
         }

+ 107 - 0
src/main/res/layout/exo_player_control_view.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="bottom"
+    android:layoutDirection="ltr"
+    android:background="#CC000000"
+    android:orientation="vertical"
+    tools:targetApi="28">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:paddingTop="4dp"
+        android:orientation="horizontal">
+
+        <ImageButton
+            android:id="@id/exo_prev"
+            style="@style/ExoMediaButton.Previous" />
+
+        <ImageButton
+            android:id="@id/exo_rew"
+            style="@style/ExoMediaButton.Rewind" />
+
+        <ImageButton
+            android:id="@id/exo_shuffle"
+            style="@style/ExoMediaButton" />
+
+        <ImageButton
+            android:id="@id/exo_repeat_toggle"
+            style="@style/ExoMediaButton" />
+
+        <ImageButton
+            android:id="@id/exo_play"
+            style="@style/ExoMediaButton.Play" />
+
+        <ImageButton
+            android:id="@id/exo_pause"
+            style="@style/ExoMediaButton.Pause" />
+
+        <ImageButton
+            android:id="@id/exo_ffwd"
+            style="@style/ExoMediaButton.FastForward" />
+
+        <ImageButton
+            android:id="@id/exo_vr"
+            style="@style/ExoMediaButton.VR" />
+
+        <ImageButton
+            android:id="@+id/exo_exit_fs"
+            style="@style/ExoMediaButton.ExitFullscreen" />
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="4dp"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@id/exo_position"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="14sp"
+            android:textStyle="bold"
+            android:paddingLeft="4dp"
+            android:paddingRight="4dp"
+            android:includeFontPadding="false"
+            android:textColor="#FFBEBEBE" />
+
+        <View
+            android:id="@id/exo_progress_placeholder"
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:layout_height="26dp" />
+
+        <TextView
+            android:id="@id/exo_duration"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="14sp"
+            android:textStyle="bold"
+            android:paddingLeft="4dp"
+            android:paddingRight="4dp"
+            android:includeFontPadding="false"
+            android:textColor="#FFBEBEBE" />
+
+    </LinearLayout>
+
+</LinearLayout>

+ 3 - 1
src/main/res/layout/video_layout.xml

@@ -19,8 +19,10 @@
   along with this program. If not, see <https://www.gnu.org/licenses/>.
 -->
 <com.google.android.exoplayer2.ui.StyledPlayerView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/videoPlayer"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_gravity="center"
-    android:background="@color/black" />
+    android:background="@color/black"
+    app:controller_layout_id="@layout/exo_player_control_view" />

+ 7 - 1
src/main/res/values/styles.xml

@@ -428,4 +428,10 @@
         <item name="android:typeface">sans</item>
         <item name="android:textStyle">bold</item>
     </style>
-</resources>
+
+    <style name="ExoMediaButton.ExitFullscreen" parent="ExoStyledControls.Button.Center">
+        <item name="android:src">@drawable/exo_styled_controls_fullscreen_exit</item>
+        <item name="android:contentDescription">@string/exo_controls_fullscreen_exit_description</item>
+        <item name="android:padding">@dimen/exo_icon_padding</item>
+    </style>
+</resources>