summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2023-03-20 10:43:21 +0100
committerThomas <tschneider.ac@gmail.com>2023-03-20 10:43:21 +0100
commit47b767e8ce59797fb8a73298fdc9a7aebdede058 (patch)
tree9965077d9cff0ef82ffbd9852149460f9a5bd4f4
parent9fd701b10274e501284c5f922f9eb6a33b17eb26 (diff)
Add settings
-rw-r--r--app/src/main/AndroidManifest.xml2
-rw-r--r--app/src/main/java/app/fedilab/android/peertube/activities/PeertubeActivity.java162
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() {