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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+