diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controllers/SponsorBlockController.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controllers/SponsorBlockController.java index 97b1130ba..700ce45c6 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controllers/SponsorBlockController.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/models/playback/controllers/SponsorBlockController.java @@ -20,7 +20,6 @@ import com.liskovsoft.smartyoutubetv2.common.app.presenters.AppDialogPresenter; import com.liskovsoft.smartyoutubetv2.common.app.presenters.settings.SponsorBlockSettingsPresenter; import com.liskovsoft.smartyoutubetv2.common.prefs.SponsorBlockData; import com.liskovsoft.sharedutils.rx.RxHelper; -import com.liskovsoft.smartyoutubetv2.common.prefs.PlayerTweaksData; import com.liskovsoft.smartyoutubetv2.common.utils.Utils; import com.liskovsoft.youtubeapi.service.YouTubeServiceManager; import io.reactivex.Observable; @@ -369,7 +368,7 @@ public class SponsorBlockController extends BasePlayerController { } private void applyActions(List foundSegments) { - if (foundSegments == null) { + if (getPlayer() == null || foundSegments == null) { mLastSkipPosMs = 0; return; } @@ -384,7 +383,7 @@ public class SponsorBlockController extends BasePlayerController { long skipPosMs = lastSegment.getEndMs(); // Fix infinite skip loop by ignoring short segments. TextureView has a seek bug. long skipDurationMs = Math.min(skipPosMs, getPlayer().getDurationMs()) - getPlayer().getPositionMs(); - boolean stayQuiet = skipDurationMs < 10_000 && PlayerTweaksData.instance(getContext()).isTextureViewEnabled(); + boolean stayQuiet = skipDurationMs < 10_000 && (getPlayerTweaksData().isTextureViewEnabled() || getSponsorBlockData().isStayQuietEnabled()); if (!stayQuiet) { if (type == SponsorBlockData.ACTION_SKIP_ONLY || getPlayer().isInPIPMode() || Utils.isScreenOff(getContext()) || isEmbedPlayer()) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java index 2632fa076..d2dbc468a 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java @@ -62,7 +62,7 @@ public class SponsorBlockSettingsPresenter extends BasePresenter { OptionItem sponsorBlockOption = UiOptionItem.from(getContext().getString(R.string.enable), option -> { - mContentBlockData.enableSponsorBlock(option.isSelected()); + mContentBlockData.setSponsorBlockEnabled(option.isSelected()); SponsorBlockData.instance(getContext()).stopExcludingChannel(channelId); }, !isChannelExcluded && mContentBlockData.isSponsorBlockEnabled() @@ -138,12 +138,16 @@ public class SponsorBlockSettingsPresenter extends BasePresenter { private void appendMiscSection(AppDialogPresenter settingsPresenter) { List options = new ArrayList<>(); + options.add(UiOptionItem.from(getContext().getString(R.string.dont_skip_short_segements), + optionItem -> mContentBlockData.setStayQuietEnabled(optionItem.isSelected()), + mContentBlockData.isStayQuietEnabled())); + options.add(UiOptionItem.from(getContext().getString(R.string.paid_content_notification), - optionItem -> mContentBlockData.enablePaidContentNotification(optionItem.isSelected()), + optionItem -> mContentBlockData.setPaidContentNotificationEnabled(optionItem.isSelected()), mContentBlockData.isPaidContentNotificationEnabled())); options.add(UiOptionItem.from(getContext().getString(R.string.skip_each_segment_once), - optionItem -> mContentBlockData.enableDontSkipSegmentAgain(optionItem.isSelected()), + optionItem -> mContentBlockData.setDontSkipSegmentAgainEnabled(optionItem.isSelected()), mContentBlockData.isDontSkipSegmentAgainEnabled())); options.add(UiOptionItem.from(getContext().getString(R.string.content_block_alt_server), diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/SponsorBlockData.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/SponsorBlockData.java index 53c80217a..ec4481dcb 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/SponsorBlockData.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/SponsorBlockData.java @@ -33,6 +33,7 @@ public class SponsorBlockData { private final Set mExcludedChannels = new LinkedHashSet<>(); private boolean mIsDontSkipSegmentAgainEnabled; private boolean mIsPaidContentNotificationEnabled; + private boolean mIsStayQuietEnabled; private Map mSegmentLocalizedMapping; private Map mSegmentColorMapping; private Set mAllCategories; @@ -191,7 +192,7 @@ public class SponsorBlockData { return mIsSponsorBlockEnabled; } - public void enableSponsorBlock(boolean enabled) { + public void setSponsorBlockEnabled(boolean enabled) { mIsSponsorBlockEnabled = enabled; persistState(); } @@ -210,7 +211,7 @@ public class SponsorBlockData { return mIsDontSkipSegmentAgainEnabled; } - public void enableDontSkipSegmentAgain(boolean enabled) { + public void setDontSkipSegmentAgainEnabled(boolean enabled) { mIsDontSkipSegmentAgainEnabled = enabled; persistState(); } @@ -219,11 +220,20 @@ public class SponsorBlockData { return mIsPaidContentNotificationEnabled; } - public void enablePaidContentNotification(boolean enabled) { + public void setPaidContentNotificationEnabled(boolean enabled) { mIsPaidContentNotificationEnabled = enabled; persistState(); } + public boolean isStayQuietEnabled() { + return mIsStayQuietEnabled; + } + + public void setStayQuietEnabled(boolean enable) { + mIsStayQuietEnabled = enable; + persistState(); + } + public boolean isAltServerEnabled() { return GlobalPreferences.instance(mAppPrefs.getContext()).isContentBlockAltServerEnabled(); } @@ -246,6 +256,7 @@ public class SponsorBlockData { mIsDontSkipSegmentAgainEnabled = Helpers.parseBoolean(split, 8, false); String excludedChannels = Helpers.parseStr(split, 9); mIsPaidContentNotificationEnabled = Helpers.parseBoolean(split, 10, false); + mIsStayQuietEnabled = Helpers.parseBoolean(split, 11, true); if (colorCategories != null) { String[] categoriesArr = Helpers.splitArray(colorCategories); @@ -301,7 +312,7 @@ public class SponsorBlockData { mAppPrefs.setData(SPONSOR_BLOCK_DATA, Helpers.mergeData( mIsSponsorBlockEnabled, null, null, null, null, null, actions, colorCategories, mIsDontSkipSegmentAgainEnabled, - excludedChannels, mIsPaidContentNotificationEnabled + excludedChannels, mIsPaidContentNotificationEnabled, mIsStayQuietEnabled )); } } diff --git a/common/src/main/res/values-ru/strings.xml b/common/src/main/res/values-ru/strings.xml index 7d9d9fabd..06399a6ef 100644 --- a/common/src/main/res/values-ru/strings.xml +++ b/common/src/main/res/values-ru/strings.xml @@ -722,4 +722,5 @@ Растяжение аудио во времени Сохраняет естественное звучание голоса при изменении скорости. Может значительно снизить производительность на некоторых устройствах. Очередь учитывает режим воспроизведения + Не пропускать короткие сегменты (< 10 сек) diff --git a/common/src/main/res/values-tr/strings.xml b/common/src/main/res/values-tr/strings.xml index 9168cad4e..833f89254 100644 --- a/common/src/main/res/values-tr/strings.xml +++ b/common/src/main/res/values-tr/strings.xml @@ -732,4 +732,5 @@ Ses zaman esnetme Hız değiştirildiğinde sesi doğal tutar. Bazı cihazlarda performansı önemli ölçüde düşürebilir. Kuyruk oynatma modunu dikkate alır + Kısa bölümleri atlama (< 10 sn) diff --git a/common/src/main/res/values-uk/strings.xml b/common/src/main/res/values-uk/strings.xml index 9ed94b906..81b599c7b 100644 --- a/common/src/main/res/values-uk/strings.xml +++ b/common/src/main/res/values-uk/strings.xml @@ -720,4 +720,5 @@ Розтягування аудіо в часі Зберігає природний голос при зміні швидкості. Може суттєво знизити продуктивність на деяких пристроях. Черга враховує режим відтворення + Не пропускати короткі сегменти (< 10 с) diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index b877f7b26..99dcf0cf3 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -732,4 +732,5 @@ Audio time stretching Keeps voice natural when changing speed. May significantly reduce performance on some devices. Queue respects playback mode + Don\'t skip short segments (< 10sec)