video card: playback preview: upd 4

This commit is contained in:
Yuriy Liskov
2025-05-16 07:43:50 +03:00
parent 9f91e91240
commit a06eb90600
8 changed files with 65 additions and 16 deletions

View File

@ -386,7 +386,7 @@ public class VideoStateController extends BasePlayerController {
public void saveState() { public void saveState() {
// Skip mini player, but don't save for the previews (mute enabled) // Skip mini player, but don't save for the previews (mute enabled)
if (isEmbedMuted()) { if (isMutedEmbed() || isBeginEmbed()) {
return; return;
} }
@ -407,7 +407,7 @@ public class VideoStateController extends BasePlayerController {
private void persistState() { private void persistState() {
// Skip mini player, but don't save for the previews (mute enabled) // Skip mini player, but don't save for the previews (mute enabled)
if (isEmbedMuted()) { if (isMutedEmbed() || isBeginEmbed()) {
return; return;
} }
@ -655,7 +655,15 @@ public class VideoStateController extends BasePlayerController {
} }
} }
private boolean isEmbedMuted() { private boolean isMutedEmbed() {
return getVideo() != null && getPlayer() != null && getVideo().embedPlayer && Helpers.floatEquals(getPlayer().getVolume(), 0); return isEmbed() && getPlayer() != null && Helpers.floatEquals(getPlayer().getVolume(), 0);
}
private boolean isBeginEmbed() {
return isEmbed() && getPlayer() != null && getPlayer().getPositionMs() <= BEGIN_THRESHOLD_MS;
}
private boolean isEmbed() {
return getVideo() != null && getVideo().embedPlayer;
} }
} }

View File

@ -41,6 +41,7 @@ public class MainUISettingsPresenter extends BasePresenter<Void> {
appendTopButtonsCategory(settingsPresenter); appendTopButtonsCategory(settingsPresenter);
appendColorScheme(settingsPresenter); appendColorScheme(settingsPresenter);
appendCardPreviews(settingsPresenter);
appendCardStyle(settingsPresenter); appendCardStyle(settingsPresenter);
appendThumbSource(settingsPresenter); appendThumbSource(settingsPresenter);
//appendCardTitleLines(settingsPresenter); //appendCardTitleLines(settingsPresenter);
@ -105,11 +106,23 @@ public class MainUISettingsPresenter extends BasePresenter<Void> {
return styleOptions; return styleOptions;
} }
private void appendCardStyle(AppDialogPresenter settingsPresenter) { private void appendCardPreviews(AppDialogPresenter settingsPresenter) {
List<OptionItem> options = new ArrayList<>(); List<OptionItem> options = new ArrayList<>();
OptionItem animatedPreviewsOption = UiOptionItem.from(getContext().getString(R.string.card_animated_previews), for (int[] pair : new int[][] {
option -> mMainUIData.enableCardAnimatedPreviews(option.isSelected()), mMainUIData.isCardAnimatedPreviewsEnabled()); {R.string.option_disabled, MainUIData.ANIMATED_PREVIEW_DISABLED},
{R.string.card_preview_muted, MainUIData.ANIMATED_PREVIEW_MUTED},
{R.string.card_preview_full, MainUIData.ANIMATED_PREVIEW_FULL}}) {
options.add(UiOptionItem.from(getContext().getString(pair[0]), optionItem -> {
mMainUIData.setAnimatedPreviewType(pair[1]);
}, mMainUIData.getAnimatedPreviewType() == pair[1]));
}
settingsPresenter.appendRadioCategory(getContext().getString(R.string.card_preview), options);
}
private void appendCardStyle(AppDialogPresenter settingsPresenter) {
List<OptionItem> options = new ArrayList<>();
OptionItem multilineTitle = UiOptionItem.from(getContext().getString(R.string.card_multiline_title), OptionItem multilineTitle = UiOptionItem.from(getContext().getString(R.string.card_multiline_title),
option -> mMainUIData.enableCardMultilineTitle(option.isSelected()), mMainUIData.isCardMultilineTitleEnabled()); option -> mMainUIData.enableCardMultilineTitle(option.isSelected()), mMainUIData.isCardMultilineTitleEnabled());
@ -120,7 +133,6 @@ public class MainUISettingsPresenter extends BasePresenter<Void> {
OptionItem autoScrolledTitle = UiOptionItem.from(getContext().getString(R.string.card_auto_scrolled_title), OptionItem autoScrolledTitle = UiOptionItem.from(getContext().getString(R.string.card_auto_scrolled_title),
option -> mMainUIData.enableCardTextAutoScroll(option.isSelected()), mMainUIData.isCardTextAutoScrollEnabled()); option -> mMainUIData.enableCardTextAutoScroll(option.isSelected()), mMainUIData.isCardTextAutoScrollEnabled());
options.add(animatedPreviewsOption);
options.add(multilineTitle); options.add(multilineTitle);
options.add(multilineSubtitle); options.add(multilineSubtitle);
if (Build.VERSION.SDK_INT > 19) { if (Build.VERSION.SDK_INT > 19) {

View File

@ -17,6 +17,9 @@ import java.util.List;
public class MainUIData extends DataChangeBase implements ProfileChangeListener { public class MainUIData extends DataChangeBase implements ProfileChangeListener {
private static final String MAIN_UI_DATA = "main_ui_data2"; private static final String MAIN_UI_DATA = "main_ui_data2";
public static final int ANIMATED_PREVIEW_DISABLED = 0;
public static final int ANIMATED_PREVIEW_MUTED = 1;
public static final int ANIMATED_PREVIEW_FULL = 2;
public static final int CHANNEL_SORTING_NEW_CONTENT = 0; public static final int CHANNEL_SORTING_NEW_CONTENT = 0;
public static final int CHANNEL_SORTING_NAME = 1; public static final int CHANNEL_SORTING_NAME = 1;
public static final int CHANNEL_SORTING_DEFAULT = 2; public static final int CHANNEL_SORTING_DEFAULT = 2;
@ -102,6 +105,7 @@ public class MainUIData extends DataChangeBase implements ProfileChangeListener
private boolean mIsChannelsFilterEnabled; private boolean mIsChannelsFilterEnabled;
private boolean mIsChannelSearchBarEnabled; private boolean mIsChannelSearchBarEnabled;
private boolean mIsPinnedChannelRowsEnabled; private boolean mIsPinnedChannelRowsEnabled;
private int mAnimatedPreviewType;
private MainUIData(Context context) { private MainUIData(Context context) {
mContext = context; mContext = context;
@ -333,6 +337,15 @@ public class MainUIData extends DataChangeBase implements ProfileChangeListener
return (mTopButtons & button) == button; return (mTopButtons & button) == button;
} }
public int getAnimatedPreviewType() {
return mAnimatedPreviewType;
}
public void setAnimatedPreviewType(int type) {
mAnimatedPreviewType = type;
persistState();
}
private void initColorSchemes() { private void initColorSchemes() {
mColorSchemes.add(new ColorScheme( mColorSchemes.add(new ColorScheme(
R.string.color_scheme_teal, R.string.color_scheme_teal,
@ -404,6 +417,7 @@ public class MainUIData extends DataChangeBase implements ProfileChangeListener
mIsChannelsFilterEnabled = Helpers.parseBoolean(split, 18, true); mIsChannelsFilterEnabled = Helpers.parseBoolean(split, 18, true);
mIsChannelSearchBarEnabled = Helpers.parseBoolean(split, 19, true); mIsChannelSearchBarEnabled = Helpers.parseBoolean(split, 19, true);
mIsPinnedChannelRowsEnabled = Helpers.parseBoolean(split, 20, true); mIsPinnedChannelRowsEnabled = Helpers.parseBoolean(split, 20, true);
mAnimatedPreviewType = Helpers.parseInt(split, 21, ANIMATED_PREVIEW_FULL);
for (Long menuItem : MENU_ITEM_DEFAULT_ORDER) { for (Long menuItem : MENU_ITEM_DEFAULT_ORDER) {
if (!mMenuItemsOrdered.contains(menuItem)) { if (!mMenuItemsOrdered.contains(menuItem)) {
@ -426,7 +440,7 @@ public class MainUIData extends DataChangeBase implements ProfileChangeListener
mChannelCategorySorting, mPlaylistsStyle, mCardTitleLinesNum, mIsCardTextAutoScrollEnabled, mChannelCategorySorting, mPlaylistsStyle, mCardTitleLinesNum, mIsCardTextAutoScrollEnabled,
mIsUploadsOldLookEnabled, mIsUploadsAutoLoadEnabled, mCardTextScrollSpeed, mMenuItems, mTopButtons, mIsUploadsOldLookEnabled, mIsUploadsAutoLoadEnabled, mCardTextScrollSpeed, mMenuItems, mTopButtons,
null, mThumbQuality, mIsCardMultilineSubtitleEnabled, Helpers.mergeList(mMenuItemsOrdered), null, mThumbQuality, mIsCardMultilineSubtitleEnabled, Helpers.mergeList(mMenuItemsOrdered),
mIsChannelsFilterEnabled, mIsChannelSearchBarEnabled, mIsPinnedChannelRowsEnabled)); mIsChannelsFilterEnabled, mIsChannelSearchBarEnabled, mIsPinnedChannelRowsEnabled, mAnimatedPreviewType));
onDataChange(); onDataChange();
} }

View File

@ -688,4 +688,7 @@
<string name="player_audio_focus">Аудиофокус (пауза, если обнаружены другие плееры)</string> <string name="player_audio_focus">Аудиофокус (пауза, если обнаружены другие плееры)</string>
<string name="paid_content_notification">Уведомление о платном содержимом</string> <string name="paid_content_notification">Уведомление о платном содержимом</string>
<string name="you_liked">вам понравилось</string> <string name="you_liked">вам понравилось</string>
<string name="card_preview_muted">Видео без звука</string>
<string name="card_preview_full">Видео со звуком</string>
<string name="card_preview">Предпросмотр карточки</string>
</resources> </resources>

View File

@ -699,4 +699,7 @@
<string name="player_audio_focus">Ses odaklama (diğer video oynatıcılar algılanırsa duraklatma)</string> <string name="player_audio_focus">Ses odaklama (diğer video oynatıcılar algılanırsa duraklatma)</string>
<string name="paid_content_notification">Ücretli içerik bildirimleri</string> <string name="paid_content_notification">Ücretli içerik bildirimleri</string>
<string name="you_liked">sen beğendin</string> <string name="you_liked">sen beğendin</string>
<string name="card_preview_muted">Sessiz video</string>
<string name="card_preview_full">Sesli video</string>
<string name="card_preview">Kart önizlemesi</string>
</resources> </resources>

View File

@ -688,4 +688,7 @@
<string name="player_audio_focus">Аудіо фокус (пауза, якщо виявлено інші плеєри)</string> <string name="player_audio_focus">Аудіо фокус (пауза, якщо виявлено інші плеєри)</string>
<string name="paid_content_notification">Повідомлення про платний вміст</string> <string name="paid_content_notification">Повідомлення про платний вміст</string>
<string name="you_liked">вам сподобалося</string> <string name="you_liked">вам сподобалося</string>
<string name="card_preview_muted">Відео без звуку</string>
<string name="card_preview_full">Відео зі звуком</string>
<string name="card_preview">Попередній перегляд картки</string>
</resources> </resources>

View File

@ -700,4 +700,7 @@
<string name="premium_users_only">Premium users only. Fix for incomplete video format list</string> <string name="premium_users_only">Premium users only. Fix for incomplete video format list</string>
<string name="playback_buffering_fix">Playback buffering fix</string> <string name="playback_buffering_fix">Playback buffering fix</string>
<string name="oculus_quest_fix">Oculus Quest fix</string> <string name="oculus_quest_fix">Oculus Quest fix</string>
<string name="card_preview_muted">Video without sound</string>
<string name="card_preview_full">Video with sound</string>
<string name="card_preview">Card preview</string>
</resources> </resources>

View File

@ -32,6 +32,7 @@ public class ComplexImageView extends RelativeLayout {
private int mPreviewHeight; private int mPreviewHeight;
private Runnable mCreateAndStartPlayer; private Runnable mCreateAndStartPlayer;
private WeakReference<Video> mVideo; private WeakReference<Video> mVideo;
private boolean mPreferSimplePreview;
public ComplexImageView(Context context) { public ComplexImageView(Context context) {
super(context); super(context);
@ -127,7 +128,7 @@ public class ComplexImageView extends RelativeLayout {
return; return;
} }
if (getVideo().previewUrl != null) { if (getVideo().previewUrl != null && mPreferSimplePreview) {
if (mPreviewImage == null) { if (mPreviewImage == null) {
mPreviewImage = new ImageView(getContext()); mPreviewImage = new ImageView(getContext());
mPreviewImage.setScaleType(ScaleType.CENTER_CROP); mPreviewImage.setScaleType(ScaleType.CENTER_CROP);
@ -171,12 +172,14 @@ public class ComplexImageView extends RelativeLayout {
return; return;
} }
if (getVideo().previewUrl != null) { if (getVideo().previewUrl != null && mPreferSimplePreview) {
mPreviewContainer.removeView(mPreviewImage); if (mPreviewImage != null) {
mPreviewContainer.setVisibility(View.GONE); mPreviewContainer.removeView(mPreviewImage);
mPreviewImage.setImageDrawable(null); mPreviewContainer.setVisibility(View.GONE);
Glide.with(getContext().getApplicationContext()).clear(mPreviewImage); mPreviewImage.setImageDrawable(null);
mPreviewImage = null; Glide.with(getContext().getApplicationContext()).clear(mPreviewImage);
mPreviewImage = null;
}
} else if (getVideo().videoId != null) { } else if (getVideo().videoId != null) {
Utils.removeCallbacks(mCreateAndStartPlayer); Utils.removeCallbacks(mCreateAndStartPlayer);