diff options
author | Thomas <tschneider.ac@gmail.com> | 2023-03-20 10:43:21 +0100 |
---|---|---|
committer | Thomas <tschneider.ac@gmail.com> | 2023-03-20 10:43:21 +0100 |
commit | 47b767e8ce59797fb8a73298fdc9a7aebdede058 (patch) | |
tree | 9965077d9cff0ef82ffbd9852149460f9a5bd4f4 | |
parent | 9fd701b10274e501284c5f922f9eb6a33b17eb26 (diff) |
Add settings
-rw-r--r-- | app/src/main/AndroidManifest.xml | 2 | ||||
-rw-r--r-- | app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java | 162 |
2 files changed, 118 insertions, 46 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3fc5baffb..1b8f4706a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -389,7 +389,7 @@ android:configChanges="keyboardHidden|orientation|screenSize" /> <activity android:name=".peertube.activities.PeertubeActivity" - android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" + android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout" android:launchMode="singleTask" android:resizeableActivity="true" android:supportsPictureInPicture="true" diff --git a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java index 80397d82a..a47c62ba5 100644 --- a/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java +++ b/app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java @@ -19,6 +19,7 @@ import static app.fedilab.android.BaseMainActivity.currentAccount; import static app.fedilab.android.BaseMainActivity.currentInstance; import static app.fedilab.android.BaseMainActivity.currentToken; import static app.fedilab.android.mastodon.helper.Helper.PREF_USER_TOKEN; +import static app.fedilab.android.mastodon.helper.Helper.TAG; import static app.fedilab.android.peertube.activities.PeertubeMainActivity.typeOfConnection; import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.ADD_COMMENT; import static app.fedilab.android.peertube.client.RetrofitPeertubeAPI.ActionType.RATEVIDEO; @@ -59,6 +60,7 @@ import android.text.TextPaint; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.util.DisplayMetrics; +import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.MotionEvent; @@ -78,6 +80,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.LinearLayoutCompat; import androidx.appcompat.widget.PopupMenu; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.app.ActivityCompat; @@ -124,7 +127,6 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -205,7 +207,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis private boolean willPlayFromIntent; private boolean isShowingTrackSelectionDialog; private Status status; - + private int flags; public static void hideKeyboard(Activity activity) { if (activity != null && activity.getWindow() != null) { activity.getWindow().getDecorView(); @@ -216,16 +218,23 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis } } + private boolean humanInteraction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityPeertubeBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); + //Store current flags + flags = getWindow().getDecorView().getSystemUiVisibility(); + //Define a default video orientation - Real value will be fetched with a listener videoOrientationType = videoOrientation.LANDSCAPE; + //pagination for comments - Default value set to zero max_id = "0"; SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(PeertubeActivity.this); String token = sharedpreferences.getString(PREF_USER_TOKEN, null); + + //Load user details for displaying the avatar if (Helper.canMakeAction() && !sepiaSearch) { BaseAccount account = null; try { @@ -239,12 +248,16 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis app.fedilab.android.mastodon.helper.Helper.loadPP(PeertubeActivity.this, binding.myPp, account); } } + //When using sepia search / video can be checked remotely (ie: a different instance) isRemote = false; - + //Default fullscreen value fullScreenMode = false; + //Get initial orientation when checking the video initialOrientation = getResources().getConfiguration().orientation; + + //Change the dimension depending of the device if (Helper.isTablet(PeertubeActivity.this)) { - LinearLayout.LayoutParams param = new LinearLayout.LayoutParams( + LinearLayoutCompat.LayoutParams param = new LinearLayoutCompat.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, 0, 2.0f @@ -252,7 +265,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis binding.videoContainer.setLayoutParams(param); } else { if (initialOrientation == Configuration.ORIENTATION_LANDSCAPE) { - LinearLayout.LayoutParams param = new LinearLayout.LayoutParams( + LinearLayoutCompat.LayoutParams param = new LinearLayoutCompat.LayoutParams( ConstraintLayout.LayoutParams.MATCH_PARENT, 0, 4.0f @@ -260,14 +273,15 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis binding.videoContainer.setLayoutParams(param); } } - isPlayInMinimized = false; + + if (getSupportActionBar() != null) getSupportActionBar().setDisplayHomeAsUpEnabled(true); - + //Mode for video (using exoplayer or a webview) mode = sharedpreferences.getInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_NORMAL); Intent intent = getIntent(); - + //Retrieve some values passed to the activity Bundle b = intent.getExtras(); if (b != null) { peertubeInstance = b.getString("peertube_instance", HelperInstance.getLiveInstance(PeertubeActivity.this)); @@ -279,9 +293,10 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis if (currentAccount != null && currentAccount.peertube_account != null) { binding.myAcct.setText(String.format("@%s@%s", currentAccount.peertube_account.getUsername(), currentAccount.instance)); } - + //If the activity was called from a URL willPlayFromIntent = manageIntentUrl(intent); + //Change view depending if the user is logged-in for actions if (Helper.isLoggedIn()) { binding.peertubePlaylist.setVisibility(View.VISIBLE); } else if (typeOfConnection == PeertubeMainActivity.TypeOfConnection.REMOTE_ACCOUNT) { @@ -307,9 +322,13 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis if (!Helper.canMakeAction() || sepiaSearch) { binding.writeCommentContainer.setVisibility(View.GONE); } + //Picture in picture enabled playInMinimized = sharedpreferences.getBoolean(getString(R.string.set_video_minimize_choice), true); + //Auto play video autoPlay = sharedpreferences.getBoolean(getString(R.string.set_autoplay_choice), true); + //Open in full screen autoFullscreen = sharedpreferences.getBoolean(getString(R.string.set_fullscreen_choice), false); + //Disable picture in picture enabled for older Android devices if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O || !getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) { playInMinimized = false; @@ -320,6 +339,8 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis } else { binding.videoSensitive.setVisibility(View.INVISIBLE); } + + //When webview is enabled for video if (mode == Helper.VIDEO_MODE_WEBVIEW) { binding.webviewVideo.setVisibility(View.VISIBLE); binding.mediaVideo.setVisibility(View.GONE); @@ -333,7 +354,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis } else { binding.videoLayout.setVisibility(View.GONE); } - toogleFullscreen(fullscreen); + toggleFullScreen(); }); binding.webviewVideo.getSettings().setAllowFileAccess(true); binding.webviewVideo.setWebChromeClient(mastalabWebChromeClient); @@ -344,9 +365,6 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis } else { binding.webviewVideo.setVisibility(View.GONE); binding.loader.setVisibility(View.VISIBLE); - } - - if (mode != Helper.VIDEO_MODE_WEBVIEW) { binding.doubleTapPlayerView.setControllerShowTimeoutMs(1000); binding.doubleTapPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT); initControllerButtons(); @@ -409,7 +427,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis registBroadcastReceiver(); if (autoFullscreen && autoPlay) { - openFullscreenDialog(); + setFullScreen(); } binding.postCommentButton.setOnClickListener(v -> { if (canMakeAction() && !sepiaSearch) { @@ -617,7 +635,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis binding.peertubeDescriptionMore.setVisibility(View.GONE); if (autoFullscreen && autoPlay) { - openFullscreenDialog(); + setFullScreen(); } TimelineVM feedsViewModel = new ViewModelProvider(PeertubeActivity.this).get(TimelineVM.class); @@ -1482,12 +1500,15 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis if (binding.minController.castMiniController.getVisibility() == View.VISIBLE) { return; } + Log.v(TAG, "newConfig.orientation: " + newConfig.orientation); + Log.v(TAG, "humanInteraction: " + humanInteraction); + if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { - if (mode != Helper.VIDEO_MODE_WEBVIEW) { - openFullscreenDialog(); + if (mode != Helper.VIDEO_MODE_WEBVIEW && !humanInteraction) { + setFullScreen(); } if (initialOrientation == Configuration.ORIENTATION_LANDSCAPE) { - LinearLayout.LayoutParams param = new LinearLayout.LayoutParams( + LinearLayoutCompat.LayoutParams param = new LinearLayoutCompat.LayoutParams( ConstraintLayout.LayoutParams.MATCH_PARENT, 0, 4.0f @@ -1495,11 +1516,11 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis binding.videoContainer.setLayoutParams(param); } } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { - if (mode != Helper.VIDEO_MODE_WEBVIEW) { - closeFullscreenDialog(); + if (mode != Helper.VIDEO_MODE_WEBVIEW && !humanInteraction) { + disableFullScreen(); } if (initialOrientation == Configuration.ORIENTATION_LANDSCAPE) { - LinearLayout.LayoutParams param = new LinearLayout.LayoutParams( + LinearLayoutCompat.LayoutParams param = new LinearLayoutCompat.LayoutParams( ConstraintLayout.LayoutParams.MATCH_PARENT, 0, 1.0f @@ -1507,6 +1528,8 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis binding.videoContainer.setLayoutParams(param); } } + humanInteraction = false; + } @Override @@ -1645,14 +1668,76 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis } } - private void toogleFullscreen(boolean fullscreen) { + + public void toggleFullScreen() { + fullScreenMode = !fullScreenMode; + humanInteraction = true; + Log.v(TAG, "toggleFullScreen: " + fullScreenMode); + if (fullScreenMode) { + if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE && videoOrientationType == videoOrientation.PORTRAIT) { + setRequestedOrientationCustom(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); + } else if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT && videoOrientationType == videoOrientation.LANDSCAPE) { + setRequestedOrientationCustom(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + } + setFullScreen(); + } else { + if (videoOrientationType == videoOrientation.LANDSCAPE) { + if (getResources().getConfiguration().orientation != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + setRequestedOrientationCustom(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + } + } + disableFullScreen(); + } + } + + private void setFullScreen() { + Log.v(TAG, "setFullScreen"); + fullScreenMode = true; + fullScreenIcon.setImageDrawable(ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_fullscreen_exit_24)); + Log.v(TAG, "getResources().getConfiguration().orientation: " + getResources().getConfiguration().orientation); + Log.v(TAG, "videoOrientationType: " + videoOrientationType); + + // Enables regular immersive mode. + // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE. + // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY + View decorView = getWindow().getDecorView(); + decorView.setSystemUiVisibility( + View.SYSTEM_UI_FLAG_IMMERSIVE + // Set the content to appear under the system bars so that the + // content doesn't resize when the system bars hide and show. + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + // Hide the nav bar and status bar + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN); + + + binding.bottomVideo.setVisibility(View.GONE); + } + + private void disableFullScreen() { + Log.v(TAG, "disableFullScreen"); + fullScreenMode = false; + binding.bottomVideo.setVisibility(View.VISIBLE); + fullScreenIcon.setImageDrawable(ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_fullscreen_24)); + View decorView = getWindow().getDecorView(); + getWindow().setFlags(flags | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); + decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + + } + + /* private void toogleFullscreen(boolean fullscreen) { if (fullscreen) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Objects.requireNonNull(getSupportActionBar()).hide(); binding.bottomVideo.setVisibility(View.GONE); - Objects.requireNonNull(getSupportActionBar()).hide(); + Log.v(TAG,"videoOrientationType: " + videoOrientationType); if (videoOrientationType == videoOrientation.LANDSCAPE) { if (getResources().getConfiguration().orientation != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientationCustom(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); @@ -1665,19 +1750,8 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis binding.bottomVideo.setVisibility(View.VISIBLE); Objects.requireNonNull(getSupportActionBar()).show(); } - } + }*/ - private void openFullscreenDialog() { - fullScreenIcon.setImageDrawable(ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_fullscreen_exit_24)); - fullScreenMode = true; - toogleFullscreen(true); - } - - private void closeFullscreenDialog() { - fullScreenMode = false; - fullScreenIcon.setImageDrawable(ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_fullscreen_24)); - toogleFullscreen(false); - } public void openCommentThread(Comment comment) { @@ -2180,20 +2254,18 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis fullScreenIcon = controlView.findViewById(R.id.exo_fullscreen_icon); View fullScreenButton = controlView.findViewById(R.id.exo_fullscreen_button); if (fullScreenButton != null) { - fullScreenButton.setOnClickListener(v -> { - if (!fullScreenMode) { - openFullscreenDialog(); - } else { - closeFullscreenDialog(); - setRequestedOrientationCustom(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - } - }); + fullScreenButton.setOnClickListener(v -> toggleFullScreen()); } ImageButton playButton = controlView.findViewById(R.id.exo_play); if (playButton != null) { playButton.setOnClickListener(v -> { if (autoFullscreen && !fullScreenMode) { - openFullscreenDialog(); + /*if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE && videoOrientationType == videoOrientation.PORTRAIT) { + setRequestedOrientationCustom(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); + } else if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT && videoOrientationType == videoOrientation.LANDSCAPE) { + setRequestedOrientationCustom(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + }*/ + setFullScreen(); } player.setPlayWhenReady(true); }); @@ -2219,7 +2291,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis private void setRequestedOrientationCustom(int orientationCustom) { setRequestedOrientation(orientationCustom); Handler handler = new Handler(); - handler.postDelayed(() -> setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR), 2000); + handler.postDelayed(() -> setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR), 2000); } private void initResolution() { |