From 46907b2a6e3376e5cdca02c594a294151222f4cc Mon Sep 17 00:00:00 2001 From: Marcel Dopita Date: Sun, 29 Nov 2020 20:10:45 +0100 Subject: [PATCH] Add resize action --- .../com/brouken/player/PlayerActivity.java | 27 +++++++ .../main/java/com/brouken/player/Prefs.java | 13 ++++ .../main/java/com/brouken/player/Utils.java | 6 ++ .../drawable/ic_baseline_aspect_ratio_24.xml | 5 ++ .../res/layout/exo_styled_player_view.xml | 73 +++++++++++++++++++ 5 files changed, 124 insertions(+) create mode 100644 app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml create mode 100644 app/src/main/res/layout/exo_styled_player_view.xml diff --git a/app/src/main/java/com/brouken/player/PlayerActivity.java b/app/src/main/java/com/brouken/player/PlayerActivity.java index cad72b43..560e52e4 100644 --- a/app/src/main/java/com/brouken/player/PlayerActivity.java +++ b/app/src/main/java/com/brouken/player/PlayerActivity.java @@ -50,6 +50,7 @@ import com.google.android.exoplayer2.text.CaptionStyleCompat; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.MappingTrackSelector; +import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; import com.google.android.exoplayer2.ui.DefaultTimeBar; import com.google.android.exoplayer2.ui.StyledPlayerControlView; import com.google.android.exoplayer2.util.MimeTypes; @@ -80,6 +81,7 @@ public class PlayerActivity extends Activity { private TextView titleView; private ImageButton buttonPiP; + private ImageButton buttonAspectRatio; private boolean restoreOrientationLock; private boolean restorePlayState; @@ -203,6 +205,26 @@ public void onClick(View view) { Utils.setButtonEnabled(this, buttonPiP, false); } + buttonAspectRatio = new ImageButton(this, null, 0, R.style.ExoStyledControls_Button_Bottom); + buttonAspectRatio.setImageResource(R.drawable.ic_baseline_aspect_ratio_24); + controls.addView(buttonAspectRatio, 5); + buttonAspectRatio.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (playerView.getResizeMode() == AspectRatioFrameLayout.RESIZE_MODE_FIT) { + playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM); + Utils.showText(playerView, "Crop"); + } else { + // Default mode + playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT); + Utils.showText(playerView, "Fit"); + } + // Keep controller UI visible - alternative to resetHideCallbacks() + playerView.setControllerShowTimeoutMs(PlayerActivity.CONTROLLER_TIMEOUT); + } + }); + Utils.setButtonEnabled(this, buttonAspectRatio, false); + int padding = getResources().getDimensionPixelOffset(R.dimen.exo_time_view_padding); FrameLayout centerView = playerView.findViewById(R.id.exo_center_view); titleView = new TextView(this); @@ -398,6 +420,8 @@ public void onClick(DialogInterface dialogInterface, int i) { if (haveMedia) { playerView.setControllerShowTimeoutMs(CONTROLLER_TIMEOUT); + playerView.setResizeMode(mPrefs.resizeMode); + MediaItem.Builder mediaItemBuilder = new MediaItem.Builder() .setUri(mPrefs.mediaUri) .setMimeType(mPrefs.mediaType); @@ -426,6 +450,8 @@ public void onClick(DialogInterface dialogInterface, int i) { if (buttonPiP != null) Utils.setButtonEnabled(this, buttonPiP, true); + Utils.setButtonEnabled(this, buttonAspectRatio, true); + player.setHandleAudioBecomingNoisy(true); mediaSession.setActive(true); } else { @@ -451,6 +477,7 @@ private void releasePlayer() { mPrefs.updateBrightness(mBrightnessControl.currentBrightnessLevel); mPrefs.updateSubtitleTrack(getSelectedTrack(C.TRACK_TYPE_TEXT)); mPrefs.updateAudioTrack(getSelectedTrack(C.TRACK_TYPE_AUDIO)); + mPrefs.updateResizeMode(playerView.getResizeMode()); if (player.isPlaying()) { restorePlayState = true; diff --git a/app/src/main/java/com/brouken/player/Prefs.java b/app/src/main/java/com/brouken/player/Prefs.java index 03f035ea..30dd142f 100644 --- a/app/src/main/java/com/brouken/player/Prefs.java +++ b/app/src/main/java/com/brouken/player/Prefs.java @@ -5,6 +5,8 @@ import android.net.Uri; import android.preference.PreferenceManager; +import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; + import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; @@ -20,6 +22,7 @@ class Prefs { private static final String PREF_KEY_SUBTITLE_URI = "subtitleUri"; private static final String PREF_KEY_AUDIO_TRACK = "audioTrack"; private static final String PREF_KEY_SUBTITLE_TRACK = "subtitleTrack"; + private static final String PREF_KEY_RESIZE_MODE = "resizeMode"; Context mContext; SharedPreferences mSharedPreferences; @@ -27,6 +30,7 @@ class Prefs { public Uri mediaUri; public Uri subtitleUri; public String mediaType; + public int resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT; public int subtitleTrack = -1; public int audioTrack = -1; @@ -56,6 +60,8 @@ private void loadSavedPreferences() { audioTrack = mSharedPreferences.getInt(PREF_KEY_AUDIO_TRACK, audioTrack); if (mSharedPreferences.contains(PREF_KEY_SUBTITLE_TRACK)) subtitleTrack = mSharedPreferences.getInt(PREF_KEY_SUBTITLE_TRACK, subtitleTrack); + if (mSharedPreferences.contains(PREF_KEY_RESIZE_MODE)) + resizeMode = mSharedPreferences.getInt(PREF_KEY_RESIZE_MODE, resizeMode); } public void updateMedia(final Uri uri, final String type) { @@ -64,6 +70,7 @@ public void updateMedia(final Uri uri, final String type) { updateSubtitle(null); updateAudioTrack(-1); updateSubtitleTrack(-1); + updateResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT); final SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit(); if (uri == null) @@ -166,4 +173,10 @@ public void updateSubtitleTrack(final int track) { sharedPreferencesEditor.commit(); } + public void updateResizeMode(final int mode) { + this.resizeMode = mode; + final SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit(); + sharedPreferencesEditor.putInt(PREF_KEY_RESIZE_MODE, resizeMode); + sharedPreferencesEditor.commit(); + } } diff --git a/app/src/main/java/com/brouken/player/Utils.java b/app/src/main/java/com/brouken/player/Utils.java index ef94226b..94294d87 100644 --- a/app/src/main/java/com/brouken/player/Utils.java +++ b/app/src/main/java/com/brouken/player/Utils.java @@ -136,4 +136,10 @@ public static void setButtonEnabled(final Context context, final ImageButton but (float) context.getResources().getInteger(R.integer.exo_media_button_opacity_percentage_disabled) / 100 ); } + + public static void showText(final CustomStyledPlayerView playerView, final String text) { + playerView.removeCallbacks(playerView.textClearRunnable); + playerView.setCustomErrorMessage(text); + playerView.postDelayed(playerView.textClearRunnable, 1200); + } } diff --git a/app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml b/app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml new file mode 100644 index 00000000..c7b8b5f5 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_aspect_ratio_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/exo_styled_player_view.xml b/app/src/main/res/layout/exo_styled_player_view.xml new file mode 100644 index 00000000..b490ff04 --- /dev/null +++ b/app/src/main/res/layout/exo_styled_player_view.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +