Add an option to ignore nav bar in ViewVideoActivity and ViewImgurVideoFragment. Use Hauler to do drag up or down to finish Activity in ViewVideoActivity and ViewImgurMediaActivity.

This commit is contained in:
Alex Ning 2020-07-15 11:51:29 +08:00
parent a9ba807cf4
commit 2d69170f4f
13 changed files with 160 additions and 72 deletions

View File

@ -93,6 +93,7 @@ dependencies {
implementation 'com.atlassian.commonmark:commonmark:0.13.1'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'me.zhanghai.android.fastscroll:library:1.1.2'
implementation "com.thefuntasty.hauler:core:3.1.0"
// androidX startup for auto-init
implementation "androidx.startup:startup-runtime:1.0.0-alpha01"
//crashy

View File

@ -43,7 +43,7 @@
android:name=".Activity.ViewImgurMediaActivity"
android:configChanges="orientation|screenSize|layoutDirection"
android:parentActivityName=".Activity.MainActivity"
android:theme="@style/AppTheme.SlidableWithActionBar" />
android:theme="@style/AppTheme.Draggable" />
<activity
android:name=".Activity.ReportActivity"
android:label="@string/report_activity_label"
@ -299,7 +299,7 @@
android:name=".Activity.ViewVideoActivity"
android:configChanges="orientation|screenSize|layoutDirection"
android:parentActivityName=".Activity.MainActivity"
android:theme="@style/AppTheme.SlidableWithActionBar" />
android:theme="@style/AppTheme.Draggable" />
<activity
android:name=".Activity.ViewPostDetailActivity"
android:parentActivityName=".Activity.MainActivity"

View File

@ -20,9 +20,8 @@ import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.r0adkll.slidr.Slidr;
import com.r0adkll.slidr.model.SlidrConfig;
import com.r0adkll.slidr.model.SlidrPosition;
import com.thefuntasty.hauler.DragDirection;
import com.thefuntasty.hauler.HaulerView;
import org.json.JSONArray;
import org.json.JSONException;
@ -66,6 +65,8 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
public static final int IMGUR_TYPE_IMAGE = 2;
private static final String IMGUR_IMAGES_STATE = "IIS";
@BindView(R.id.hauler_view_view_imgur_media_activity)
HaulerView haulerView;
@BindView(R.id.progress_bar_view_imgur_media_activity)
ProgressBar progressBar;
@BindView(R.id.view_pager_view_imgur_media_activity)
@ -128,7 +129,11 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
images = savedInstanceState.getParcelableArrayList(IMGUR_IMAGES_STATE);
}
Slidr.attach(this, new SlidrConfig.Builder().position(SlidrPosition.VERTICAL).build());
haulerView.setOnDragDismissedListener(dragDirection -> {
int slide = dragDirection == DragDirection.UP ? R.anim.slide_out_up : R.anim.slide_out_down;
finish();
overridePendingTransition(0, slide);
});
if (images == null) {
fetchImgurMedia(imgurId);

View File

@ -46,9 +46,8 @@ import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.util.Util;
import com.google.android.material.snackbar.Snackbar;
import com.r0adkll.slidr.Slidr;
import com.r0adkll.slidr.model.SlidrConfig;
import com.r0adkll.slidr.model.SlidrPosition;
import com.thefuntasty.hauler.DragDirection;
import com.thefuntasty.hauler.HaulerView;
import javax.inject.Inject;
import javax.inject.Named;
@ -85,6 +84,8 @@ public class ViewVideoActivity extends AppCompatActivity {
private static final String IS_MUTE_STATE = "IMS";
private static final String VIDEO_DOWNLOAD_URL_STATE = "VDUS";
private static final String VIDEO_URI_STATE = "VUS";
@BindView(R.id.hauler_view_view_video_activity)
HaulerView haulerView;
@BindView(R.id.coordinator_layout_view_video_activity)
CoordinatorLayout coordinatorLayout;
@BindView(R.id.progress_bar_view_video_activity)
@ -150,6 +151,7 @@ public class ViewVideoActivity extends AppCompatActivity {
actionBar.setHomeAsUpIndicator(upArrow);
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.transparentActionBarAndExoPlayerControllerColor)));
if (!mSharedPreferences.getBoolean(SharedPreferencesUtils.VIDEO_PLAYER_IGNORE_NAV_BAR, false)) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || getResources().getBoolean(R.bool.isTablet)) {
//Set player controller bottom margin in order to display it above the navbar
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
@ -163,8 +165,13 @@ public class ViewVideoActivity extends AppCompatActivity {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) controllerLinearLayout.getLayoutParams();
params.rightMargin = getResources().getDimensionPixelSize(resourceId);
}
}
Slidr.attach(this, new SlidrConfig.Builder().position(SlidrPosition.VERTICAL).build());
haulerView.setOnDragDismissedListener(dragDirection -> {
int slide = dragDirection == DragDirection.UP ? R.anim.slide_out_up : R.anim.slide_out_down;
finish();
overridePendingTransition(0, slide);
});
mediaDownloader = new MediaDownloaderImpl();

