mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2024-12-22 16:50:04 +02:00
Add settings
This commit is contained in:
parent
9fd701b102
commit
47b767e8ce
2 changed files with 118 additions and 46 deletions
|
@ -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"
|
||||
|
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue