diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewVideoActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewVideoActivity.java index b09b66a2..3f61ed7a 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewVideoActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewVideoActivity.java @@ -613,7 +613,7 @@ public class ViewVideoActivity extends AppCompatActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.view_video, menu); + getMenuInflater().inflate(R.menu.view_video_activity, menu); return true; } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/PlaybackSpeedBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/PlaybackSpeedBottomSheetFragment.java index 47d50a4e..8957b56b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/PlaybackSpeedBottomSheetFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/PlaybackSpeedBottomSheetFragment.java @@ -1,5 +1,6 @@ package ml.docilealligator.infinityforreddit.bottomsheetfragments; +import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; @@ -8,12 +9,15 @@ import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; import butterknife.BindView; import butterknife.ButterKnife; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.activities.ViewVideoActivity; import ml.docilealligator.infinityforreddit.customviews.LandscapeExpandedRoundedBottomSheetDialogFragment; +import ml.docilealligator.infinityforreddit.fragments.ViewImgurVideoFragment; +import ml.docilealligator.infinityforreddit.fragments.ViewRedditGalleryVideoFragment; public class PlaybackSpeedBottomSheetFragment extends LandscapeExpandedRoundedBottomSheetDialogFragment { @@ -35,7 +39,7 @@ public class PlaybackSpeedBottomSheetFragment extends LandscapeExpandedRoundedBo TextView playbackSpeed175TextView; @BindView(R.id.playback_speed_200_text_view_playback_speed_bottom_sheet_fragment) TextView playbackSpeed200TextView; - private ViewVideoActivity viewVideoActivity; + private Activity activity; public PlaybackSpeedBottomSheetFragment() { // Required empty public constructor @@ -77,50 +81,63 @@ public class PlaybackSpeedBottomSheetFragment extends LandscapeExpandedRoundedBo } playbackSpeed025TextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_25); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_25); dismiss(); }); playbackSpeed050TextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_50); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_50); dismiss(); }); playbackSpeed075TextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_75); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_75); dismiss(); }); playbackSpeedNormalTextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_NORMAL); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_NORMAL); dismiss(); }); playbackSpeed125TextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_125); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_125); dismiss(); }); playbackSpeed150TextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_150); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_150); dismiss(); }); playbackSpeed175TextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_175); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_175); dismiss(); }); playbackSpeed200TextView.setOnClickListener(view -> { - viewVideoActivity.setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_200); + setPlaybackSpeed(ViewVideoActivity.PLAYBACK_SPEED_200); dismiss(); }); return rootView; } + private void setPlaybackSpeed(int playbackSpeed) { + if (activity instanceof ViewVideoActivity) { + ((ViewVideoActivity) activity).setPlaybackSpeed(playbackSpeed); + } else { + Fragment parentFragment = getParentFragment(); + if (parentFragment instanceof ViewImgurVideoFragment) { + ((ViewImgurVideoFragment) parentFragment).setPlaybackSpeed(playbackSpeed); + } else if (parentFragment instanceof ViewRedditGalleryVideoFragment) { + ((ViewRedditGalleryVideoFragment) parentFragment).setPlaybackSpeed(playbackSpeed); + } + } + } + @Override public void onAttach(@NonNull Context context) { super.onAttach(context); - viewVideoActivity = (ViewVideoActivity) context; + activity = (Activity) context; } } \ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewImgurVideoFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewImgurVideoFragment.java index 99a950e3..fcce3d4d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewImgurVideoFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewImgurVideoFragment.java @@ -27,6 +27,7 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.google.android.exoplayer2.ExoPlayerFactory; +import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.source.ProgressiveMediaSource; @@ -51,17 +52,19 @@ import ml.docilealligator.infinityforreddit.ImgurMedia; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.activities.ViewImgurMediaActivity; +import ml.docilealligator.infinityforreddit.bottomsheetfragments.PlaybackSpeedBottomSheetFragment; import ml.docilealligator.infinityforreddit.services.DownloadMediaService; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; public class ViewImgurVideoFragment extends Fragment { public static final String EXTRA_IMGUR_VIDEO = "EIV"; - private static final String IS_MUTE_STATE = "IMS"; - private static final String POSITION_STATE = "PS"; public static final String EXTRA_INDEX = "EI"; public static final String EXTRA_MEDIA_COUNT = "EMC"; private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0; + private static final String IS_MUTE_STATE = "IMS"; + private static final String POSITION_STATE = "PS"; + private static final String PLAYBACK_SPEED_STATE = "PSS"; @BindView(R.id.player_view_view_imgur_video_fragment) PlayerView videoPlayerView; @BindView(R.id.mute_exo_playback_control_view) @@ -79,6 +82,7 @@ public class ViewImgurVideoFragment extends Fragment { private boolean wasPlaying = false; private boolean isMute = false; private boolean isDownloading = false; + private int playbackSpeed = 100; @Inject @Named("default") SharedPreferences mSharedPreferences; @@ -145,6 +149,11 @@ public class ViewImgurVideoFragment extends Fragment { dataSourceFactory = new DefaultDataSourceFactory(activity, Util.getUserAgent(activity, "Infinity")); player.prepare(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(imgurMedia.getLink()))); + + if (savedInstanceState != null) { + playbackSpeed = savedInstanceState.getInt(PLAYBACK_SPEED_STATE); + } + setPlaybackSpeed(playbackSpeed); preparePlayer(savedInstanceState); if (activity.isUseBottomAppBar()) { @@ -175,10 +184,22 @@ public class ViewImgurVideoFragment extends Fragment { isDownloading = true; requestPermissionAndDownload(); return true; + } else if (item.getItemId() == R.id.action_playback_speed_view_imgur_video_fragment) { + PlaybackSpeedBottomSheetFragment playbackSpeedBottomSheetFragment = new PlaybackSpeedBottomSheetFragment(); + Bundle bundle = new Bundle(); + bundle.putInt(PlaybackSpeedBottomSheetFragment.EXTRA_PLAYBACK_SPEED, playbackSpeed); + playbackSpeedBottomSheetFragment.setArguments(bundle); + playbackSpeedBottomSheetFragment.show(getChildFragmentManager(), playbackSpeedBottomSheetFragment.getTag()); + return true; } return false; } + public void setPlaybackSpeed(int speed100X) { + this.playbackSpeed = speed100X; + player.setPlaybackParameters(new PlaybackParameters((float) (speed100X / 100.0))); + } + private void requestPermissionAndDownload() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { if (ContextCompat.checkSelfPermission(activity, @@ -301,6 +322,7 @@ public class ViewImgurVideoFragment extends Fragment { super.onSaveInstanceState(outState); outState.putBoolean(IS_MUTE_STATE, isMute); outState.putLong(POSITION_STATE, player.getCurrentPosition()); + outState.putInt(PLAYBACK_SPEED_STATE, playbackSpeed); } @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryVideoFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryVideoFragment.java index 7b1867c8..ff17bd82 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryVideoFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryVideoFragment.java @@ -27,6 +27,7 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.google.android.exoplayer2.ExoPlayerFactory; +import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.source.ProgressiveMediaSource; @@ -50,6 +51,7 @@ import butterknife.ButterKnife; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity; +import ml.docilealligator.infinityforreddit.bottomsheetfragments.PlaybackSpeedBottomSheetFragment; import ml.docilealligator.infinityforreddit.post.Post; import ml.docilealligator.infinityforreddit.services.DownloadMediaService; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; @@ -58,11 +60,12 @@ public class ViewRedditGalleryVideoFragment extends Fragment { public static final String EXTRA_REDDIT_GALLERY_VIDEO = "EIV"; public static final String EXTRA_SUBREDDIT_NAME = "ESN"; - private static final String IS_MUTE_STATE = "IMS"; - private static final String POSITION_STATE = "PS"; public static final String EXTRA_INDEX = "EI"; public static final String EXTRA_MEDIA_COUNT = "EMC"; private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0; + private static final String IS_MUTE_STATE = "IMS"; + private static final String POSITION_STATE = "PS"; + private static final String PLAYBACK_SPEED_STATE = "PSS"; @BindView(R.id.player_view_view_reddit_gallery_video_fragment) PlayerView videoPlayerView; @BindView(R.id.mute_exo_playback_control_view) @@ -81,6 +84,7 @@ public class ViewRedditGalleryVideoFragment extends Fragment { private boolean wasPlaying = false; private boolean isMute = false; private boolean isDownloading = false; + private int playbackSpeed = 100; @Inject @Named("default") SharedPreferences mSharedPreferences; @@ -148,6 +152,11 @@ public class ViewRedditGalleryVideoFragment extends Fragment { dataSourceFactory = new DefaultDataSourceFactory(activity, Util.getUserAgent(activity, "Infinity")); player.prepare(new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(galleryVideo.url))); + + if (savedInstanceState != null) { + playbackSpeed = savedInstanceState.getInt(PLAYBACK_SPEED_STATE); + } + setPlaybackSpeed(playbackSpeed); preparePlayer(savedInstanceState); if (activity.isUseBottomAppBar()) { @@ -178,10 +187,22 @@ public class ViewRedditGalleryVideoFragment extends Fragment { isDownloading = true; requestPermissionAndDownload(); return true; + } else if (item.getItemId() == R.id.action_playback_speed_view_reddit_gallery_video_fragment) { + PlaybackSpeedBottomSheetFragment playbackSpeedBottomSheetFragment = new PlaybackSpeedBottomSheetFragment(); + Bundle bundle = new Bundle(); + bundle.putInt(PlaybackSpeedBottomSheetFragment.EXTRA_PLAYBACK_SPEED, playbackSpeed); + playbackSpeedBottomSheetFragment.setArguments(bundle); + playbackSpeedBottomSheetFragment.show(getChildFragmentManager(), playbackSpeedBottomSheetFragment.getTag()); + return true; } return false; } + public void setPlaybackSpeed(int speed100X) { + this.playbackSpeed = speed100X; + player.setPlaybackParameters(new PlaybackParameters((float) (speed100X / 100.0))); + } + private void requestPermissionAndDownload() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { if (ContextCompat.checkSelfPermission(activity, @@ -305,6 +326,7 @@ public class ViewRedditGalleryVideoFragment extends Fragment { super.onSaveInstanceState(outState); outState.putBoolean(IS_MUTE_STATE, isMute); outState.putLong(POSITION_STATE, player.getCurrentPosition()); + outState.putInt(PLAYBACK_SPEED_STATE, playbackSpeed); } @Override diff --git a/app/src/main/res/drawable/ic_notification.xml b/app/src/main/res/drawable/ic_notification.xml index 50344c41..1b6dfc8d 100644 --- a/app/src/main/res/drawable/ic_notification.xml +++ b/app/src/main/res/drawable/ic_notification.xml @@ -1,19 +1,19 @@ - - + - - - - - - + + + + + + diff --git a/app/src/main/res/menu/view_imgur_video_fragment.xml b/app/src/main/res/menu/view_imgur_video_fragment.xml index 8a671463..80cd8b8d 100644 --- a/app/src/main/res/menu/view_imgur_video_fragment.xml +++ b/app/src/main/res/menu/view_imgur_video_fragment.xml @@ -7,4 +7,11 @@ android:title="@string/action_download" android:icon="@drawable/ic_file_download_toolbar_white_24dp" app:showAsAction="ifRoom" /> + + \ No newline at end of file diff --git a/app/src/main/res/menu/view_reddit_gallery_video_fragment.xml b/app/src/main/res/menu/view_reddit_gallery_video_fragment.xml index 061ab71e..8297b63f 100644 --- a/app/src/main/res/menu/view_reddit_gallery_video_fragment.xml +++ b/app/src/main/res/menu/view_reddit_gallery_video_fragment.xml @@ -7,4 +7,11 @@ android:title="@string/action_download" android:icon="@drawable/ic_file_download_toolbar_white_24dp" app:showAsAction="ifRoom" /> + + \ No newline at end of file diff --git a/app/src/main/res/menu/view_video.xml b/app/src/main/res/menu/view_video_activity.xml similarity index 100% rename from app/src/main/res/menu/view_video.xml rename to app/src/main/res/menu/view_video_activity.xml