View File

@ -97,6 +97,7 @@ public class ViewImgurVideoFragment extends Fragment {
imgurMedia = getArguments().getParcelable(EXTRA_IMGUR_VIDEO);
if (!mSharedPreferences.getBoolean(SharedPreferencesUtils.VIDEO_PLAYER_IGNORE_NAV_BAR, false)) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT || getResources().getBoolean(R.bool.isTablet)) {
//Set player controller bottom margin in order to display it above the navbar
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
@ -110,6 +111,7 @@ public class ViewImgurVideoFragment extends Fragment {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) controllerLinearLayout.getLayoutParams();
params.rightMargin = getResources().getDimensionPixelSize(resourceId);
}
}
videoPlayerView.setControllerVisibilityListener(visibility -> {
switch (visibility) {

View File

@ -131,4 +131,5 @@ public class SharedPreferencesUtils {
public static final String START_AUTOPLAY_VISIBLE_AREA_OFFSET_PORTRAIT = "start_autoplay_visible_area_offset_portrait";
public static final String START_AUTOPLAY_VISIBLE_AREA_OFFSET_LANDSCAPE = "start_autoplay_visible_area_offset_landscape";
public static final String MUTE_NSFW_VIDEO = "mute_nsfw_video";
public static final String VIDEO_PLAYER_IGNORE_NAV_BAR = "video_player_ignore_nav_bar";
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0"
android:toYDelta="+50%p" />
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0"
android:toYDelta="-50%p" />
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>

View File

@ -1,11 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<com.thefuntasty.hauler.HaulerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/hauler_view_view_imgur_media_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:dragUpEnabled="true"
tools:context=".Activity.ViewImgurMediaActivity">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/progress_bar_view_imgur_media_activity"
android:layout_width="wrap_content"
@ -37,3 +48,7 @@
</LinearLayout>
</RelativeLayout>
</androidx.core.widget.NestedScrollView>
</com.thefuntasty.hauler.HaulerView>

View File

@ -1,14 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
<com.thefuntasty.hauler.HaulerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/hauler_view_view_video_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
android:id="@+id/coordinator_layout_view_video_activity"
app:dragUpEnabled="true"
tools:application="ml.docilealligator.infinityforreddit.Activity.ViewVideoActivity">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinator_layout_view_video_activity"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/player_view_view_video_activity"
android:layout_width="match_parent"
@ -23,3 +34,7 @@
android:visibility="gone" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.core.widget.NestedScrollView>
</com.thefuntasty.hauler.HaulerView>

View File

@ -365,6 +365,8 @@
<string name="settings_mute_video_title">Mute Videos</string>
<string name="settings_mute_nsfw_video_title">Mute NSFW Videos</string>
<string name="settings_automatically_try_redgifs_title">Automatically Try Accessing Redgifs if Videos on Gfycat are Removed.</string>
<string name="settings_video_player_ignore_nav_bar_title">Ignore Navigation Bar in Video Player</string>
<string name="settings_video_player_ignore_nav_bar_summary">Prevent the Video Controller Having Extra Margin</string>
<string name="settings_confirm_to_exit">Confirm to Exit</string>
<string name="settings_show_top_level_comments_first_title">Show Top-level Comments First</string>
<string name="settings_show_comment_divider_title">Show Comment Divider</string>

View File

@ -47,6 +47,16 @@
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="AppTheme.Draggable" parent="AppTheme">
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">false</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowBackground">@android:color/black</item>
<item name="android:fontFamily">?attr/font_family</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.DayNight.ActionBar">
<item name="android:fontFamily">?attr/font_family</item>
</style>

View File

@ -19,6 +19,12 @@
app:key="automatically_try_redgifs"
app:title="@string/settings_automatically_try_redgifs_title" />
<SwitchPreference
app:defaultValue="false"
app:key="video_player_ignore_nav_bar"
app:title="@string/settings_video_player_ignore_nav_bar_title"
app:summary="@string/settings_video_player_ignore_nav_bar_summary" />
<PreferenceCategory
app:title="@string/settings_video_autoplay_title" />