From 0a2fc0870629fa166543b41e4da3df8dea11f445 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 16 Apr 2022 18:28:23 +0200 Subject: [PATCH 01/33] Release v0.23.0 (986) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 049d04bd2..e93b2aaf4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,8 +16,8 @@ android { resValue "string", "app_name", "NewPipe" minSdk 19 targetSdk 29 - versionCode 985 - versionName "0.22.2" + versionCode 986 + versionName "0.23.0" multiDexEnabled true From f2fc2cc24af9900db8ad1cdf59cedf4ad34f6a26 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 16 Apr 2022 18:57:02 +0200 Subject: [PATCH 02/33] Check whether to enable New streams settings in onCreate to prevent flickering --- .../newpipe/settings/NotificationsSettingsFragment.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt b/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt index e823c2fcf..14f74088c 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt @@ -26,6 +26,10 @@ class NotificationsSettingsFragment : BasePreferenceFragment(), OnSharedPreferen override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.notifications_settings) + + // main check is done in onResume, but also do it here to prevent flickering + preferenceScreen.isEnabled = + NotificationHelper.areNotificationsEnabledOnDevice(requireContext()) } override fun onStart() { @@ -64,7 +68,7 @@ class NotificationsSettingsFragment : BasePreferenceFragment(), OnSharedPreferen // If they are disabled, show a snackbar informing the user about that // while allowing them to open the device's app settings. val enabled = NotificationHelper.areNotificationsEnabledOnDevice(requireContext()) - preferenceScreen.isEnabled = enabled + preferenceScreen.isEnabled = enabled // it is disabled by default, see the xml if (!enabled) { if (notificationWarningSnackbar == null) { notificationWarningSnackbar = Snackbar.make( From fa58a818529f31c4a0b0567575030a936c05e7b8 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 16 Apr 2022 18:58:19 +0200 Subject: [PATCH 03/33] Fix New streams settings snackbar not being hidden on exiting --- .../newpipe/settings/NotificationsSettingsFragment.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt b/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt index 14f74088c..fcc9abf73 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/NotificationsSettingsFragment.kt @@ -89,9 +89,6 @@ class NotificationsSettingsFragment : BasePreferenceFragment(), OnSharedPreferen show() } } - } else { - notificationWarningSnackbar?.dismiss() - notificationWarningSnackbar = null } // (Re-)Create loader @@ -106,6 +103,9 @@ class NotificationsSettingsFragment : BasePreferenceFragment(), OnSharedPreferen loader?.dispose() loader = null + notificationWarningSnackbar?.dismiss() + notificationWarningSnackbar = null + super.onPause() } From 652d50173e64efd01eeca1c9454d205c2c513b4a Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Sat, 1 Jan 2022 19:02:03 +0100 Subject: [PATCH 04/33] Major refactoring of PlaybackParameterDialog * Removed/Renamed methods * Use ``IcePick`` * Better structuring * Keep skipSilence when rotating the device (PlayQueueActivity only) --- .../helper/PlaybackParameterDialog.java | 726 ++++++------------ 1 file changed, 224 insertions(+), 502 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index 1a55c21c3..b72b7ea7b 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -9,10 +9,10 @@ import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.CheckBox; -import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; +import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -20,104 +20,88 @@ import androidx.fragment.app.DialogFragment; import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; -import org.schabi.newpipe.util.SimpleOnSeekBarChangeListener; import org.schabi.newpipe.util.SliderStrategy; +import java.util.Objects; +import java.util.function.DoubleConsumer; +import java.util.function.DoubleFunction; + +import icepick.Icepick; +import icepick.State; + public class PlaybackParameterDialog extends DialogFragment { + private static final String TAG = "PlaybackParameterDialog"; + // Minimum allowable range in ExoPlayer private static final double MINIMUM_PLAYBACK_VALUE = 0.10f; private static final double MAXIMUM_PLAYBACK_VALUE = 3.00f; - private static final char STEP_UP_SIGN = '+'; - private static final char STEP_DOWN_SIGN = '-'; - - private static final double STEP_ONE_PERCENT_VALUE = 0.01f; - private static final double STEP_FIVE_PERCENT_VALUE = 0.05f; - private static final double STEP_TEN_PERCENT_VALUE = 0.10f; - private static final double STEP_TWENTY_FIVE_PERCENT_VALUE = 0.25f; - private static final double STEP_ONE_HUNDRED_PERCENT_VALUE = 1.00f; + private static final double STEP_1_PERCENT_VALUE = 0.01f; + private static final double STEP_5_PERCENT_VALUE = 0.05f; + private static final double STEP_10_PERCENT_VALUE = 0.10f; + private static final double STEP_25_PERCENT_VALUE = 0.25f; + private static final double STEP_100_PERCENT_VALUE = 1.00f; private static final double DEFAULT_TEMPO = 1.00f; private static final double DEFAULT_PITCH = 1.00f; - private static final int DEFAULT_SEMITONES = 0; - private static final double DEFAULT_STEP = STEP_TWENTY_FIVE_PERCENT_VALUE; + private static final double DEFAULT_STEP = STEP_25_PERCENT_VALUE; private static final boolean DEFAULT_SKIP_SILENCE = false; - @NonNull - private static final String TAG = "PlaybackParameterDialog"; - @NonNull - private static final String INITIAL_TEMPO_KEY = "initial_tempo_key"; - @NonNull - private static final String INITIAL_PITCH_KEY = "initial_pitch_key"; - - @NonNull - private static final String TEMPO_KEY = "tempo_key"; - @NonNull - private static final String PITCH_KEY = "pitch_key"; - @NonNull - private static final String STEP_SIZE_KEY = "step_size_key"; - - @NonNull - private final SliderStrategy strategy = new SliderStrategy.Quadratic( - MINIMUM_PLAYBACK_VALUE, MAXIMUM_PLAYBACK_VALUE, - /*centerAt=*/1.00f, /*sliderGranularity=*/10000); + private static final SliderStrategy QUADRATIC_STRATEGY = new SliderStrategy.Quadratic( + MINIMUM_PLAYBACK_VALUE, + MAXIMUM_PLAYBACK_VALUE, + 1.00f, + 10_000); @Nullable private Callback callback; - private double initialTempo = DEFAULT_TEMPO; - private double initialPitch = DEFAULT_PITCH; - private int initialSemitones = DEFAULT_SEMITONES; - private boolean initialSkipSilence = DEFAULT_SKIP_SILENCE; - private double tempo = DEFAULT_TEMPO; - private double pitch = DEFAULT_PITCH; - private int semitones = DEFAULT_SEMITONES; + @State + double initialTempo = DEFAULT_TEMPO; + @State + double initialPitch = DEFAULT_PITCH; + @State + boolean initialSkipSilence = DEFAULT_SKIP_SILENCE; + + @State + double tempo = DEFAULT_TEMPO; + @State + double pitch = DEFAULT_PITCH; + @State + double stepSize = DEFAULT_STEP; + @State + boolean skipSilence = DEFAULT_SKIP_SILENCE; - @Nullable private SeekBar tempoSlider; - @Nullable private TextView tempoCurrentText; - @Nullable private TextView tempoStepDownText; - @Nullable private TextView tempoStepUpText; - @Nullable - private SeekBar pitchSlider; - @Nullable - private TextView pitchCurrentText; - @Nullable - private TextView pitchStepDownText; - @Nullable - private TextView pitchStepUpText; - @Nullable - private SeekBar semitoneSlider; - @Nullable - private TextView semitoneCurrentText; - @Nullable - private TextView semitoneStepDownText; - @Nullable - private TextView semitoneStepUpText; - @Nullable - private CheckBox unhookingCheckbox; - @Nullable - private CheckBox skipSilenceCheckbox; - @Nullable - private CheckBox adjustBySemitonesCheckbox; - public static PlaybackParameterDialog newInstance(final double playbackTempo, - final double playbackPitch, - final boolean playbackSkipSilence, - final Callback callback) { + private SeekBar pitchSlider; + private TextView pitchCurrentText; + private TextView pitchStepDownText; + private TextView pitchStepUpText; + + private CheckBox unhookingCheckbox; + private CheckBox skipSilenceCheckbox; + + public static PlaybackParameterDialog newInstance( + final double playbackTempo, + final double playbackPitch, + final boolean playbackSkipSilence, + final Callback callback + ) { final PlaybackParameterDialog dialog = new PlaybackParameterDialog(); dialog.callback = callback; + dialog.initialTempo = playbackTempo; dialog.initialPitch = playbackPitch; - - dialog.tempo = playbackTempo; - dialog.pitch = playbackPitch; - dialog.semitones = dialog.percentToSemitones(playbackPitch); - dialog.initialSkipSilence = playbackSkipSilence; + + dialog.tempo = dialog.initialTempo; + dialog.pitch = dialog.initialPitch; + dialog.skipSilence = dialog.initialSkipSilence; + return dialog; } @@ -126,7 +110,7 @@ public class PlaybackParameterDialog extends DialogFragment { //////////////////////////////////////////////////////////////////////////*/ @Override - public void onAttach(@NonNull final Context context) { + public void onAttach(final Context context) { super.onAttach(context); if (context instanceof Callback) { callback = (Callback) context; @@ -136,28 +120,9 @@ public class PlaybackParameterDialog extends DialogFragment { } @Override - public void onCreate(@Nullable final Bundle savedInstanceState) { - assureCorrectAppLanguage(getContext()); - super.onCreate(savedInstanceState); - if (savedInstanceState != null) { - initialTempo = savedInstanceState.getDouble(INITIAL_TEMPO_KEY, DEFAULT_TEMPO); - initialPitch = savedInstanceState.getDouble(INITIAL_PITCH_KEY, DEFAULT_PITCH); - initialSemitones = percentToSemitones(initialPitch); - - tempo = savedInstanceState.getDouble(TEMPO_KEY, DEFAULT_TEMPO); - pitch = savedInstanceState.getDouble(PITCH_KEY, DEFAULT_PITCH); - semitones = percentToSemitones(pitch); - } - } - - @Override - public void onSaveInstanceState(@NonNull final Bundle outState) { + public void onSaveInstanceState(final Bundle outState) { super.onSaveInstanceState(outState); - outState.putDouble(INITIAL_TEMPO_KEY, initialTempo); - outState.putDouble(INITIAL_PITCH_KEY, initialPitch); - - outState.putDouble(TEMPO_KEY, getCurrentTempo()); - outState.putDouble(PITCH_KEY, getCurrentPitch()); + Icepick.saveInstanceState(this, outState); } /*////////////////////////////////////////////////////////////////////////// @@ -168,20 +133,28 @@ public class PlaybackParameterDialog extends DialogFragment { @Override public Dialog onCreateDialog(@Nullable final Bundle savedInstanceState) { assureCorrectAppLanguage(getContext()); + Icepick.restoreInstanceState(this, savedInstanceState); + final View view = View.inflate(getContext(), R.layout.dialog_playback_parameter, null); - setupControlViews(view); + initUI(view); + initUIData(); final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireActivity()) .setView(view) .setCancelable(true) - .setNegativeButton(R.string.cancel, (dialogInterface, i) -> - setPlaybackParameters(initialTempo, initialPitch, - initialSemitones, initialSkipSilence)) - .setNeutralButton(R.string.playback_reset, (dialogInterface, i) -> - setPlaybackParameters(DEFAULT_TEMPO, DEFAULT_PITCH, - DEFAULT_SEMITONES, DEFAULT_SKIP_SILENCE)) - .setPositiveButton(R.string.ok, (dialogInterface, i) -> - setCurrentPlaybackParameters()); + .setNegativeButton(R.string.cancel, (dialogInterface, i) -> { + setAndUpdateTempo(initialTempo); + setAndUpdatePitch(initialPitch); + setAndUpdateSkipSilence(initialSkipSilence); + updateCallback(); + }) + .setNeutralButton(R.string.playback_reset, (dialogInterface, i) -> { + setAndUpdateTempo(DEFAULT_TEMPO); + setAndUpdatePitch(DEFAULT_PITCH); + setAndUpdateSkipSilence(DEFAULT_SKIP_SILENCE); + updateCallback(); + }) + .setPositiveButton(R.string.ok, (dialogInterface, i) -> updateCallback()); return dialogBuilder.create(); } @@ -190,353 +163,171 @@ public class PlaybackParameterDialog extends DialogFragment { // Control Views //////////////////////////////////////////////////////////////////////////*/ - private void setupControlViews(@NonNull final View rootView) { - setupHookingControl(rootView); - setupSkipSilenceControl(rootView); - setupAdjustBySemitonesControl(rootView); + private void initUI(@NonNull final View rootView) { + // Tempo + tempoSlider = Objects.requireNonNull(rootView.findViewById(R.id.tempoSeekbar)); + tempoCurrentText = Objects.requireNonNull(rootView.findViewById(R.id.tempoCurrentText)); + tempoStepUpText = Objects.requireNonNull(rootView.findViewById(R.id.tempoStepUp)); + tempoStepDownText = Objects.requireNonNull(rootView.findViewById(R.id.tempoStepDown)); - setupTempoControl(rootView); - setupPitchControl(rootView); - setupSemitoneControl(rootView); + setText(rootView, R.id.tempoMinimumText, PlayerHelper::formatSpeed, MINIMUM_PLAYBACK_VALUE); + setText(rootView, R.id.tempoMaximumText, PlayerHelper::formatSpeed, MAXIMUM_PLAYBACK_VALUE); - togglePitchSliderType(rootView); + // Pitch + pitchSlider = Objects.requireNonNull(rootView.findViewById(R.id.pitchSeekbar)); + pitchCurrentText = Objects.requireNonNull(rootView.findViewById(R.id.pitchCurrentText)); + pitchStepUpText = Objects.requireNonNull(rootView.findViewById(R.id.pitchStepUp)); + pitchStepDownText = Objects.requireNonNull(rootView.findViewById(R.id.pitchStepDown)); - setupStepSizeSelector(rootView); + setText(rootView, R.id.pitchMinimumText, PlayerHelper::formatPitch, MINIMUM_PLAYBACK_VALUE); + setText(rootView, R.id.pitchMaximumText, PlayerHelper::formatPitch, MAXIMUM_PLAYBACK_VALUE); + + // Steps + setupStepTextView(rootView, R.id.stepSizeOnePercent, STEP_1_PERCENT_VALUE); + setupStepTextView(rootView, R.id.stepSizeFivePercent, STEP_5_PERCENT_VALUE); + setupStepTextView(rootView, R.id.stepSizeTenPercent, STEP_10_PERCENT_VALUE); + setupStepTextView(rootView, R.id.stepSizeTwentyFivePercent, STEP_25_PERCENT_VALUE); + setupStepTextView(rootView, R.id.stepSizeOneHundredPercent, STEP_100_PERCENT_VALUE); + + // Bottom controls + unhookingCheckbox = + Objects.requireNonNull(rootView.findViewById(R.id.unhookCheckbox)); + skipSilenceCheckbox = + Objects.requireNonNull(rootView.findViewById(R.id.skipSilenceCheckbox)); } - private void togglePitchSliderType(@NonNull final View rootView) { - final RelativeLayout pitchControl = rootView.findViewById(R.id.pitchControl); - final RelativeLayout semitoneControl = rootView.findViewById(R.id.semitoneControl); - - final View separatorStepSizeSelector = - rootView.findViewById(R.id.separatorStepSizeSelector); - final RelativeLayout.LayoutParams params = - (RelativeLayout.LayoutParams) separatorStepSizeSelector.getLayoutParams(); - if (pitchControl != null && semitoneControl != null && unhookingCheckbox != null) { - if (getCurrentAdjustBySemitones()) { - // replaces pitchControl slider with semitoneControl slider - pitchControl.setVisibility(View.GONE); - semitoneControl.setVisibility(View.VISIBLE); - params.addRule(RelativeLayout.BELOW, R.id.semitoneControl); - - // forces unhook for semitones - unhookingCheckbox.setChecked(true); - unhookingCheckbox.setEnabled(false); - - setupTempoStepSizeSelector(rootView); - } else { - semitoneControl.setVisibility(View.GONE); - pitchControl.setVisibility(View.VISIBLE); - params.addRule(RelativeLayout.BELOW, R.id.pitchControl); - - // (re)enables hooking selection - unhookingCheckbox.setEnabled(true); - setupCombinedStepSizeSelector(rootView); - } - } + private TextView setText( + final TextView textView, + final DoubleFunction formatter, + final double value + ) { + Objects.requireNonNull(textView).setText(formatter.apply(value)); + return textView; } - private void setupTempoControl(@NonNull final View rootView) { - tempoSlider = rootView.findViewById(R.id.tempoSeekbar); - final TextView tempoMinimumText = rootView.findViewById(R.id.tempoMinimumText); - final TextView tempoMaximumText = rootView.findViewById(R.id.tempoMaximumText); - tempoCurrentText = rootView.findViewById(R.id.tempoCurrentText); - tempoStepUpText = rootView.findViewById(R.id.tempoStepUp); - tempoStepDownText = rootView.findViewById(R.id.tempoStepDown); - - if (tempoCurrentText != null) { - tempoCurrentText.setText(PlayerHelper.formatSpeed(tempo)); - } - if (tempoMaximumText != null) { - tempoMaximumText.setText(PlayerHelper.formatSpeed(MAXIMUM_PLAYBACK_VALUE)); - } - if (tempoMinimumText != null) { - tempoMinimumText.setText(PlayerHelper.formatSpeed(MINIMUM_PLAYBACK_VALUE)); - } - - if (tempoSlider != null) { - tempoSlider.setMax(strategy.progressOf(MAXIMUM_PLAYBACK_VALUE)); - tempoSlider.setProgress(strategy.progressOf(tempo)); - tempoSlider.setOnSeekBarChangeListener(getOnTempoChangedListener()); - } + private TextView setText( + final View rootView, + @IdRes final int idRes, + final DoubleFunction formatter, + final double value + ) { + final TextView textView = rootView.findViewById(idRes); + setText(textView, formatter, value); + return textView; } - private void setupPitchControl(@NonNull final View rootView) { - pitchSlider = rootView.findViewById(R.id.pitchSeekbar); - final TextView pitchMinimumText = rootView.findViewById(R.id.pitchMinimumText); - final TextView pitchMaximumText = rootView.findViewById(R.id.pitchMaximumText); - pitchCurrentText = rootView.findViewById(R.id.pitchCurrentText); - pitchStepDownText = rootView.findViewById(R.id.pitchStepDown); - pitchStepUpText = rootView.findViewById(R.id.pitchStepUp); - - if (pitchCurrentText != null) { - pitchCurrentText.setText(PlayerHelper.formatPitch(pitch)); - } - if (pitchMaximumText != null) { - pitchMaximumText.setText(PlayerHelper.formatPitch(MAXIMUM_PLAYBACK_VALUE)); - } - if (pitchMinimumText != null) { - pitchMinimumText.setText(PlayerHelper.formatPitch(MINIMUM_PLAYBACK_VALUE)); - } - - if (pitchSlider != null) { - pitchSlider.setMax(strategy.progressOf(MAXIMUM_PLAYBACK_VALUE)); - pitchSlider.setProgress(strategy.progressOf(pitch)); - pitchSlider.setOnSeekBarChangeListener(getOnPitchChangedListener()); - } + private void setupStepTextView( + final View rootView, + @IdRes final int idRes, + final double stepSizeValue + ) { + setText(rootView, idRes, PlaybackParameterDialog::getPercentString, stepSizeValue) + .setOnClickListener(view -> setAndUpdateStepSize(stepSizeValue)); } - private void setupSemitoneControl(@NonNull final View rootView) { - semitoneSlider = rootView.findViewById(R.id.semitoneSeekbar); - semitoneCurrentText = rootView.findViewById(R.id.semitoneCurrentText); - semitoneStepDownText = rootView.findViewById(R.id.semitoneStepDown); - semitoneStepUpText = rootView.findViewById(R.id.semitoneStepUp); + private void initUIData() { + // Tempo + tempoSlider.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); + setAndUpdateTempo(tempo); + tempoSlider.setOnSeekBarChangeListener( + getTempoOrPitchSeekbarChangeListener(this::onTempoSliderUpdated)); - if (semitoneCurrentText != null) { - semitoneCurrentText.setText(getSignedSemitonesString(semitones)); - } + registerOnStepClickListener( + tempoStepDownText, tempo, -1, this::onTempoSliderUpdated); + registerOnStepClickListener( + tempoStepUpText, tempo, 1, this::onTempoSliderUpdated); - if (semitoneSlider != null) { - setSemitoneSlider(semitones); - semitoneSlider.setOnSeekBarChangeListener(getOnSemitoneChangedListener()); - } + // Pitch + pitchSlider.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); + setAndUpdatePitch(pitch); + pitchSlider.setOnSeekBarChangeListener( + getTempoOrPitchSeekbarChangeListener(this::onPitchSliderUpdated)); - } + registerOnStepClickListener( + pitchStepDownText, pitch, -1, this::onPitchSliderUpdated); + registerOnStepClickListener( + pitchStepUpText, pitch, 1, this::onPitchSliderUpdated); - private void setupHookingControl(@NonNull final View rootView) { - unhookingCheckbox = rootView.findViewById(R.id.unhookCheckbox); - if (unhookingCheckbox != null) { - // restores whether pitch and tempo are unhooked or not - unhookingCheckbox.setChecked(PreferenceManager - .getDefaultSharedPreferences(requireContext()) - .getBoolean(getString(R.string.playback_unhook_key), true)); + // Steps + setAndUpdateStepSize(stepSize); - unhookingCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { - // saves whether pitch and tempo are unhooked or not - PreferenceManager.getDefaultSharedPreferences(requireContext()) - .edit() - .putBoolean(getString(R.string.playback_unhook_key), isChecked) - .apply(); - - if (!isChecked) { - // when unchecked, slides back to the minimum of current tempo or pitch - final double minimum = Math.min(getCurrentPitch(), getCurrentTempo()); - setSliders(minimum); - setCurrentPlaybackParameters(); - } - }); - } - } - - private void setupSkipSilenceControl(@NonNull final View rootView) { - skipSilenceCheckbox = rootView.findViewById(R.id.skipSilenceCheckbox); - if (skipSilenceCheckbox != null) { - skipSilenceCheckbox.setChecked(initialSkipSilence); - skipSilenceCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> - setCurrentPlaybackParameters()); - } - } - - private void setupAdjustBySemitonesControl(@NonNull final View rootView) { - adjustBySemitonesCheckbox = rootView.findViewById(R.id.adjustBySemitonesCheckbox); - if (adjustBySemitonesCheckbox != null) { - // restores whether semitone adjustment is used or not - adjustBySemitonesCheckbox.setChecked(PreferenceManager + // Bottom controls + // restore whether pitch and tempo are unhooked or not + unhookingCheckbox.setChecked(PreferenceManager .getDefaultSharedPreferences(requireContext()) - .getBoolean(getString(R.string.playback_adjust_by_semitones_key), true)); + .getBoolean(getString(R.string.playback_unhook_key), true)); - // stores whether semitone adjustment is used or not - adjustBySemitonesCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { - PreferenceManager.getDefaultSharedPreferences(requireContext()) + unhookingCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { + // save whether pitch and tempo are unhooked or not + PreferenceManager.getDefaultSharedPreferences(requireContext()) .edit() - .putBoolean(getString(R.string.playback_adjust_by_semitones_key), isChecked) + .putBoolean(getString(R.string.playback_unhook_key), isChecked) .apply(); - togglePitchSliderType(rootView); - if (isChecked) { - setPlaybackParameters( - getCurrentTempo(), - getCurrentPitch(), - Integer.min(12, - Integer.max(-12, percentToSemitones(getCurrentPitch()) - )), - getCurrentSkipSilence() - ); - setSemitoneSlider(Integer.min(12, - Integer.max(-12, percentToSemitones(getCurrentPitch())) - )); - } else { - setPlaybackParameters( - getCurrentTempo(), - semitonesToPercent(getCurrentSemitones()), - getCurrentSemitones(), - getCurrentSkipSilence() - ); - setPitchSlider(semitonesToPercent(getCurrentSemitones())); - } - }); - } + + if (!isChecked) { + // when unchecked, slide back to the minimum of current tempo or pitch + setSliders(Math.min(pitch, tempo)); + } + }); + + setAndUpdateSkipSilence(skipSilence); + skipSilenceCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { + skipSilence = isChecked; + updateCallback(); + }); } - private void setupStepSizeSelector(@NonNull final View rootView) { - setStepSize(PreferenceManager - .getDefaultSharedPreferences(requireContext()) - .getFloat(getString(R.string.adjustment_step_key), (float) DEFAULT_STEP)); - - final TextView stepSizeOnePercentText = rootView.findViewById(R.id.stepSizeOnePercent); - final TextView stepSizeFivePercentText = rootView.findViewById(R.id.stepSizeFivePercent); - final TextView stepSizeTenPercentText = rootView.findViewById(R.id.stepSizeTenPercent); - final TextView stepSizeTwentyFivePercentText = rootView - .findViewById(R.id.stepSizeTwentyFivePercent); - final TextView stepSizeOneHundredPercentText = rootView - .findViewById(R.id.stepSizeOneHundredPercent); - - if (stepSizeOnePercentText != null) { - stepSizeOnePercentText.setText(getPercentString(STEP_ONE_PERCENT_VALUE)); - stepSizeOnePercentText - .setOnClickListener(view -> setStepSize(STEP_ONE_PERCENT_VALUE)); - } - - if (stepSizeFivePercentText != null) { - stepSizeFivePercentText.setText(getPercentString(STEP_FIVE_PERCENT_VALUE)); - stepSizeFivePercentText - .setOnClickListener(view -> setStepSize(STEP_FIVE_PERCENT_VALUE)); - } - - if (stepSizeTenPercentText != null) { - stepSizeTenPercentText.setText(getPercentString(STEP_TEN_PERCENT_VALUE)); - stepSizeTenPercentText - .setOnClickListener(view -> setStepSize(STEP_TEN_PERCENT_VALUE)); - } - - if (stepSizeTwentyFivePercentText != null) { - stepSizeTwentyFivePercentText - .setText(getPercentString(STEP_TWENTY_FIVE_PERCENT_VALUE)); - stepSizeTwentyFivePercentText - .setOnClickListener(view -> setStepSize(STEP_TWENTY_FIVE_PERCENT_VALUE)); - } - - if (stepSizeOneHundredPercentText != null) { - stepSizeOneHundredPercentText - .setText(getPercentString(STEP_ONE_HUNDRED_PERCENT_VALUE)); - stepSizeOneHundredPercentText - .setOnClickListener(view -> setStepSize(STEP_ONE_HUNDRED_PERCENT_VALUE)); - } + private void registerOnStepClickListener( + final TextView stepTextView, + final double currentValue, + final double direction, // -1 for step down, +1 for step up + final DoubleConsumer newValueConsumer + ) { + stepTextView.setOnClickListener(view -> + newValueConsumer.accept(currentValue * direction) + ); } - private void setupTempoStepSizeSelector(@NonNull final View rootView) { - final TextView playbackStepTypeText = rootView.findViewById(R.id.playback_step_type); - if (playbackStepTypeText != null) { - playbackStepTypeText.setText(R.string.playback_tempo_step); - } - setupStepSizeSelector(rootView); + private void setAndUpdateStepSize(final double newStepSize) { + this.stepSize = newStepSize; + + tempoStepUpText.setText(getStepUpPercentString(newStepSize)); + tempoStepDownText.setText(getStepDownPercentString(newStepSize)); + + pitchStepUpText.setText(getStepUpPercentString(newStepSize)); + pitchStepDownText.setText(getStepDownPercentString(newStepSize)); } - private void setupCombinedStepSizeSelector(@NonNull final View rootView) { - final TextView playbackStepTypeText = rootView.findViewById(R.id.playback_step_type); - if (playbackStepTypeText != null) { - playbackStepTypeText.setText(R.string.playback_step); - } - setupStepSizeSelector(rootView); - } - - private void setStepSize(final double stepSize) { - PreferenceManager.getDefaultSharedPreferences(requireContext()) - .edit() - .putFloat(getString(R.string.adjustment_step_key), (float) stepSize) - .apply(); - - if (tempoStepUpText != null) { - tempoStepUpText.setText(getStepUpPercentString(stepSize)); - tempoStepUpText.setOnClickListener(view -> { - onTempoSliderUpdated(getCurrentTempo() + stepSize); - setCurrentPlaybackParameters(); - }); - } - - if (tempoStepDownText != null) { - tempoStepDownText.setText(getStepDownPercentString(stepSize)); - tempoStepDownText.setOnClickListener(view -> { - onTempoSliderUpdated(getCurrentTempo() - stepSize); - setCurrentPlaybackParameters(); - }); - } - - if (pitchStepUpText != null) { - pitchStepUpText.setText(getStepUpPercentString(stepSize)); - pitchStepUpText.setOnClickListener(view -> { - onPitchSliderUpdated(getCurrentPitch() + stepSize); - setCurrentPlaybackParameters(); - }); - } - - if (pitchStepDownText != null) { - pitchStepDownText.setText(getStepDownPercentString(stepSize)); - pitchStepDownText.setOnClickListener(view -> { - onPitchSliderUpdated(getCurrentPitch() - stepSize); - setCurrentPlaybackParameters(); - }); - } - - if (semitoneStepDownText != null) { - semitoneStepDownText.setOnClickListener(view -> { - onSemitoneSliderUpdated(getCurrentSemitones() - 1); - setCurrentPlaybackParameters(); - }); - } - - if (semitoneStepUpText != null) { - semitoneStepUpText.setOnClickListener(view -> { - onSemitoneSliderUpdated(getCurrentSemitones() + 1); - setCurrentPlaybackParameters(); - }); - } + private void setAndUpdateSkipSilence(final boolean newSkipSilence) { + this.skipSilence = newSkipSilence; + skipSilenceCheckbox.setChecked(newSkipSilence); } /*////////////////////////////////////////////////////////////////////////// // Sliders //////////////////////////////////////////////////////////////////////////*/ - private SimpleOnSeekBarChangeListener getOnTempoChangedListener() { - return new SimpleOnSeekBarChangeListener() { + private SeekBar.OnSeekBarChangeListener getTempoOrPitchSeekbarChangeListener( + final DoubleConsumer newValueConsumer + ) { + return new SeekBar.OnSeekBarChangeListener() { @Override - public void onProgressChanged(@NonNull final SeekBar seekBar, final int progress, + public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) { - final double currentTempo = strategy.valueOf(progress); - if (fromUser) { - onTempoSliderUpdated(currentTempo); - setCurrentPlaybackParameters(); + if (fromUser) { // this change is first in chain + newValueConsumer.accept(QUADRATIC_STRATEGY.valueOf(progress)); + updateCallback(); } } - }; - } - private SimpleOnSeekBarChangeListener getOnPitchChangedListener() { - return new SimpleOnSeekBarChangeListener() { @Override - public void onProgressChanged(@NonNull final SeekBar seekBar, final int progress, - final boolean fromUser) { - final double currentPitch = strategy.valueOf(progress); - if (fromUser) { // this change is first in chain - onPitchSliderUpdated(currentPitch); - setCurrentPlaybackParameters(); - } + public void onStartTrackingTouch(final SeekBar seekBar) { + // Do nothing } - }; - } - private SimpleOnSeekBarChangeListener getOnSemitoneChangedListener() { - return new SimpleOnSeekBarChangeListener() { @Override - public void onProgressChanged(@NonNull final SeekBar seekBar, final int progress, - final boolean fromUser) { - // semitone slider supplies values 0 to 24, subtraction by 12 is required - final int currentSemitones = progress - 12; - if (fromUser) { // this change is first in chain - onSemitoneSliderUpdated(currentSemitones); - // line below also saves semitones as pitch percentages - onPitchSliderUpdated(semitonesToPercent(currentSemitones)); - setCurrentPlaybackParameters(); - } + public void onStopTrackingTouch(final SeekBar seekBar) { + // Do nothing } }; } @@ -545,7 +336,7 @@ public class PlaybackParameterDialog extends DialogFragment { if (!unhookingCheckbox.isChecked()) { setSliders(newTempo); } else { - setTempoSlider(newTempo); + setAndUpdateTempo(newTempo); } } @@ -553,109 +344,53 @@ public class PlaybackParameterDialog extends DialogFragment { if (!unhookingCheckbox.isChecked()) { setSliders(newPitch); } else { - setPitchSlider(newPitch); + setAndUpdatePitch(newPitch); } } - private void onSemitoneSliderUpdated(final int newSemitone) { - setSemitoneSlider(newSemitone); - } - private void setSliders(final double newValue) { - setTempoSlider(newValue); - setPitchSlider(newValue); + setAndUpdateTempo(newValue); + setAndUpdatePitch(newValue); } - private void setTempoSlider(final double newTempo) { - if (tempoSlider == null) { - return; - } - tempoSlider.setProgress(strategy.progressOf(newTempo)); + private void setAndUpdateTempo(final double newTempo) { + this.tempo = newTempo; + tempoSlider.setProgress(QUADRATIC_STRATEGY.progressOf(tempo)); + setText(tempoCurrentText, PlayerHelper::formatSpeed, tempo); } - private void setPitchSlider(final double newPitch) { - if (pitchSlider == null) { - return; - } - pitchSlider.setProgress(strategy.progressOf(newPitch)); - } - - private void setSemitoneSlider(final int newSemitone) { - if (semitoneSlider == null) { - return; - } - semitoneSlider.setProgress(newSemitone + 12); + private void setAndUpdatePitch(final double newPitch) { + this.pitch = newPitch; + pitchSlider.setProgress(QUADRATIC_STRATEGY.progressOf(pitch)); + setText(pitchCurrentText, PlayerHelper::formatPitch, pitch); } /*////////////////////////////////////////////////////////////////////////// // Helper //////////////////////////////////////////////////////////////////////////*/ - private void setCurrentPlaybackParameters() { - if (getCurrentAdjustBySemitones()) { - setPlaybackParameters( - getCurrentTempo(), - semitonesToPercent(getCurrentSemitones()), - getCurrentSemitones(), - getCurrentSkipSilence() - ); - } else { - setPlaybackParameters( - getCurrentTempo(), - getCurrentPitch(), - percentToSemitones(getCurrentPitch()), - getCurrentSkipSilence() + private void updateCallback() { + if (callback == null) { + return; + } + if (DEBUG) { + Log.d(TAG, "Updating callback: " + + "tempo = [" + tempo + "], " + + "pitch = [" + pitch + "], " + + "skipSilence = [" + skipSilence + "]" ); } - } - - private void setPlaybackParameters(final double newTempo, final double newPitch, - final int newSemitones, final boolean skipSilence) { - if (callback != null && tempoCurrentText != null - && pitchCurrentText != null && semitoneCurrentText != null) { - if (DEBUG) { - Log.d(TAG, "Setting playback parameters to " - + "tempo=[" + newTempo + "], " - + "pitch=[" + newPitch + "], " - + "semitones=[" + newSemitones + "]"); - } - - tempoCurrentText.setText(PlayerHelper.formatSpeed(newTempo)); - pitchCurrentText.setText(PlayerHelper.formatPitch(newPitch)); - semitoneCurrentText.setText(getSignedSemitonesString(newSemitones)); - callback.onPlaybackParameterChanged((float) newTempo, (float) newPitch, skipSilence); - } - } - - private double getCurrentTempo() { - return tempoSlider == null ? tempo : strategy.valueOf(tempoSlider.getProgress()); - } - - private double getCurrentPitch() { - return pitchSlider == null ? pitch : strategy.valueOf(pitchSlider.getProgress()); - } - - private int getCurrentSemitones() { - // semitoneSlider is absolute, that's why - 12 - return semitoneSlider == null ? semitones : semitoneSlider.getProgress() - 12; - } - - private boolean getCurrentSkipSilence() { - return skipSilenceCheckbox != null && skipSilenceCheckbox.isChecked(); - } - - private boolean getCurrentAdjustBySemitones() { - return adjustBySemitonesCheckbox != null && adjustBySemitonesCheckbox.isChecked(); + callback.onPlaybackParameterChanged((float) tempo, (float) pitch, skipSilence); } @NonNull private static String getStepUpPercentString(final double percent) { - return STEP_UP_SIGN + getPercentString(percent); + return '+' + getPercentString(percent); } @NonNull private static String getStepDownPercentString(final double percent) { - return STEP_DOWN_SIGN + getPercentString(percent); + return '-' + getPercentString(percent); } @NonNull @@ -663,21 +398,8 @@ public class PlaybackParameterDialog extends DialogFragment { return PlayerHelper.formatPitch(percent); } - @NonNull - private static String getSignedSemitonesString(final int semitones) { - return semitones > 0 ? "+" + semitones : "" + semitones; - } - public interface Callback { void onPlaybackParameterChanged(float playbackTempo, float playbackPitch, boolean playbackSkipSilence); } - - public double semitonesToPercent(final int inSemitones) { - return Math.pow(2, inSemitones / 12.0); - } - - public int percentToSemitones(final double inPercent) { - return (int) Math.round(12 * Math.log(inPercent) / Math.log(2)); - } } From 4cdf6eda2cf3d9073d9ccad7c339bfb1856189c2 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Mon, 28 Feb 2022 20:45:23 +0100 Subject: [PATCH 05/33] Use viewbinding --- .../helper/PlaybackParameterDialog.java | 124 ++++++------------ 1 file changed, 42 insertions(+), 82 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index b72b7ea7b..e1874fec0 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -7,12 +7,10 @@ import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.Log; -import android.view.View; -import android.widget.CheckBox; +import android.view.LayoutInflater; import android.widget.SeekBar; import android.widget.TextView; -import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -20,6 +18,7 @@ import androidx.fragment.app.DialogFragment; import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; +import org.schabi.newpipe.databinding.DialogPlaybackParameterBinding; import org.schabi.newpipe.util.SliderStrategy; import java.util.Objects; @@ -72,18 +71,7 @@ public class PlaybackParameterDialog extends DialogFragment { @State boolean skipSilence = DEFAULT_SKIP_SILENCE; - private SeekBar tempoSlider; - private TextView tempoCurrentText; - private TextView tempoStepDownText; - private TextView tempoStepUpText; - - private SeekBar pitchSlider; - private TextView pitchCurrentText; - private TextView pitchStepDownText; - private TextView pitchStepUpText; - - private CheckBox unhookingCheckbox; - private CheckBox skipSilenceCheckbox; + private DialogPlaybackParameterBinding binding; public static PlaybackParameterDialog newInstance( final double playbackTempo, @@ -110,7 +98,7 @@ public class PlaybackParameterDialog extends DialogFragment { //////////////////////////////////////////////////////////////////////////*/ @Override - public void onAttach(final Context context) { + public void onAttach(@NonNull final Context context) { super.onAttach(context); if (context instanceof Callback) { callback = (Callback) context; @@ -120,7 +108,7 @@ public class PlaybackParameterDialog extends DialogFragment { } @Override - public void onSaveInstanceState(final Bundle outState) { + public void onSaveInstanceState(@NonNull final Bundle outState) { super.onSaveInstanceState(outState); Icepick.saveInstanceState(this, outState); } @@ -135,12 +123,12 @@ public class PlaybackParameterDialog extends DialogFragment { assureCorrectAppLanguage(getContext()); Icepick.restoreInstanceState(this, savedInstanceState); - final View view = View.inflate(getContext(), R.layout.dialog_playback_parameter, null); - initUI(view); + binding = DialogPlaybackParameterBinding.inflate(LayoutInflater.from(getContext())); + initUI(); initUIData(); final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireActivity()) - .setView(view) + .setView(binding.getRoot()) .setCancelable(true) .setNegativeButton(R.string.cancel, (dialogInterface, i) -> { setAndUpdateTempo(initialTempo); @@ -163,37 +151,21 @@ public class PlaybackParameterDialog extends DialogFragment { // Control Views //////////////////////////////////////////////////////////////////////////*/ - private void initUI(@NonNull final View rootView) { + private void initUI() { // Tempo - tempoSlider = Objects.requireNonNull(rootView.findViewById(R.id.tempoSeekbar)); - tempoCurrentText = Objects.requireNonNull(rootView.findViewById(R.id.tempoCurrentText)); - tempoStepUpText = Objects.requireNonNull(rootView.findViewById(R.id.tempoStepUp)); - tempoStepDownText = Objects.requireNonNull(rootView.findViewById(R.id.tempoStepDown)); - - setText(rootView, R.id.tempoMinimumText, PlayerHelper::formatSpeed, MINIMUM_PLAYBACK_VALUE); - setText(rootView, R.id.tempoMaximumText, PlayerHelper::formatSpeed, MAXIMUM_PLAYBACK_VALUE); + setText(binding.tempoMinimumText, PlayerHelper::formatSpeed, MINIMUM_PLAYBACK_VALUE); + setText(binding.tempoMaximumText, PlayerHelper::formatSpeed, MAXIMUM_PLAYBACK_VALUE); // Pitch - pitchSlider = Objects.requireNonNull(rootView.findViewById(R.id.pitchSeekbar)); - pitchCurrentText = Objects.requireNonNull(rootView.findViewById(R.id.pitchCurrentText)); - pitchStepUpText = Objects.requireNonNull(rootView.findViewById(R.id.pitchStepUp)); - pitchStepDownText = Objects.requireNonNull(rootView.findViewById(R.id.pitchStepDown)); - - setText(rootView, R.id.pitchMinimumText, PlayerHelper::formatPitch, MINIMUM_PLAYBACK_VALUE); - setText(rootView, R.id.pitchMaximumText, PlayerHelper::formatPitch, MAXIMUM_PLAYBACK_VALUE); + setText(binding.pitchMinimumText, PlayerHelper::formatPitch, MINIMUM_PLAYBACK_VALUE); + setText(binding.pitchMaximumText, PlayerHelper::formatPitch, MAXIMUM_PLAYBACK_VALUE); // Steps - setupStepTextView(rootView, R.id.stepSizeOnePercent, STEP_1_PERCENT_VALUE); - setupStepTextView(rootView, R.id.stepSizeFivePercent, STEP_5_PERCENT_VALUE); - setupStepTextView(rootView, R.id.stepSizeTenPercent, STEP_10_PERCENT_VALUE); - setupStepTextView(rootView, R.id.stepSizeTwentyFivePercent, STEP_25_PERCENT_VALUE); - setupStepTextView(rootView, R.id.stepSizeOneHundredPercent, STEP_100_PERCENT_VALUE); - - // Bottom controls - unhookingCheckbox = - Objects.requireNonNull(rootView.findViewById(R.id.unhookCheckbox)); - skipSilenceCheckbox = - Objects.requireNonNull(rootView.findViewById(R.id.skipSilenceCheckbox)); + setupStepTextView(binding.stepSizeOnePercent, STEP_1_PERCENT_VALUE); + setupStepTextView(binding.stepSizeFivePercent, STEP_5_PERCENT_VALUE); + setupStepTextView(binding.stepSizeTenPercent, STEP_10_PERCENT_VALUE); + setupStepTextView(binding.stepSizeTwentyFivePercent, STEP_25_PERCENT_VALUE); + setupStepTextView(binding.stepSizeOneHundredPercent, STEP_100_PERCENT_VALUE); } private TextView setText( @@ -205,59 +177,47 @@ public class PlaybackParameterDialog extends DialogFragment { return textView; } - private TextView setText( - final View rootView, - @IdRes final int idRes, - final DoubleFunction formatter, - final double value - ) { - final TextView textView = rootView.findViewById(idRes); - setText(textView, formatter, value); - return textView; - } - private void setupStepTextView( - final View rootView, - @IdRes final int idRes, + final TextView textView, final double stepSizeValue ) { - setText(rootView, idRes, PlaybackParameterDialog::getPercentString, stepSizeValue) + setText(textView, PlaybackParameterDialog::getPercentString, stepSizeValue) .setOnClickListener(view -> setAndUpdateStepSize(stepSizeValue)); } private void initUIData() { // Tempo - tempoSlider.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); + binding.tempoSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); setAndUpdateTempo(tempo); - tempoSlider.setOnSeekBarChangeListener( + binding.tempoSeekbar.setOnSeekBarChangeListener( getTempoOrPitchSeekbarChangeListener(this::onTempoSliderUpdated)); registerOnStepClickListener( - tempoStepDownText, tempo, -1, this::onTempoSliderUpdated); + binding.tempoStepDown, tempo, -1, this::onTempoSliderUpdated); registerOnStepClickListener( - tempoStepUpText, tempo, 1, this::onTempoSliderUpdated); + binding.tempoStepUp, tempo, 1, this::onTempoSliderUpdated); // Pitch - pitchSlider.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); + binding.pitchSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); setAndUpdatePitch(pitch); - pitchSlider.setOnSeekBarChangeListener( + binding.pitchSeekbar.setOnSeekBarChangeListener( getTempoOrPitchSeekbarChangeListener(this::onPitchSliderUpdated)); registerOnStepClickListener( - pitchStepDownText, pitch, -1, this::onPitchSliderUpdated); + binding.pitchStepDown, pitch, -1, this::onPitchSliderUpdated); registerOnStepClickListener( - pitchStepUpText, pitch, 1, this::onPitchSliderUpdated); + binding.pitchStepUp, pitch, 1, this::onPitchSliderUpdated); // Steps setAndUpdateStepSize(stepSize); // Bottom controls // restore whether pitch and tempo are unhooked or not - unhookingCheckbox.setChecked(PreferenceManager + binding.unhookCheckbox.setChecked(PreferenceManager .getDefaultSharedPreferences(requireContext()) .getBoolean(getString(R.string.playback_unhook_key), true)); - unhookingCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { + binding.unhookCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { // save whether pitch and tempo are unhooked or not PreferenceManager.getDefaultSharedPreferences(requireContext()) .edit() @@ -271,7 +231,7 @@ public class PlaybackParameterDialog extends DialogFragment { }); setAndUpdateSkipSilence(skipSilence); - skipSilenceCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { + binding.skipSilenceCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { skipSilence = isChecked; updateCallback(); }); @@ -291,16 +251,16 @@ public class PlaybackParameterDialog extends DialogFragment { private void setAndUpdateStepSize(final double newStepSize) { this.stepSize = newStepSize; - tempoStepUpText.setText(getStepUpPercentString(newStepSize)); - tempoStepDownText.setText(getStepDownPercentString(newStepSize)); + binding.tempoStepUp.setText(getStepUpPercentString(newStepSize)); + binding.tempoStepDown.setText(getStepDownPercentString(newStepSize)); - pitchStepUpText.setText(getStepUpPercentString(newStepSize)); - pitchStepDownText.setText(getStepDownPercentString(newStepSize)); + binding.pitchStepUp.setText(getStepUpPercentString(newStepSize)); + binding.pitchStepDown.setText(getStepDownPercentString(newStepSize)); } private void setAndUpdateSkipSilence(final boolean newSkipSilence) { this.skipSilence = newSkipSilence; - skipSilenceCheckbox.setChecked(newSkipSilence); + binding.skipSilenceCheckbox.setChecked(newSkipSilence); } /*////////////////////////////////////////////////////////////////////////// @@ -333,7 +293,7 @@ public class PlaybackParameterDialog extends DialogFragment { } private void onTempoSliderUpdated(final double newTempo) { - if (!unhookingCheckbox.isChecked()) { + if (!binding.unhookCheckbox.isChecked()) { setSliders(newTempo); } else { setAndUpdateTempo(newTempo); @@ -341,7 +301,7 @@ public class PlaybackParameterDialog extends DialogFragment { } private void onPitchSliderUpdated(final double newPitch) { - if (!unhookingCheckbox.isChecked()) { + if (!binding.unhookCheckbox.isChecked()) { setSliders(newPitch); } else { setAndUpdatePitch(newPitch); @@ -355,14 +315,14 @@ public class PlaybackParameterDialog extends DialogFragment { private void setAndUpdateTempo(final double newTempo) { this.tempo = newTempo; - tempoSlider.setProgress(QUADRATIC_STRATEGY.progressOf(tempo)); - setText(tempoCurrentText, PlayerHelper::formatSpeed, tempo); + binding.tempoSeekbar.setProgress(QUADRATIC_STRATEGY.progressOf(tempo)); + setText(binding.tempoCurrentText, PlayerHelper::formatSpeed, tempo); } private void setAndUpdatePitch(final double newPitch) { this.pitch = newPitch; - pitchSlider.setProgress(QUADRATIC_STRATEGY.progressOf(pitch)); - setText(pitchCurrentText, PlayerHelper::formatPitch, pitch); + binding.pitchSeekbar.setProgress(QUADRATIC_STRATEGY.progressOf(pitch)); + setText(binding.pitchCurrentText, PlayerHelper::formatPitch, pitch); } /*////////////////////////////////////////////////////////////////////////// From 6e0c3804097a1e3749d329c82e8cca3c72d7ec18 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Mon, 28 Feb 2022 21:02:43 +0100 Subject: [PATCH 06/33] Remove redundant attributes --- .../res/layout/dialog_playback_parameter.xml | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/app/src/main/res/layout/dialog_playback_parameter.xml b/app/src/main/res/layout/dialog_playback_parameter.xml index 862b2ea67..27cf0dbd6 100644 --- a/app/src/main/res/layout/dialog_playback_parameter.xml +++ b/app/src/main/res/layout/dialog_playback_parameter.xml @@ -39,7 +39,6 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="?attr/selectableItemBackground" android:clickable="true" @@ -57,9 +56,7 @@ android:layout_marginLeft="4dp" android:layout_marginRight="4dp" android:layout_toStartOf="@id/tempoStepUp" - android:layout_toLeftOf="@id/tempoStepUp" android:layout_toEndOf="@id/tempoStepDown" - android:layout_toRightOf="@id/tempoStepDown" android:orientation="horizontal"> Date: Mon, 28 Feb 2022 21:04:24 +0100 Subject: [PATCH 07/33] Remove invalid parameters --- app/src/main/res/layout/dialog_playback_parameter.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/layout/dialog_playback_parameter.xml b/app/src/main/res/layout/dialog_playback_parameter.xml index 27cf0dbd6..87c26b831 100644 --- a/app/src/main/res/layout/dialog_playback_parameter.xml +++ b/app/src/main/res/layout/dialog_playback_parameter.xml @@ -463,8 +463,6 @@ android:id="@+id/adjustBySemitonesCheckbox" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_below="@id/skipSilenceCheckbox" - android:layout_centerHorizontal="true" android:checked="false" android:clickable="true" android:focusable="true" From a4c083e7f98c535993c9e22d9d3ae99d5c410a0c Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Tue, 1 Mar 2022 20:52:48 +0100 Subject: [PATCH 08/33] Rework dialog * De-Duplicated some fields * Use a container for the pitch controls * Name pitch related elements correctly --- .../res/layout/dialog_playback_parameter.xml | 310 +++++++++--------- 1 file changed, 157 insertions(+), 153 deletions(-) diff --git a/app/src/main/res/layout/dialog_playback_parameter.xml b/app/src/main/res/layout/dialog_playback_parameter.xml index 87c26b831..47394b724 100644 --- a/app/src/main/res/layout/dialog_playback_parameter.xml +++ b/app/src/main/res/layout/dialog_playback_parameter.xml @@ -29,7 +29,7 @@ @@ -146,203 +146,207 @@ android:textStyle="bold" /> - - + android:layout_marginTop="3dp"> - - + tools:text="-5%" /> + + + + + + + + + + + - - + tools:text="+5%" /> - - - - - - - - - - - - - + android:layout_height="match_parent" + android:layout_marginLeft="4dp" + android:layout_marginRight="4dp" + android:layout_toStartOf="@+id/pitchSemitoneStepUp" + android:layout_toEndOf="@+id/pitchSemitoneStepDown" + android:orientation="horizontal"> - + + + + + + + + + + + Date: Tue, 1 Mar 2022 21:19:30 +0100 Subject: [PATCH 09/33] Shrunk dialog a bit --- app/src/main/res/layout/dialog_playback_parameter.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/dialog_playback_parameter.xml b/app/src/main/res/layout/dialog_playback_parameter.xml index 47394b724..1ab9a95e9 100644 --- a/app/src/main/res/layout/dialog_playback_parameter.xml +++ b/app/src/main/res/layout/dialog_playback_parameter.xml @@ -356,7 +356,7 @@ From dae5aa38a83a892f43a3589a21bada854601273d Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Wed, 2 Mar 2022 20:58:14 +0100 Subject: [PATCH 10/33] Fine tuned dialog (no scrollers in fullscreen on 5in phone) --- .../res/layout/dialog_playback_parameter.xml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/layout/dialog_playback_parameter.xml b/app/src/main/res/layout/dialog_playback_parameter.xml index 1ab9a95e9..75269ffd3 100644 --- a/app/src/main/res/layout/dialog_playback_parameter.xml +++ b/app/src/main/res/layout/dialog_playback_parameter.xml @@ -31,7 +31,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tempoControlText" - android:layout_marginTop="3dp" + android:layout_marginTop="1dp" android:orientation="horizontal"> @@ -129,9 +129,9 @@ android:layout_height="1dp" android:layout_below="@id/tempoControl" android:layout_marginStart="12dp" - android:layout_marginTop="6dp" - android:layout_marginEnd="6dp" - android:layout_marginBottom="6dp" + android:layout_marginTop="4dp" + android:layout_marginEnd="12dp" + android:layout_marginBottom="4dp" android:background="?attr/separator_color" /> + android:layout_marginTop="1dp"> @@ -319,7 +319,7 @@ android:layout_height="wrap_content" android:layout_below="@+id/pitchSemitoneCurrentText" android:max="24" - android:paddingBottom="4dp" + android:paddingBottom="2dp" android:progress="12" /> @@ -348,9 +348,9 @@ android:layout_height="1dp" android:layout_below="@+id/pitchControlContainer" android:layout_marginStart="12dp" - android:layout_marginTop="6dp" + android:layout_marginTop="4dp" android:layout_marginEnd="12dp" - android:layout_marginBottom="6dp" + android:layout_marginBottom="4dp" android:background="?attr/separator_color" /> Date: Wed, 2 Mar 2022 21:00:19 +0100 Subject: [PATCH 11/33] Reworked/Implemented PlaybackParameterDialog functionallity * Add support for semitones * Fixed some minor bugs * Improved some methods --- .../helper/PlaybackParameterDialog.java | 320 +++++++++++++----- .../player/helper/PlayerSemitoneHelper.java | 37 ++ 2 files changed, 264 insertions(+), 93 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index e1874fec0..709216ece 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -8,11 +8,14 @@ import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; +import android.view.View; +import android.widget.CheckBox; import android.widget.SeekBar; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.preference.PreferenceManager; @@ -22,8 +25,10 @@ import org.schabi.newpipe.databinding.DialogPlaybackParameterBinding; import org.schabi.newpipe.util.SliderStrategy; import java.util.Objects; +import java.util.function.Consumer; import java.util.function.DoubleConsumer; import java.util.function.DoubleFunction; +import java.util.function.DoubleSupplier; import icepick.Icepick; import icepick.State; @@ -32,8 +37,8 @@ public class PlaybackParameterDialog extends DialogFragment { private static final String TAG = "PlaybackParameterDialog"; // Minimum allowable range in ExoPlayer - private static final double MINIMUM_PLAYBACK_VALUE = 0.10f; - private static final double MAXIMUM_PLAYBACK_VALUE = 3.00f; + private static final double MIN_PLAYBACK_VALUE = 0.10f; + private static final double MAX_PLAYBACK_VALUE = 3.00f; private static final double STEP_1_PERCENT_VALUE = 0.01f; private static final double STEP_5_PERCENT_VALUE = 0.05f; @@ -42,30 +47,42 @@ public class PlaybackParameterDialog extends DialogFragment { private static final double STEP_100_PERCENT_VALUE = 1.00f; private static final double DEFAULT_TEMPO = 1.00f; - private static final double DEFAULT_PITCH = 1.00f; + private static final double DEFAULT_PITCH_PERCENT = 1.00f; private static final double DEFAULT_STEP = STEP_25_PERCENT_VALUE; private static final boolean DEFAULT_SKIP_SILENCE = false; private static final SliderStrategy QUADRATIC_STRATEGY = new SliderStrategy.Quadratic( - MINIMUM_PLAYBACK_VALUE, - MAXIMUM_PLAYBACK_VALUE, + MIN_PLAYBACK_VALUE, + MAX_PLAYBACK_VALUE, 1.00f, 10_000); + private static final SliderStrategy SEMITONE_STRATEGY = new SliderStrategy() { + @Override + public int progressOf(final double value) { + return PlayerSemitoneHelper.percentToSemitones(value) + 12; + } + + @Override + public double valueOf(final int progress) { + return PlayerSemitoneHelper.semitonesToPercent(progress - 12); + } + }; + @Nullable private Callback callback; @State double initialTempo = DEFAULT_TEMPO; @State - double initialPitch = DEFAULT_PITCH; + double initialPitchPercent = DEFAULT_PITCH_PERCENT; @State boolean initialSkipSilence = DEFAULT_SKIP_SILENCE; @State double tempo = DEFAULT_TEMPO; @State - double pitch = DEFAULT_PITCH; + double pitchPercent = DEFAULT_PITCH_PERCENT; @State double stepSize = DEFAULT_STEP; @State @@ -83,11 +100,11 @@ public class PlaybackParameterDialog extends DialogFragment { dialog.callback = callback; dialog.initialTempo = playbackTempo; - dialog.initialPitch = playbackPitch; + dialog.initialPitchPercent = playbackPitch; dialog.initialSkipSilence = playbackSkipSilence; dialog.tempo = dialog.initialTempo; - dialog.pitch = dialog.initialPitch; + dialog.pitchPercent = dialog.initialPitchPercent; dialog.skipSilence = dialog.initialSkipSilence; return dialog; @@ -125,20 +142,19 @@ public class PlaybackParameterDialog extends DialogFragment { binding = DialogPlaybackParameterBinding.inflate(LayoutInflater.from(getContext())); initUI(); - initUIData(); final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireActivity()) .setView(binding.getRoot()) .setCancelable(true) .setNegativeButton(R.string.cancel, (dialogInterface, i) -> { setAndUpdateTempo(initialTempo); - setAndUpdatePitch(initialPitch); + setAndUpdatePitch(initialPitchPercent); setAndUpdateSkipSilence(initialSkipSilence); updateCallback(); }) .setNeutralButton(R.string.playback_reset, (dialogInterface, i) -> { setAndUpdateTempo(DEFAULT_TEMPO); - setAndUpdatePitch(DEFAULT_PITCH); + setAndUpdatePitch(DEFAULT_PITCH_PERCENT); setAndUpdateSkipSilence(DEFAULT_SKIP_SILENCE); updateCallback(); }) @@ -153,12 +169,63 @@ public class PlaybackParameterDialog extends DialogFragment { private void initUI() { // Tempo - setText(binding.tempoMinimumText, PlayerHelper::formatSpeed, MINIMUM_PLAYBACK_VALUE); - setText(binding.tempoMaximumText, PlayerHelper::formatSpeed, MAXIMUM_PLAYBACK_VALUE); + setText(binding.tempoMinimumText, PlayerHelper::formatSpeed, MIN_PLAYBACK_VALUE); + setText(binding.tempoMaximumText, PlayerHelper::formatSpeed, MAX_PLAYBACK_VALUE); - // Pitch - setText(binding.pitchMinimumText, PlayerHelper::formatPitch, MINIMUM_PLAYBACK_VALUE); - setText(binding.pitchMaximumText, PlayerHelper::formatPitch, MAXIMUM_PLAYBACK_VALUE); + binding.tempoSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAX_PLAYBACK_VALUE)); + setAndUpdateTempo(tempo); + binding.tempoSeekbar.setOnSeekBarChangeListener( + getTempoOrPitchSeekbarChangeListener( + QUADRATIC_STRATEGY, + this::onTempoSliderUpdated)); + + registerOnStepClickListener( + binding.tempoStepDown, + () -> tempo, + -1, + this::onTempoSliderUpdated); + registerOnStepClickListener( + binding.tempoStepUp, + () -> tempo, + 1, + this::onTempoSliderUpdated); + + // Pitch - Percent + setText(binding.pitchPercentMinimumText, PlayerHelper::formatPitch, MIN_PLAYBACK_VALUE); + setText(binding.pitchPercentMaximumText, PlayerHelper::formatPitch, MAX_PLAYBACK_VALUE); + + binding.pitchPercentSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAX_PLAYBACK_VALUE)); + setAndUpdatePitch(pitchPercent); + binding.pitchPercentSeekbar.setOnSeekBarChangeListener( + getTempoOrPitchSeekbarChangeListener( + QUADRATIC_STRATEGY, + this::onPitchPercentSliderUpdated)); + + registerOnStepClickListener( + binding.pitchPercentStepDown, + () -> pitchPercent, + -1, + this::onPitchPercentSliderUpdated); + registerOnStepClickListener( + binding.pitchPercentStepUp, + () -> pitchPercent, + 1, + this::onPitchPercentSliderUpdated); + + // Pitch - Semitone + binding.pitchSemitoneSeekbar.setOnSeekBarChangeListener( + getTempoOrPitchSeekbarChangeListener( + SEMITONE_STRATEGY, + this::onPitchPercentSliderUpdated)); + + registerOnSemitoneStepClickListener( + binding.pitchSemitoneStepDown, + -1, + this::onPitchPercentSliderUpdated); + registerOnSemitoneStepClickListener( + binding.pitchSemitoneStepUp, + 1, + this::onPitchPercentSliderUpdated); // Steps setupStepTextView(binding.stepSizeOnePercent, STEP_1_PERCENT_VALUE); @@ -166,6 +233,34 @@ public class PlaybackParameterDialog extends DialogFragment { setupStepTextView(binding.stepSizeTenPercent, STEP_10_PERCENT_VALUE); setupStepTextView(binding.stepSizeTwentyFivePercent, STEP_25_PERCENT_VALUE); setupStepTextView(binding.stepSizeOneHundredPercent, STEP_100_PERCENT_VALUE); + + setAndUpdateStepSize(stepSize); + + // Bottom controls + bindCheckboxWithBoolPref( + binding.unhookCheckbox, + R.string.playback_unhook_key, + true, + isChecked -> { + if (!isChecked) { + // when unchecked, slide back to the minimum of current tempo or pitch + setSliders(Math.min(pitchPercent, tempo)); + updateCallback(); + } + }); + + setAndUpdateSkipSilence(skipSilence); + binding.skipSilenceCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { + skipSilence = isChecked; + updateCallback(); + }); + + bindCheckboxWithBoolPref( + binding.adjustBySemitonesCheckbox, + R.string.playback_adjust_by_semitones_key, + false, + this::showPitchSemitonesOrPercent + ); } private TextView setText( @@ -177,6 +272,31 @@ public class PlaybackParameterDialog extends DialogFragment { return textView; } + private void registerOnStepClickListener( + final TextView stepTextView, + final DoubleSupplier currentValueSupplier, + final double direction, // -1 for step down, +1 for step up + final DoubleConsumer newValueConsumer + ) { + stepTextView.setOnClickListener(view -> { + newValueConsumer.accept( + currentValueSupplier.getAsDouble() + 1 * stepSize * direction); + updateCallback(); + }); + } + + private void registerOnSemitoneStepClickListener( + final TextView stepTextView, + final int direction, // -1 for step down, +1 for step up + final DoubleConsumer newValueConsumer + ) { + stepTextView.setOnClickListener(view -> { + newValueConsumer.accept(PlayerSemitoneHelper.semitonesToPercent( + PlayerSemitoneHelper.percentToSemitones(this.pitchPercent) + direction)); + updateCallback(); + }); + } + private void setupStepTextView( final TextView textView, final double stepSizeValue @@ -185,77 +305,14 @@ public class PlaybackParameterDialog extends DialogFragment { .setOnClickListener(view -> setAndUpdateStepSize(stepSizeValue)); } - private void initUIData() { - // Tempo - binding.tempoSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); - setAndUpdateTempo(tempo); - binding.tempoSeekbar.setOnSeekBarChangeListener( - getTempoOrPitchSeekbarChangeListener(this::onTempoSliderUpdated)); - - registerOnStepClickListener( - binding.tempoStepDown, tempo, -1, this::onTempoSliderUpdated); - registerOnStepClickListener( - binding.tempoStepUp, tempo, 1, this::onTempoSliderUpdated); - - // Pitch - binding.pitchSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAXIMUM_PLAYBACK_VALUE)); - setAndUpdatePitch(pitch); - binding.pitchSeekbar.setOnSeekBarChangeListener( - getTempoOrPitchSeekbarChangeListener(this::onPitchSliderUpdated)); - - registerOnStepClickListener( - binding.pitchStepDown, pitch, -1, this::onPitchSliderUpdated); - registerOnStepClickListener( - binding.pitchStepUp, pitch, 1, this::onPitchSliderUpdated); - - // Steps - setAndUpdateStepSize(stepSize); - - // Bottom controls - // restore whether pitch and tempo are unhooked or not - binding.unhookCheckbox.setChecked(PreferenceManager - .getDefaultSharedPreferences(requireContext()) - .getBoolean(getString(R.string.playback_unhook_key), true)); - - binding.unhookCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { - // save whether pitch and tempo are unhooked or not - PreferenceManager.getDefaultSharedPreferences(requireContext()) - .edit() - .putBoolean(getString(R.string.playback_unhook_key), isChecked) - .apply(); - - if (!isChecked) { - // when unchecked, slide back to the minimum of current tempo or pitch - setSliders(Math.min(pitch, tempo)); - } - }); - - setAndUpdateSkipSilence(skipSilence); - binding.skipSilenceCheckbox.setOnCheckedChangeListener((compoundButton, isChecked) -> { - skipSilence = isChecked; - updateCallback(); - }); - } - - private void registerOnStepClickListener( - final TextView stepTextView, - final double currentValue, - final double direction, // -1 for step down, +1 for step up - final DoubleConsumer newValueConsumer - ) { - stepTextView.setOnClickListener(view -> - newValueConsumer.accept(currentValue * direction) - ); - } - private void setAndUpdateStepSize(final double newStepSize) { this.stepSize = newStepSize; binding.tempoStepUp.setText(getStepUpPercentString(newStepSize)); binding.tempoStepDown.setText(getStepDownPercentString(newStepSize)); - binding.pitchStepUp.setText(getStepUpPercentString(newStepSize)); - binding.pitchStepDown.setText(getStepDownPercentString(newStepSize)); + binding.pitchPercentStepUp.setText(getStepUpPercentString(newStepSize)); + binding.pitchPercentStepDown.setText(getStepDownPercentString(newStepSize)); } private void setAndUpdateSkipSilence(final boolean newSkipSilence) { @@ -263,19 +320,72 @@ public class PlaybackParameterDialog extends DialogFragment { binding.skipSilenceCheckbox.setChecked(newSkipSilence); } + private void bindCheckboxWithBoolPref( + @NonNull final CheckBox checkBox, + @StringRes final int resId, + final boolean defaultValue, + @Nullable final Consumer onInitialValueOrValueChange + ) { + final boolean prefValue = PreferenceManager + .getDefaultSharedPreferences(requireContext()) + .getBoolean(getString(resId), defaultValue); + + checkBox.setChecked(prefValue); + + if (onInitialValueOrValueChange != null) { + onInitialValueOrValueChange.accept(prefValue); + } + + checkBox.setOnCheckedChangeListener((compoundButton, isChecked) -> { + // save whether pitch and tempo are unhooked or not + PreferenceManager.getDefaultSharedPreferences(requireContext()) + .edit() + .putBoolean(getString(resId), isChecked) + .apply(); + + if (onInitialValueOrValueChange != null) { + onInitialValueOrValueChange.accept(isChecked); + } + }); + } + + private void showPitchSemitonesOrPercent(final boolean semitones) { + binding.pitchPercentControl.setVisibility(semitones ? View.GONE : View.VISIBLE); + binding.pitchSemitoneControl.setVisibility(semitones ? View.VISIBLE : View.GONE); + + if (semitones) { + // Recalculate pitch percent when changing to semitone + // (as it could be an invalid semitone value) + final double newPitchPercent = calcValidPitch(pitchPercent); + + // If the values differ set the new pitch + if (this.pitchPercent != newPitchPercent) { + if (DEBUG) { + Log.d(TAG, "Bringing pitchPercent to correct corresponding semitone: " + + "currentPitchPercent = " + pitchPercent + ", " + + "newPitchPercent = " + newPitchPercent + ); + } + this.onPitchPercentSliderUpdated(newPitchPercent); + updateCallback(); + } + } + } + /*////////////////////////////////////////////////////////////////////////// // Sliders //////////////////////////////////////////////////////////////////////////*/ private SeekBar.OnSeekBarChangeListener getTempoOrPitchSeekbarChangeListener( + final SliderStrategy sliderStrategy, final DoubleConsumer newValueConsumer ) { return new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) { - if (fromUser) { // this change is first in chain - newValueConsumer.accept(QUADRATIC_STRATEGY.valueOf(progress)); + if (fromUser) { // ensure that the user triggered the change + newValueConsumer.accept(sliderStrategy.valueOf(progress)); updateCallback(); } } @@ -300,7 +410,7 @@ public class PlaybackParameterDialog extends DialogFragment { } } - private void onPitchSliderUpdated(final double newPitch) { + private void onPitchPercentSliderUpdated(final double newPitch) { if (!binding.unhookCheckbox.isChecked()) { setSliders(newPitch); } else { @@ -314,15 +424,39 @@ public class PlaybackParameterDialog extends DialogFragment { } private void setAndUpdateTempo(final double newTempo) { - this.tempo = newTempo; + this.tempo = calcValidTempo(newTempo); + binding.tempoSeekbar.setProgress(QUADRATIC_STRATEGY.progressOf(tempo)); setText(binding.tempoCurrentText, PlayerHelper::formatSpeed, tempo); } private void setAndUpdatePitch(final double newPitch) { - this.pitch = newPitch; - binding.pitchSeekbar.setProgress(QUADRATIC_STRATEGY.progressOf(pitch)); - setText(binding.pitchCurrentText, PlayerHelper::formatPitch, pitch); + this.pitchPercent = calcValidPitch(newPitch); + + binding.pitchPercentSeekbar.setProgress(QUADRATIC_STRATEGY.progressOf(pitchPercent)); + binding.pitchSemitoneSeekbar.setProgress(SEMITONE_STRATEGY.progressOf(pitchPercent)); + setText(binding.pitchPercentCurrentText, + PlayerHelper::formatPitch, + pitchPercent); + setText(binding.pitchSemitoneCurrentText, + PlayerSemitoneHelper::formatPitchSemitones, + pitchPercent); + } + + private double calcValidTempo(final double newTempo) { + return Math.max(MIN_PLAYBACK_VALUE, Math.min(MAX_PLAYBACK_VALUE, newTempo)); + } + + private double calcValidPitch(final double newPitch) { + final double calcPitch = + Math.max(MIN_PLAYBACK_VALUE, Math.min(MAX_PLAYBACK_VALUE, newPitch)); + + if (!binding.adjustBySemitonesCheckbox.isChecked()) { + return calcPitch; + } + + return PlayerSemitoneHelper.semitonesToPercent( + PlayerSemitoneHelper.percentToSemitones(calcPitch)); } /*////////////////////////////////////////////////////////////////////////// @@ -335,12 +469,12 @@ public class PlaybackParameterDialog extends DialogFragment { } if (DEBUG) { Log.d(TAG, "Updating callback: " - + "tempo = [" + tempo + "], " - + "pitch = [" + pitch + "], " - + "skipSilence = [" + skipSilence + "]" + + "tempo = " + tempo + ", " + + "pitchPercent = " + pitchPercent + ", " + + "skipSilence = " + skipSilence ); } - callback.onPlaybackParameterChanged((float) tempo, (float) pitch, skipSilence); + callback.onPlaybackParameterChanged((float) tempo, (float) pitchPercent, skipSilence); } @NonNull diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java new file mode 100644 index 000000000..abbcc2c82 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java @@ -0,0 +1,37 @@ +package org.schabi.newpipe.player.helper; + +/** + * Converts between percent and 12-tone equal temperament semitones. + *
+ * @see + * + * Wikipedia: Equal temperament#Twelve-tone equal temperament + * + */ +public final class PlayerSemitoneHelper { + public static final int TONES = 12; + + private PlayerSemitoneHelper() { + // No impl + } + + public static String formatPitchSemitones(final double percent) { + return formatPitchSemitones(percentToSemitones(percent)); + } + + public static String formatPitchSemitones(final int semitones) { + return semitones > 0 ? "+" + semitones : "" + semitones; + } + + public static double semitonesToPercent(final int semitones) { + return Math.pow(2, ensureSemitonesInRange(semitones) / (double) TONES); + } + + public static int percentToSemitones(final double percent) { + return ensureSemitonesInRange((int) Math.round(TONES * Math.log(percent) / Math.log(2))); + } + + private static int ensureSemitonesInRange(final int semitones) { + return Math.max(-TONES, Math.min(TONES, semitones)); + } +} From 321cf8bf7d7a419913f58697cb4cb7e5630212d7 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Fri, 4 Mar 2022 21:33:21 +0100 Subject: [PATCH 12/33] Fine tuned dialog --- .../res/layout/dialog_playback_parameter.xml | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/app/src/main/res/layout/dialog_playback_parameter.xml b/app/src/main/res/layout/dialog_playback_parameter.xml index 75269ffd3..640475f39 100644 --- a/app/src/main/res/layout/dialog_playback_parameter.xml +++ b/app/src/main/res/layout/dialog_playback_parameter.xml @@ -1,5 +1,6 @@ + android:orientation="horizontal" + tools:visibility="gone"> + tools:text="0" + tools:ignore="RelativeOverlap" /> + android:textColor="?attr/colorAccent" + tools:text="1%" /> + android:textColor="?attr/colorAccent" + tools:text="5%" /> + android:textColor="?attr/colorAccent" + tools:text="10%" /> + android:textColor="?attr/colorAccent" + tools:text="25%" /> - + android:textColor="?attr/colorAccent" + tools:text="100%" /> Date: Fri, 4 Mar 2022 21:34:45 +0100 Subject: [PATCH 13/33] Code improvements regarding stepSize --- .../helper/PlaybackParameterDialog.java | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index 709216ece..eab64e483 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -84,8 +84,6 @@ public class PlaybackParameterDialog extends DialogFragment { @State double pitchPercent = DEFAULT_PITCH_PERCENT; @State - double stepSize = DEFAULT_STEP; - @State boolean skipSilence = DEFAULT_SKIP_SILENCE; private DialogPlaybackParameterBinding binding; @@ -228,13 +226,10 @@ public class PlaybackParameterDialog extends DialogFragment { this::onPitchPercentSliderUpdated); // Steps - setupStepTextView(binding.stepSizeOnePercent, STEP_1_PERCENT_VALUE); - setupStepTextView(binding.stepSizeFivePercent, STEP_5_PERCENT_VALUE); - setupStepTextView(binding.stepSizeTenPercent, STEP_10_PERCENT_VALUE); - setupStepTextView(binding.stepSizeTwentyFivePercent, STEP_25_PERCENT_VALUE); - setupStepTextView(binding.stepSizeOneHundredPercent, STEP_100_PERCENT_VALUE); - - setAndUpdateStepSize(stepSize); + getStepSizeComponentMappings() + .forEach(this::setupStepTextView); + // Initialize UI + setStepSizeToUI(getCurrentStepSize()); // Bottom controls bindCheckboxWithBoolPref( @@ -263,13 +258,12 @@ public class PlaybackParameterDialog extends DialogFragment { ); } - private TextView setText( + private void setText( final TextView textView, final DoubleFunction formatter, final double value ) { Objects.requireNonNull(textView).setText(formatter.apply(value)); - return textView; } private void registerOnStepClickListener( @@ -280,7 +274,7 @@ public class PlaybackParameterDialog extends DialogFragment { ) { stepTextView.setOnClickListener(view -> { newValueConsumer.accept( - currentValueSupplier.getAsDouble() + 1 * stepSize * direction); + currentValueSupplier.getAsDouble() + 1 * getCurrentStepSize() * direction); updateCallback(); }); } @@ -315,16 +309,22 @@ public class PlaybackParameterDialog extends DialogFragment { binding.pitchPercentStepDown.setText(getStepDownPercentString(newStepSize)); } + private double getCurrentStepSize() { + return PreferenceManager.getDefaultSharedPreferences(requireContext()) + .getFloat(getString(R.string.adjustment_step_key), (float) DEFAULT_STEP); + } + private void setAndUpdateSkipSilence(final boolean newSkipSilence) { this.skipSilence = newSkipSilence; binding.skipSilenceCheckbox.setChecked(newSkipSilence); } + @SuppressWarnings("SameParameterValue") // this method was written to be reusable private void bindCheckboxWithBoolPref( @NonNull final CheckBox checkBox, @StringRes final int resId, final boolean defaultValue, - @Nullable final Consumer onInitialValueOrValueChange + @NonNull final Consumer onInitialValueOrValueChange ) { final boolean prefValue = PreferenceManager .getDefaultSharedPreferences(requireContext()) @@ -332,9 +332,7 @@ public class PlaybackParameterDialog extends DialogFragment { checkBox.setChecked(prefValue); - if (onInitialValueOrValueChange != null) { - onInitialValueOrValueChange.accept(prefValue); - } + onInitialValueOrValueChange.accept(prefValue); checkBox.setOnCheckedChangeListener((compoundButton, isChecked) -> { // save whether pitch and tempo are unhooked or not @@ -343,9 +341,7 @@ public class PlaybackParameterDialog extends DialogFragment { .putBoolean(getString(resId), isChecked) .apply(); - if (onInitialValueOrValueChange != null) { - onInitialValueOrValueChange.accept(isChecked); - } + onInitialValueOrValueChange.accept(isChecked); }); } From 4b0653658273f456ddbc56a86b1695073d982895 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Fri, 4 Mar 2022 21:37:11 +0100 Subject: [PATCH 14/33] Reworked switching to semitones Using an expandable Tab-like component instead of a combobox --- .../schabi/newpipe/local/feed/FeedFragment.kt | 16 +- .../helper/PlaybackParameterDialog.java | 169 ++++++++++++++---- .../schabi/newpipe/util/DrawableResolver.kt | 26 +++ .../res/layout/dialog_playback_parameter.xml | 59 ++++-- app/src/main/res/values/strings.xml | 2 + 5 files changed, 209 insertions(+), 63 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt index e97629f31..e8e78feda 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt @@ -25,7 +25,6 @@ import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.graphics.Typeface -import android.graphics.drawable.Drawable import android.graphics.drawable.LayerDrawable import android.os.Bundle import android.os.Parcelable @@ -37,7 +36,6 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.Button -import androidx.annotation.AttrRes import androidx.annotation.Nullable import androidx.appcompat.app.AlertDialog import androidx.appcompat.content.res.AppCompatResources @@ -77,6 +75,7 @@ import org.schabi.newpipe.local.feed.item.StreamItem import org.schabi.newpipe.local.feed.service.FeedLoadService import org.schabi.newpipe.local.subscription.SubscriptionManager import org.schabi.newpipe.util.DeviceUtils +import org.schabi.newpipe.util.DrawableResolver.Companion.resolveDrawable import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.NavigationHelper import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountStreams @@ -579,19 +578,6 @@ class FeedFragment : BaseStateFragment() { lastNewItemsCount = highlightCount } - private fun resolveDrawable(context: Context, @AttrRes attrResId: Int): Drawable? { - return androidx.core.content.ContextCompat.getDrawable( - context, - android.util.TypedValue().apply { - context.theme.resolveAttribute( - attrResId, - this, - true - ) - }.resourceId - ) - } - private fun showNewItemsLoaded() { tryGetNewItemsLoadedButton()?.clearAnimation() tryGetNewItemsLoadedButton() diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index eab64e483..902222cc5 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -1,10 +1,14 @@ package org.schabi.newpipe.player.helper; +import static org.schabi.newpipe.ktx.ViewUtils.animateRotation; import static org.schabi.newpipe.player.Player.DEBUG; +import static org.schabi.newpipe.util.DrawableResolver.resolveDrawable; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import android.app.Dialog; import android.content.Context; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -22,8 +26,11 @@ import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; import org.schabi.newpipe.databinding.DialogPlaybackParameterBinding; +import org.schabi.newpipe.player.Player; import org.schabi.newpipe.util.SliderStrategy; +import java.util.HashMap; +import java.util.Map; import java.util.Objects; import java.util.function.Consumer; import java.util.function.DoubleConsumer; @@ -40,6 +47,9 @@ public class PlaybackParameterDialog extends DialogFragment { private static final double MIN_PLAYBACK_VALUE = 0.10f; private static final double MAX_PLAYBACK_VALUE = 3.00f; + private static final boolean PITCH_CTRL_MODE_PERCENT = false; + private static final boolean PITCH_CTRL_MODE_SEMITONE = true; + private static final double STEP_1_PERCENT_VALUE = 0.01f; private static final double STEP_5_PERCENT_VALUE = 0.05f; private static final double STEP_10_PERCENT_VALUE = 0.10f; @@ -188,6 +198,22 @@ public class PlaybackParameterDialog extends DialogFragment { 1, this::onTempoSliderUpdated); + // Pitch + binding.pitchToogleControlModes.setOnClickListener(v -> { + final boolean isCurrentlyVisible = + binding.pitchControlModeTabs.getVisibility() == View.GONE; + binding.pitchControlModeTabs.setVisibility(isCurrentlyVisible + ? View.VISIBLE + : View.GONE); + animateRotation(binding.pitchToogleControlModes, + Player.DEFAULT_CONTROLS_DURATION, + isCurrentlyVisible ? 180 : 0); + }); + + getPitchControlModeComponentMappings() + .forEach(this::setupPitchControlModeTextView); + changePitchControlMode(isCurrentPitchControlModeSemitone()); + // Pitch - Percent setText(binding.pitchPercentMinimumText, PlayerHelper::formatPitch, MIN_PLAYBACK_VALUE); setText(binding.pitchPercentMaximumText, PlayerHelper::formatPitch, MAX_PLAYBACK_VALUE); @@ -249,13 +275,6 @@ public class PlaybackParameterDialog extends DialogFragment { skipSilence = isChecked; updateCallback(); }); - - bindCheckboxWithBoolPref( - binding.adjustBySemitonesCheckbox, - R.string.playback_adjust_by_semitones_key, - false, - this::showPitchSemitonesOrPercent - ); } private void setText( @@ -291,17 +310,114 @@ public class PlaybackParameterDialog extends DialogFragment { }); } - private void setupStepTextView( - final TextView textView, - final double stepSizeValue + private void setupPitchControlModeTextView( + final boolean semitones, + final TextView textView ) { - setText(textView, PlaybackParameterDialog::getPercentString, stepSizeValue) - .setOnClickListener(view -> setAndUpdateStepSize(stepSizeValue)); + textView.setOnClickListener(view -> { + PreferenceManager.getDefaultSharedPreferences(requireContext()) + .edit() + .putBoolean(getString(R.string.playback_adjust_by_semitones_key), semitones) + .apply(); + + changePitchControlMode(semitones); + }); } - private void setAndUpdateStepSize(final double newStepSize) { - this.stepSize = newStepSize; + private Map getPitchControlModeComponentMappings() { + final Map mappings = new HashMap<>(); + mappings.put(PITCH_CTRL_MODE_PERCENT, binding.pitchControlModePercent); + mappings.put(PITCH_CTRL_MODE_SEMITONE, binding.pitchControlModeSemitone); + return mappings; + } + private void changePitchControlMode(final boolean semitones) { + // Bring all textviews into a normal state + final Map pitchCtrlModeComponentMapping = + getPitchControlModeComponentMappings(); + pitchCtrlModeComponentMapping.forEach((v, textView) -> textView.setBackground( + resolveDrawable(requireContext(), R.attr.selectableItemBackground))); + + // Mark the selected textview + final TextView textView = pitchCtrlModeComponentMapping.get(semitones); + if (textView != null) { + textView.setBackground(new LayerDrawable(new Drawable[]{ + resolveDrawable(requireContext(), R.attr.dashed_border), + resolveDrawable(requireContext(), R.attr.selectableItemBackground) + })); + } + + // Show or hide component + binding.pitchPercentControl.setVisibility(semitones ? View.GONE : View.VISIBLE); + binding.pitchSemitoneControl.setVisibility(semitones ? View.VISIBLE : View.GONE); + + if (semitones) { + // Recalculate pitch percent when changing to semitone + // (as it could be an invalid semitone value) + final double newPitchPercent = calcValidPitch(pitchPercent); + + // If the values differ set the new pitch + if (this.pitchPercent != newPitchPercent) { + if (DEBUG) { + Log.d(TAG, "Bringing pitchPercent to correct corresponding semitone: " + + "currentPitchPercent = " + pitchPercent + ", " + + "newPitchPercent = " + newPitchPercent + ); + } + this.onPitchPercentSliderUpdated(newPitchPercent); + updateCallback(); + } + } + } + + private boolean isCurrentPitchControlModeSemitone() { + return PreferenceManager.getDefaultSharedPreferences(requireContext()) + .getBoolean( + getString(R.string.playback_adjust_by_semitones_key), + PITCH_CTRL_MODE_PERCENT); + } + + private void setupStepTextView( + final double stepSizeValue, + final TextView textView + ) { + setText(textView, PlaybackParameterDialog::getPercentString, stepSizeValue); + textView.setOnClickListener(view -> { + PreferenceManager.getDefaultSharedPreferences(requireContext()) + .edit() + .putFloat(getString(R.string.adjustment_step_key), (float) stepSizeValue) + .apply(); + + setStepSizeToUI(stepSizeValue); + }); + } + + private Map getStepSizeComponentMappings() { + final Map mappings = new HashMap<>(); + mappings.put(STEP_1_PERCENT_VALUE, binding.stepSizeOnePercent); + mappings.put(STEP_5_PERCENT_VALUE, binding.stepSizeFivePercent); + mappings.put(STEP_10_PERCENT_VALUE, binding.stepSizeTenPercent); + mappings.put(STEP_25_PERCENT_VALUE, binding.stepSizeTwentyFivePercent); + mappings.put(STEP_100_PERCENT_VALUE, binding.stepSizeOneHundredPercent); + return mappings; + } + + private void setStepSizeToUI(final double newStepSize) { + // Bring all textviews into a normal state + final Map stepSiteComponentMapping = getStepSizeComponentMappings(); + stepSiteComponentMapping.forEach((v, textView) -> textView.setBackground( + resolveDrawable(requireContext(), R.attr.selectableItemBackground))); + + // Mark the selected textview + final TextView textView = stepSiteComponentMapping.get(newStepSize); + if (textView != null) { + textView.setBackground(new LayerDrawable(new Drawable[]{ + resolveDrawable(requireContext(), R.attr.dashed_border), + resolveDrawable(requireContext(), R.attr.selectableItemBackground) + })); + } + + // Bind to the corresponding control components binding.tempoStepUp.setText(getStepUpPercentString(newStepSize)); binding.tempoStepDown.setText(getStepDownPercentString(newStepSize)); @@ -345,29 +461,6 @@ public class PlaybackParameterDialog extends DialogFragment { }); } - private void showPitchSemitonesOrPercent(final boolean semitones) { - binding.pitchPercentControl.setVisibility(semitones ? View.GONE : View.VISIBLE); - binding.pitchSemitoneControl.setVisibility(semitones ? View.VISIBLE : View.GONE); - - if (semitones) { - // Recalculate pitch percent when changing to semitone - // (as it could be an invalid semitone value) - final double newPitchPercent = calcValidPitch(pitchPercent); - - // If the values differ set the new pitch - if (this.pitchPercent != newPitchPercent) { - if (DEBUG) { - Log.d(TAG, "Bringing pitchPercent to correct corresponding semitone: " - + "currentPitchPercent = " + pitchPercent + ", " - + "newPitchPercent = " + newPitchPercent - ); - } - this.onPitchPercentSliderUpdated(newPitchPercent); - updateCallback(); - } - } - } - /*////////////////////////////////////////////////////////////////////////// // Sliders //////////////////////////////////////////////////////////////////////////*/ @@ -447,7 +540,7 @@ public class PlaybackParameterDialog extends DialogFragment { final double calcPitch = Math.max(MIN_PLAYBACK_VALUE, Math.min(MAX_PLAYBACK_VALUE, newPitch)); - if (!binding.adjustBySemitonesCheckbox.isChecked()) { + if (!isCurrentPitchControlModeSemitone()) { return calcPitch; } diff --git a/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt b/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt new file mode 100644 index 000000000..50f875257 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt @@ -0,0 +1,26 @@ +package org.schabi.newpipe.util + +import android.content.Context +import android.graphics.drawable.Drawable +import androidx.annotation.AttrRes + +/** + * Utility class for resolving [Drawables](Drawable) + */ +class DrawableResolver { + companion object { + @JvmStatic + fun resolveDrawable(context: Context, @AttrRes attrResId: Int): Drawable? { + return androidx.core.content.ContextCompat.getDrawable( + context, + android.util.TypedValue().apply { + context.theme.resolveAttribute( + attrResId, + this, + true + ) + }.resourceId + ) + } + } +} diff --git a/app/src/main/res/layout/dialog_playback_parameter.xml b/app/src/main/res/layout/dialog_playback_parameter.xml index 640475f39..e402f4fb1 100644 --- a/app/src/main/res/layout/dialog_playback_parameter.xml +++ b/app/src/main/res/layout/dialog_playback_parameter.xml @@ -146,11 +146,59 @@ android:textColor="?attr/colorAccent" android:textStyle="bold" /> + + + + + + + + + + - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 792e6414b..af2921cca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -501,6 +501,8 @@ Step Tempo step Reset + Percent + Semitone In order to comply with the European General Data Protection Regulation (GDPR), we hereby draw your attention to NewPipe\'s privacy policy. Please read it carefully. \nYou must accept it to send us the bug report. From 20602889be38e38c25e6022f56be83860ef34313 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Fri, 4 Mar 2022 22:02:39 +0100 Subject: [PATCH 15/33] Added some doc and abstracted more methods --- .../helper/PlaybackParameterDialog.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index 902222cc5..4ab8f9248 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -172,7 +172,7 @@ public class PlaybackParameterDialog extends DialogFragment { } /*////////////////////////////////////////////////////////////////////////// - // Control Views + // UI Initialization and Control //////////////////////////////////////////////////////////////////////////*/ private void initUI() { @@ -265,8 +265,7 @@ public class PlaybackParameterDialog extends DialogFragment { isChecked -> { if (!isChecked) { // when unchecked, slide back to the minimum of current tempo or pitch - setSliders(Math.min(pitchPercent, tempo)); - updateCallback(); + ensureHookIsValidAndUpdateCallBack(); } }); @@ -277,6 +276,8 @@ public class PlaybackParameterDialog extends DialogFragment { }); } + // -- General formatting -- + private void setText( final TextView textView, final DoubleFunction formatter, @@ -285,6 +286,8 @@ public class PlaybackParameterDialog extends DialogFragment { Objects.requireNonNull(textView).setText(formatter.apply(value)); } + // -- Steps -- + private void registerOnStepClickListener( final TextView stepTextView, final DoubleSupplier currentValueSupplier, @@ -310,6 +313,8 @@ public class PlaybackParameterDialog extends DialogFragment { }); } + // -- Pitch -- + private void setupPitchControlModeTextView( final boolean semitones, final TextView textView @@ -367,6 +372,9 @@ public class PlaybackParameterDialog extends DialogFragment { this.onPitchPercentSliderUpdated(newPitchPercent); updateCallback(); } + } else if (!binding.unhookCheckbox.isChecked()) { + // When changing to percent it's possible that tempo is != pitch + ensureHookIsValidAndUpdateCallBack(); } } @@ -377,6 +385,8 @@ public class PlaybackParameterDialog extends DialogFragment { PITCH_CTRL_MODE_PERCENT); } + // -- Steps (Set) -- + private void setupStepTextView( final double stepSizeValue, final TextView textView @@ -430,6 +440,8 @@ public class PlaybackParameterDialog extends DialogFragment { .getFloat(getString(R.string.adjustment_step_key), (float) DEFAULT_STEP); } + // -- Additional options -- + private void setAndUpdateSkipSilence(final boolean newSkipSilence) { this.skipSilence = newSkipSilence; binding.skipSilenceCheckbox.setChecked(newSkipSilence); @@ -461,6 +473,18 @@ public class PlaybackParameterDialog extends DialogFragment { }); } + /** + * Ensures that the slider hook is valid and if not sets and updates the sliders accordingly. + *
+ * You have to ensure by yourself that the hooking is active. + */ + private void ensureHookIsValidAndUpdateCallBack() { + if (tempo != pitchPercent) { + setSliders(Math.min(tempo, pitchPercent)); + updateCallback(); + } + } + /*////////////////////////////////////////////////////////////////////////// // Sliders //////////////////////////////////////////////////////////////////////////*/ From 1b8c517e3ea1924787eeff075a575414a5f3b544 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Fri, 4 Mar 2022 22:21:17 +0100 Subject: [PATCH 16/33] Removed unused strings --- app/src/main/res/values/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index af2921cca..1f87ae9fb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -497,9 +497,7 @@ Pitch Unhook (may cause distortion) Fast-forward during silence - Adjust pitch by musical semitones Step - Tempo step Reset Percent Semitone From 44dada9e60b23f500c3904af8578a874e78c0c5a Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Sun, 6 Mar 2022 16:10:42 +0100 Subject: [PATCH 17/33] Use better Kotlin syntax From the PR review --- .../schabi/newpipe/local/feed/FeedFragment.kt | 2 +- .../schabi/newpipe/util/DrawableResolver.kt | 29 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt index e8e78feda..55810284f 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt @@ -75,7 +75,7 @@ import org.schabi.newpipe.local.feed.item.StreamItem import org.schabi.newpipe.local.feed.service.FeedLoadService import org.schabi.newpipe.local.subscription.SubscriptionManager import org.schabi.newpipe.util.DeviceUtils -import org.schabi.newpipe.util.DrawableResolver.Companion.resolveDrawable +import org.schabi.newpipe.util.DrawableResolver.resolveDrawable import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.NavigationHelper import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountStreams diff --git a/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt b/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt index 50f875257..ccc9e7dd4 100644 --- a/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt +++ b/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt @@ -2,25 +2,24 @@ package org.schabi.newpipe.util import android.content.Context import android.graphics.drawable.Drawable +import android.util.TypedValue import androidx.annotation.AttrRes /** * Utility class for resolving [Drawables](Drawable) */ -class DrawableResolver { - companion object { - @JvmStatic - fun resolveDrawable(context: Context, @AttrRes attrResId: Int): Drawable? { - return androidx.core.content.ContextCompat.getDrawable( - context, - android.util.TypedValue().apply { - context.theme.resolveAttribute( - attrResId, - this, - true - ) - }.resourceId - ) - } +object DrawableResolver { + @JvmStatic + fun resolveDrawable(context: Context, @AttrRes attrResId: Int): Drawable? { + return androidx.core.content.ContextCompat.getDrawable( + context, + TypedValue().apply { + context.theme.resolveAttribute( + attrResId, + this, + true + ) + }.resourceId + ) } } From b9190eddfe1563cc5269caf2ca90a997db85a920 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Mon, 7 Mar 2022 20:30:25 +0100 Subject: [PATCH 18/33] Update DrawableResolver.kt Nicer import :wink: --- app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt b/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt index ccc9e7dd4..8a728bfbf 100644 --- a/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt +++ b/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt @@ -4,6 +4,7 @@ import android.content.Context import android.graphics.drawable.Drawable import android.util.TypedValue import androidx.annotation.AttrRes +import androidx.core.content.ContextCompat /** * Utility class for resolving [Drawables](Drawable) @@ -11,7 +12,7 @@ import androidx.annotation.AttrRes object DrawableResolver { @JvmStatic fun resolveDrawable(context: Context, @AttrRes attrResId: Int): Drawable? { - return androidx.core.content.ContextCompat.getDrawable( + return ContextCompat.getDrawable( context, TypedValue().apply { context.theme.resolveAttribute( From 0f551baf3729121dadc0597d615aab58ea13e941 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Wed, 16 Mar 2022 14:53:33 +0100 Subject: [PATCH 19/33] Refactored code --- .../helper/PlaybackParameterDialog.java | 24 +++++++++---------- .../player/helper/PlayerSemitoneHelper.java | 9 +++---- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index 4ab8f9248..26caa1b20 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -44,8 +44,8 @@ public class PlaybackParameterDialog extends DialogFragment { private static final String TAG = "PlaybackParameterDialog"; // Minimum allowable range in ExoPlayer - private static final double MIN_PLAYBACK_VALUE = 0.10f; - private static final double MAX_PLAYBACK_VALUE = 3.00f; + private static final double MIN_PITCH_OR_SPEED = 0.10f; + private static final double MAX_PITCH_OR_SPEED = 3.00f; private static final boolean PITCH_CTRL_MODE_PERCENT = false; private static final boolean PITCH_CTRL_MODE_SEMITONE = true; @@ -62,8 +62,8 @@ public class PlaybackParameterDialog extends DialogFragment { private static final boolean DEFAULT_SKIP_SILENCE = false; private static final SliderStrategy QUADRATIC_STRATEGY = new SliderStrategy.Quadratic( - MIN_PLAYBACK_VALUE, - MAX_PLAYBACK_VALUE, + MIN_PITCH_OR_SPEED, + MAX_PITCH_OR_SPEED, 1.00f, 10_000); @@ -177,10 +177,10 @@ public class PlaybackParameterDialog extends DialogFragment { private void initUI() { // Tempo - setText(binding.tempoMinimumText, PlayerHelper::formatSpeed, MIN_PLAYBACK_VALUE); - setText(binding.tempoMaximumText, PlayerHelper::formatSpeed, MAX_PLAYBACK_VALUE); + setText(binding.tempoMinimumText, PlayerHelper::formatSpeed, MIN_PITCH_OR_SPEED); + setText(binding.tempoMaximumText, PlayerHelper::formatSpeed, MAX_PITCH_OR_SPEED); - binding.tempoSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAX_PLAYBACK_VALUE)); + binding.tempoSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAX_PITCH_OR_SPEED)); setAndUpdateTempo(tempo); binding.tempoSeekbar.setOnSeekBarChangeListener( getTempoOrPitchSeekbarChangeListener( @@ -215,10 +215,10 @@ public class PlaybackParameterDialog extends DialogFragment { changePitchControlMode(isCurrentPitchControlModeSemitone()); // Pitch - Percent - setText(binding.pitchPercentMinimumText, PlayerHelper::formatPitch, MIN_PLAYBACK_VALUE); - setText(binding.pitchPercentMaximumText, PlayerHelper::formatPitch, MAX_PLAYBACK_VALUE); + setText(binding.pitchPercentMinimumText, PlayerHelper::formatPitch, MIN_PITCH_OR_SPEED); + setText(binding.pitchPercentMaximumText, PlayerHelper::formatPitch, MAX_PITCH_OR_SPEED); - binding.pitchPercentSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAX_PLAYBACK_VALUE)); + binding.pitchPercentSeekbar.setMax(QUADRATIC_STRATEGY.progressOf(MAX_PITCH_OR_SPEED)); setAndUpdatePitch(pitchPercent); binding.pitchPercentSeekbar.setOnSeekBarChangeListener( getTempoOrPitchSeekbarChangeListener( @@ -557,12 +557,12 @@ public class PlaybackParameterDialog extends DialogFragment { } private double calcValidTempo(final double newTempo) { - return Math.max(MIN_PLAYBACK_VALUE, Math.min(MAX_PLAYBACK_VALUE, newTempo)); + return Math.max(MIN_PITCH_OR_SPEED, Math.min(MAX_PITCH_OR_SPEED, newTempo)); } private double calcValidPitch(final double newPitch) { final double calcPitch = - Math.max(MIN_PLAYBACK_VALUE, Math.min(MAX_PLAYBACK_VALUE, newPitch)); + Math.max(MIN_PITCH_OR_SPEED, Math.min(MAX_PITCH_OR_SPEED, newPitch)); if (!isCurrentPitchControlModeSemitone()) { return calcPitch; diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java index abbcc2c82..f3a71d7cd 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerSemitoneHelper.java @@ -9,7 +9,7 @@ package org.schabi.newpipe.player.helper; * */ public final class PlayerSemitoneHelper { - public static final int TONES = 12; + public static final int SEMITONE_COUNT = 12; private PlayerSemitoneHelper() { // No impl @@ -24,14 +24,15 @@ public final class PlayerSemitoneHelper { } public static double semitonesToPercent(final int semitones) { - return Math.pow(2, ensureSemitonesInRange(semitones) / (double) TONES); + return Math.pow(2, ensureSemitonesInRange(semitones) / (double) SEMITONE_COUNT); } public static int percentToSemitones(final double percent) { - return ensureSemitonesInRange((int) Math.round(TONES * Math.log(percent) / Math.log(2))); + return ensureSemitonesInRange( + (int) Math.round(SEMITONE_COUNT * Math.log(percent) / Math.log(2))); } private static int ensureSemitonesInRange(final int semitones) { - return Math.max(-TONES, Math.min(TONES, semitones)); + return Math.max(-SEMITONE_COUNT, Math.min(SEMITONE_COUNT, semitones)); } } From 1dc146322c5666f2a4af9f9d14b5f2aa56626b32 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Thu, 17 Mar 2022 18:34:44 +0100 Subject: [PATCH 20/33] Merged ``DrawableResolver`` into ``ThemeHelper`` --- .../schabi/newpipe/local/feed/FeedFragment.kt | 2 +- .../helper/PlaybackParameterDialog.java | 2 +- .../schabi/newpipe/util/DrawableResolver.kt | 26 ------------------- .../org/schabi/newpipe/util/ThemeHelper.java | 18 +++++++++++++ 4 files changed, 20 insertions(+), 28 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt index 55810284f..b291aa035 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt @@ -75,10 +75,10 @@ import org.schabi.newpipe.local.feed.item.StreamItem import org.schabi.newpipe.local.feed.service.FeedLoadService import org.schabi.newpipe.local.subscription.SubscriptionManager import org.schabi.newpipe.util.DeviceUtils -import org.schabi.newpipe.util.DrawableResolver.resolveDrawable import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.NavigationHelper import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountStreams +import org.schabi.newpipe.util.ThemeHelper.resolveDrawable import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout import java.time.OffsetDateTime import java.util.function.Consumer diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index 26caa1b20..62446b50e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -2,8 +2,8 @@ package org.schabi.newpipe.player.helper; import static org.schabi.newpipe.ktx.ViewUtils.animateRotation; import static org.schabi.newpipe.player.Player.DEBUG; -import static org.schabi.newpipe.util.DrawableResolver.resolveDrawable; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; +import static org.schabi.newpipe.util.ThemeHelper.resolveDrawable; import android.app.Dialog; import android.content.Context; diff --git a/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt b/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt deleted file mode 100644 index 8a728bfbf..000000000 --- a/app/src/main/java/org/schabi/newpipe/util/DrawableResolver.kt +++ /dev/null @@ -1,26 +0,0 @@ -package org.schabi.newpipe.util - -import android.content.Context -import android.graphics.drawable.Drawable -import android.util.TypedValue -import androidx.annotation.AttrRes -import androidx.core.content.ContextCompat - -/** - * Utility class for resolving [Drawables](Drawable) - */ -object DrawableResolver { - @JvmStatic - fun resolveDrawable(context: Context, @AttrRes attrResId: Int): Drawable? { - return ContextCompat.getDrawable( - context, - TypedValue().apply { - context.theme.resolveAttribute( - attrResId, - this, - true - ) - }.resourceId - ) - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java index 7c47d387f..7d06e57b6 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java @@ -23,9 +23,11 @@ import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.drawable.Drawable; import android.util.TypedValue; import androidx.annotation.AttrRes; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StyleRes; import androidx.appcompat.app.ActionBar; @@ -227,6 +229,22 @@ public final class ThemeHelper { return value.data; } + /** + * Resolves a {@link Drawable} by it's id. + * + * @param context Context + * @param attrResId Resource id + * @return the {@link Drawable} + */ + public static Drawable resolveDrawable( + @NonNull final Context context, + @AttrRes final int attrResId + ) { + final TypedValue typedValue = new TypedValue(); + context.getTheme().resolveAttribute(attrResId, typedValue, true); + return ContextCompat.getDrawable(context, typedValue.resourceId); + } + private static String getSelectedThemeKey(final Context context) { final String themeKey = context.getString(R.string.theme_key); final String defaultTheme = context.getResources().getString(R.string.default_theme_value); From a311519314085d5e79e1a55afc7c16dc744cb57b Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Sat, 16 Apr 2022 21:24:01 +0200 Subject: [PATCH 21/33] Fix merge conflicts --- .../player/helper/PlaybackParameterDialog.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index 62446b50e..2d1461aaf 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -27,6 +27,7 @@ import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; import org.schabi.newpipe.databinding.DialogPlaybackParameterBinding; import org.schabi.newpipe.player.Player; +import org.schabi.newpipe.util.SimpleOnSeekBarChangeListener; import org.schabi.newpipe.util.SliderStrategy; import java.util.HashMap; @@ -37,6 +38,8 @@ import java.util.function.DoubleConsumer; import java.util.function.DoubleFunction; import java.util.function.DoubleSupplier; +import javax.annotation.Nonnull; + import icepick.Icepick; import icepick.State; @@ -493,25 +496,16 @@ public class PlaybackParameterDialog extends DialogFragment { final SliderStrategy sliderStrategy, final DoubleConsumer newValueConsumer ) { - return new SeekBar.OnSeekBarChangeListener() { + return new SimpleOnSeekBarChangeListener() { @Override - public void onProgressChanged(final SeekBar seekBar, final int progress, + public void onProgressChanged(@Nonnull final SeekBar seekBar, + final int progress, final boolean fromUser) { if (fromUser) { // ensure that the user triggered the change newValueConsumer.accept(sliderStrategy.valueOf(progress)); updateCallback(); } } - - @Override - public void onStartTrackingTouch(final SeekBar seekBar) { - // Do nothing - } - - @Override - public void onStopTrackingTouch(final SeekBar seekBar) { - // Do nothing - } }; } From 05d5ef602c127bce3c125dd8a63a207ba32d29b3 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 16 Apr 2022 21:19:10 +0200 Subject: [PATCH 22/33] Fix proguard rules to keep Notifications settings fragment --- app/proguard-rules.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 53a9ecd5a..4a54d8992 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -51,3 +51,6 @@ private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); } + +# for some reason NotificationModeConfigFragment wasn't kept (only referenced in a preference xml) +-keep class org.schabi.newpipe.settings.notifications.** { *; } From 4917da2d2e533f08c0050ba45151fb714a7adf7e Mon Sep 17 00:00:00 2001 From: karyogamy Date: Sun, 17 Apr 2022 13:26:39 -0400 Subject: [PATCH 23/33] fixed: disabled caption to no longer automatically re-enable on new player instance. --- .../main/java/org/schabi/newpipe/player/Player.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 82ae0df27..9f95aa519 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -3557,14 +3557,19 @@ public final class Player implements } // apply caption language from previous user preference - final List selectedPreferredLanguages = - trackSelector.getParameters().preferredTextLanguages; final String userPreferredLanguage = prefs.getString(context.getString(R.string.caption_user_set_key), null); final int textRendererIndex = getCaptionRendererIndex(); - if (userPreferredLanguage != null - && !selectedPreferredLanguages.contains(userPreferredLanguage) + if (userPreferredLanguage == null) { + trackSelector.setParameters(trackSelector.buildUponParameters() + .setRendererDisabled(textRendererIndex, true)); + return; + } + + final List selectedPreferredLanguages = + trackSelector.getParameters().preferredTextLanguages; + if (!selectedPreferredLanguages.contains(userPreferredLanguage) && textRendererIndex != RENDERER_UNAVAILABLE) { trackSelector.setParameters(trackSelector.buildUponParameters() .setPreferredTextLanguages(userPreferredLanguage, From 29fc0eff38b7480a1dcebb140302512fe5a0ccab Mon Sep 17 00:00:00 2001 From: karyogamy Date: Sun, 17 Apr 2022 18:34:31 -0400 Subject: [PATCH 24/33] fixed: added comments for DefaultTrackSelector auto-select fix. --- .../java/org/schabi/newpipe/player/Player.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 9f95aa519..30c62af39 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -3557,20 +3557,27 @@ public final class Player implements } // apply caption language from previous user preference + final int textRendererIndex = getCaptionRendererIndex(); + if (textRendererIndex == RENDERER_UNAVAILABLE) { + return; + } + + // If user prefers to show no caption, then disable the renderer. + // Otherwise, DefaultTrackSelector may automatically find an available caption + // and display that. final String userPreferredLanguage = prefs.getString(context.getString(R.string.caption_user_set_key), null); - final int textRendererIndex = getCaptionRendererIndex(); - if (userPreferredLanguage == null) { trackSelector.setParameters(trackSelector.buildUponParameters() .setRendererDisabled(textRendererIndex, true)); return; } + // Only set preferred language if it does not match the user preference, + // otherwise there might be an infinite cycle at onTextTracksChanged. final List selectedPreferredLanguages = trackSelector.getParameters().preferredTextLanguages; - if (!selectedPreferredLanguages.contains(userPreferredLanguage) - && textRendererIndex != RENDERER_UNAVAILABLE) { + if (!selectedPreferredLanguages.contains(userPreferredLanguage)) { trackSelector.setParameters(trackSelector.buildUponParameters() .setPreferredTextLanguages(userPreferredLanguage, PlayerHelper.captionLanguageStemOf(userPreferredLanguage)) From 2b8eb7ed66f0178ba8fc84c44981dde8f01574c3 Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Mon, 18 Apr 2022 14:28:56 +0200 Subject: [PATCH 25/33] Also run CI when target is release branch --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13a4d8723..306b8c2c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: branches: - dev - master + - release/** paths-ignore: - 'README.md' - 'doc/**' From d5a0f8f23c05beec0b284d0c8fe27d1d002f1f48 Mon Sep 17 00:00:00 2001 From: TiA4f8R <74829229+TiA4f8R@users.noreply.github.com> Date: Thu, 21 Apr 2022 19:53:35 +0200 Subject: [PATCH 26/33] Set opacity of the popup close button to 0.8 on Android 12 and higher Setting this opacity should allow touches outside NewPipe when using the popup player. See https://developer.android.com/reference/android/view/WindowManager.LayoutParams#FLAG_NOT_TOUCHABLE for more details. --- .../newpipe/player/helper/PlayerHelper.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index 6a7c27bdc..eab6ccc3e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -78,6 +78,20 @@ public final class PlayerHelper { private static final NumberFormat SPEED_FORMATTER = new DecimalFormat("0.##x"); private static final NumberFormat PITCH_FORMATTER = new DecimalFormat("##%"); + /** + * Maximum opacity allowed for Android 12 and higher to allow touches on other apps when using + * NewPipe's popup player. + * + *

+ * This value is hardcoded instead of being get dynamically with the method linked of the + * constant documentation below, because it is not static and popup player layout parameters + * are generated with static methods. + *

+ * + * @see WindowManager.LayoutParams#FLAG_NOT_TOUCHABLE + */ + private static final float MAXIMUM_OPACITY_ALLOWED_FOR_S_AND_HIGHER = 0.8f; + @Retention(SOURCE) @IntDef({AUTOPLAY_TYPE_ALWAYS, AUTOPLAY_TYPE_WIFI, AUTOPLAY_TYPE_NEVER}) @@ -572,6 +586,12 @@ public final class PlayerHelper { flags, PixelFormat.TRANSLUCENT); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + // Setting maximum opacity allowed for touch events to other apps for Android 12 and + // higher to prevent non interaction when using other apps with the popup player + closeOverlayLayoutParams.alpha = MAXIMUM_OPACITY_ALLOWED_FOR_S_AND_HIGHER; + } + closeOverlayLayoutParams.gravity = Gravity.LEFT | Gravity.TOP; closeOverlayLayoutParams.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; From 31e762d921f3dd4e02143b79fd122a86b228d316 Mon Sep 17 00:00:00 2001 From: Stypox Date: Thu, 28 Apr 2022 11:09:04 +0200 Subject: [PATCH 27/33] Update NewPipeExtractor to 0.22.1 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index e93b2aaf4..19c491a4d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -190,7 +190,7 @@ dependencies { // name and the commit hash with the commit hash of the (pushed) commit you want to test // This works thanks to JitPack: https://jitpack.io/ implementation 'com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751' - implementation 'com.github.TeamNewPipe:NewPipeExtractor:b77c72fb8826c3ffca0be5f96b066cca0a07b1c9' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:ac1c22d81c65b7b0c5427f4e1989f5256d617f32' /** Checkstyle **/ checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}" From 9a5decdb2834651b49b2dc95c8d9f758a3721f20 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 27 Apr 2022 21:02:14 +0200 Subject: [PATCH 28/33] Translated using Weblate (Bengali (India)) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 45.6% (289 of 633 strings) Translated using Weblate (Danish) Currently translated at 47.2% (299 of 633 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Basque) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Tagalog) Currently translated at 9.4% (60 of 633 strings) Translated using Weblate (Arabic (Libya)) Currently translated at 5.9% (4 of 67 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 14.9% (10 of 67 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (67 of 67 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 61.1% (41 of 67 strings) Translated using Weblate (Slovak) Currently translated at 7.4% (5 of 67 strings) Translated using Weblate (Persian) Currently translated at 62.6% (42 of 67 strings) Translated using Weblate (Swedish) Currently translated at 50.7% (34 of 67 strings) Translated using Weblate (Spanish) Currently translated at 59.7% (40 of 67 strings) Translated using Weblate (Indonesian) Currently translated at 79.1% (53 of 67 strings) Translated using Weblate (Polish) Currently translated at 55.2% (37 of 67 strings) Translated using Weblate (Hebrew) Currently translated at 55.2% (37 of 67 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (67 of 67 strings) Translated using Weblate (Russian) Currently translated at 17.9% (12 of 67 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 10.4% (7 of 67 strings) Translated using Weblate (Turkish) Currently translated at 28.3% (19 of 67 strings) Translated using Weblate (German) Currently translated at 65.6% (44 of 67 strings) Translated using Weblate (Sardinian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Filipino) Currently translated at 18.7% (119 of 633 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Hebrew) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 97.6% (618 of 633 strings) Translated using Weblate (Persian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Polish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Slovak) Currently translated at 98.5% (624 of 633 strings) Translated using Weblate (Greek) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 90.0% (570 of 633 strings) Translated using Weblate (Basque) Currently translated at 95.7% (606 of 633 strings) Translated using Weblate (Italian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Korean) Currently translated at 71.8% (455 of 633 strings) Translated using Weblate (Japanese) Currently translated at 99.5% (630 of 633 strings) Translated using Weblate (Russian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (French) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (French) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Spanish) Currently translated at 97.6% (618 of 633 strings) Translated using Weblate (German) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (German) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (German) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.8% (632 of 633 strings) Translated using Weblate (German) Currently translated at 98.1% (621 of 633 strings) Translated using Weblate (German) Currently translated at 98.1% (621 of 633 strings) Translated using Weblate (Swedish) Currently translated at 99.6% (631 of 633 strings) Translated using Weblate (Swedish) Currently translated at 99.6% (631 of 633 strings) Translated using Weblate (French) Currently translated at 99.5% (630 of 633 strings) Translated using Weblate (French) Currently translated at 99.5% (630 of 633 strings) Translated using Weblate (French) Currently translated at 99.3% (629 of 633 strings) Translated using Weblate (French) Currently translated at 99.3% (629 of 633 strings) Co-authored-by: Agnieszka C Co-authored-by: AioiLight Co-authored-by: Ajeje Brazorf Co-authored-by: Alberto De Negri Co-authored-by: Alex25820 Co-authored-by: Allan Nordhøy Co-authored-by: Andrés Paredes Co-authored-by: Ayoub Rejal Co-authored-by: BurningKarl Co-authored-by: Danial Behzadi Co-authored-by: DanieLoche Co-authored-by: DanieLoche Co-authored-by: David Kovács Co-authored-by: Deleted User Co-authored-by: Digiwizkid Co-authored-by: Gontzal Manuel Pujana Onaindia Co-authored-by: Hosted Weblate Co-authored-by: Ihor Hordiichuk Co-authored-by: JS Ahn Co-authored-by: Jeff Huang Co-authored-by: Jonatan Nyberg Co-authored-by: Jonathan Soares Co-authored-by: Karl Tammik Co-authored-by: Lars Co-authored-by: Linerly Co-authored-by: Napstaguy04 Co-authored-by: Oğuz Ersen Co-authored-by: Ray Co-authored-by: Retrial Co-authored-by: Rex_sa Co-authored-by: Ricardo Co-authored-by: Simon N Co-authored-by: TiA4f8R Co-authored-by: VfBFan Co-authored-by: Yaron Shahrabani Co-authored-by: chr56 Co-authored-by: jazzyjabroni Co-authored-by: nautilusx Co-authored-by: nzgha Co-authored-by: qqqq1 Co-authored-by: sal0max Co-authored-by: ssantos Co-authored-by: Егор Ермаков Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar_LY/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/es/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fa/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sv/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant_HK/ Translation: NewPipe/Metadata --- app/src/main/res/values-ar/strings.xml | 26 ++++++++++++ .../main/res/values-b+zh+HANS+CN/strings.xml | 22 ++++++++++ app/src/main/res/values-bn-rIN/strings.xml | 16 +++++-- app/src/main/res/values-da/strings.xml | 1 + app/src/main/res/values-de/strings.xml | 24 ++++++++++- app/src/main/res/values-el/strings.xml | 22 ++++++++++ app/src/main/res/values-es/strings.xml | 4 ++ app/src/main/res/values-et/strings.xml | 24 +++++++++++ app/src/main/res/values-eu/strings.xml | 31 +++++++++++++- app/src/main/res/values-fa/strings.xml | 42 ++++++++++++++----- app/src/main/res/values-fil/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 22 ++++++++++ app/src/main/res/values-he/strings.xml | 26 +++++++++++- app/src/main/res/values-in/strings.xml | 21 ++++++++++ app/src/main/res/values-it/strings.xml | 24 ++++++++++- app/src/main/res/values-ja/strings.xml | 21 ++++++++++ app/src/main/res/values-ko/strings.xml | 41 ++++++++++++------ app/src/main/res/values-pl/strings.xml | 30 +++++++++++-- app/src/main/res/values-pt-rBR/strings.xml | 22 ++++++++++ app/src/main/res/values-pt-rPT/strings.xml | 22 ++++++++++ app/src/main/res/values-pt/strings.xml | 22 ++++++++++ app/src/main/res/values-ru/strings.xml | 5 +++ app/src/main/res/values-sc/strings.xml | 24 ++++++++++- app/src/main/res/values-sk/strings.xml | 10 +++++ app/src/main/res/values-sv/strings.xml | 32 +++++++++++--- app/src/main/res/values-tl/strings.xml | 1 + app/src/main/res/values-tr/strings.xml | 22 ++++++++++ app/src/main/res/values-uk/strings.xml | 23 ++++++++++ app/src/main/res/values-zh-rHK/strings.xml | 25 ++++++++++- app/src/main/res/values-zh-rTW/strings.xml | 21 ++++++++++ .../metadata/android/ar_LY/changelogs/63.txt | 7 ++++ .../metadata/android/ar_LY/changelogs/64.txt | 7 ++++ .../android/ar_LY/full_description.txt | 1 + .../android/ar_LY/short_description.txt | 1 + .../metadata/android/de/changelogs/985.txt | 2 +- .../metadata/android/es/changelogs/66.txt | 1 + .../metadata/android/es/changelogs/68.txt | 8 ++++ .../metadata/android/es/changelogs/71.txt | 6 +++ .../metadata/android/es/changelogs/730.txt | 2 + .../metadata/android/es/changelogs/770.txt | 2 +- .../metadata/android/fa/changelogs/850.txt | 1 + .../metadata/android/fa/changelogs/982.txt | 1 + .../metadata/android/fa/changelogs/985.txt | 1 + .../metadata/android/he/changelogs/986.txt | 16 +++++++ .../metadata/android/id/changelogs/986.txt | 16 +++++++ .../metadata/android/nb-NO/changelogs/986.txt | 16 +++++++ .../metadata/android/pl/changelogs/986.txt | 16 +++++++ .../metadata/android/ru/changelogs/982.txt | 1 + .../metadata/android/sk/changelogs/64.txt | 8 ++++ .../metadata/android/sv/changelogs/969.txt | 13 ++++++ .../metadata/android/tr/changelogs/910.txt | 1 + .../metadata/android/tr/changelogs/963.txt | 1 + .../metadata/android/tr/changelogs/982.txt | 1 + .../metadata/android/tr/changelogs/985.txt | 1 + .../metadata/android/uk/changelogs/985.txt | 2 +- .../metadata/android/uk/changelogs/986.txt | 13 ++++++ .../android/zh-Hans/changelogs/986.txt | 16 +++++++ .../android/zh-Hant/changelogs/985.txt | 1 + .../android/zh-Hant/changelogs/986.txt | 16 +++++++ .../android/zh_Hant_HK/changelogs/985.txt | 1 + .../android/zh_Hant_HK/changelogs/986.txt | 16 +++++++ .../android/zh_Hant_HK/full_description.txt | 2 +- .../android/zh_Hant_HK/short_description.txt | 2 +- 63 files changed, 778 insertions(+), 48 deletions(-) create mode 100644 fastlane/metadata/android/ar_LY/changelogs/63.txt create mode 100644 fastlane/metadata/android/ar_LY/changelogs/64.txt create mode 100644 fastlane/metadata/android/ar_LY/full_description.txt create mode 100644 fastlane/metadata/android/ar_LY/short_description.txt create mode 100644 fastlane/metadata/android/es/changelogs/66.txt create mode 100644 fastlane/metadata/android/es/changelogs/68.txt create mode 100644 fastlane/metadata/android/es/changelogs/71.txt create mode 100644 fastlane/metadata/android/es/changelogs/730.txt create mode 100644 fastlane/metadata/android/fa/changelogs/850.txt create mode 100644 fastlane/metadata/android/fa/changelogs/982.txt create mode 100644 fastlane/metadata/android/fa/changelogs/985.txt create mode 100644 fastlane/metadata/android/he/changelogs/986.txt create mode 100644 fastlane/metadata/android/id/changelogs/986.txt create mode 100644 fastlane/metadata/android/nb-NO/changelogs/986.txt create mode 100644 fastlane/metadata/android/pl/changelogs/986.txt create mode 100644 fastlane/metadata/android/ru/changelogs/982.txt create mode 100644 fastlane/metadata/android/sk/changelogs/64.txt create mode 100644 fastlane/metadata/android/sv/changelogs/969.txt create mode 100644 fastlane/metadata/android/tr/changelogs/910.txt create mode 100644 fastlane/metadata/android/tr/changelogs/963.txt create mode 100644 fastlane/metadata/android/tr/changelogs/982.txt create mode 100644 fastlane/metadata/android/tr/changelogs/985.txt create mode 100644 fastlane/metadata/android/uk/changelogs/986.txt create mode 100644 fastlane/metadata/android/zh-Hans/changelogs/986.txt create mode 100644 fastlane/metadata/android/zh-Hant/changelogs/985.txt create mode 100644 fastlane/metadata/android/zh-Hant/changelogs/986.txt create mode 100644 fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt create mode 100644 fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 818f946dd..7022a2c29 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -737,4 +737,30 @@ خطوة الإيقاع الافتراضي ExoPlayer تغيير حجم الفاصل الزمني للتحميل (حاليا %s). قد تؤدي القيمة الأقل إلى تسريع تحميل الفيديو الأولي. تتطلب التغييرات إعادة تشغيل المشغل. + تكوين إشعار مشغل البث الحالي + الإشعارات + تحميل تفاصيل البث… + تم تعطيل الإشعارات + بث جديد + إشعار المشغل + لقد اشتركت الآن في هذه القناة + الإخطارات حول التدفقات الجديدة للاشتراكات + إشعارات أحداث البث الجديدة + الإخطار بأحداث البث الجديدة من الاشتراكات + تشغيل التحقق من وجود تدفقات جديدة + معدل البحث + مطلوب اتصال الشبكة + أي شبكة + محو جميع الملفات التي تم تنزيلها من القرص؟ + الحصول على إشعار + , + تبديل الكل + + %s دفق جديد + %s دفق جديد + %s دفق جديد + %s دفوق جديدة + %s دفق جديد + %s دفق جديد + \ No newline at end of file diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml index 4aa497e99..26c930886 100644 --- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml +++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml @@ -677,4 +677,26 @@ 节奏步长 改变加载间隔的大小(当前%s),较低的值可以加快初始的视频加载速度,改变需要重启播放器。 ExoPlayer 默认 + 配置当前正在播放的串流的通知 + 新串流通知 + 检查频率 + 所需的网络连接 + 通知已被禁用 + 你刚刚订阅了此频道 + + 全选 + 播放器通知 + 通知 + 新的串流 + + %s 条新串流 + + + 被订阅的新串流的通知 + 正在加载串流详情… + 检查新串流 + 任何网络 + 清除所有下载的文件? + 获取通知 + 来自订阅的新串流的通知 \ No newline at end of file diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 12d526a7d..24498f162 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -189,7 +189,7 @@ কোন রেজাল্ট নেই কোন ফোল্ডার নেই বাহ্যিক স্টোরেজ নেই - সার্চ ইতিহাস ডিলিট হয়েছে। + সার্চ ইতিহাস মোছা হয়েছে নাম নাম পরিবর্তন ইতিহাস @@ -198,7 +198,7 @@ তৈরি করুন পুনরায় চেষ্টা করুন সাহায্য - দেখার ইতিহাস মুছে গেছে। + দেখার ইতিহাস মুছে গেছে সম্পূর্ণ দেখার ইতিহাস মুছে ফেলুন\? দেখার ইতিহাস মুছে ফেলুন ডাটা বেস এক্সপোর্ট করুন @@ -269,14 +269,14 @@ তালিকা তে পজিশন শেষ প্লে ব্যাক পজিশন এ যান সার্চ গুলি স্থানীয় ভাবে জমা করুন - সার্চ এর সময় সাজেশন দেখান + সার্চ এর সময় সাজেশন পছন্দ করুন সার্চ সাজেশন ফিড লোড হচ্ছে… এরর দেখান একটি প্লে লিস্ট পছন্দ করুন সম্পর্কিত থার্ড-পার্টি লাইসেন্স সমূহ - গিটহাব এ এরর রিপোর্ট করুন + গিটহাব এ রিপোর্ট করুন ডিফল্ট এ ফিরে যান রেজাল্ট দেখান হচ্ছেঃ %s কিউ মোছার আগে নিশ্চিত করুন @@ -292,4 +292,12 @@ মেটা ইনফো দেখান বিবরণ দেখান রাত্রি থিম + তৃতীয় অ্যাকশান বোতাম + চতুর্থ অ্যাকশান বোতাম + সক্রিয় প্লেয়ার ক্রম পরিবর্তিত হয়ে যাবে + স্থানীয় সার্চ সাজেশন + পঞ্চম অ্যাকশান বোতাম + প্রথম অ্যাকশান বোতাম + দ্বিতীয় অ্যাকশান বোতাম + নতুন স্ট্রিম \ No newline at end of file diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 8fadebacd..71bb83fb0 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -396,4 +396,5 @@ Viser resultater for: %s Åben med LeakCanary er ikke tilgængelig + Markér som set \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index edde1ab27..51224727d 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -666,9 +666,9 @@ Hauptplayer im Vollbildmodus starten Als Nächstes eingereiht Als Nächstes in Wiedergabe einreihen - Verarbeitung… Kann einen Moment dauern + Verarbeitung … Kann einen Moment dauern Nach Aktualisierungen suchen - Suche nach Aktualisierungen… + Suche nach Aktualisierungen … Manuelle Prüfung auf neue Versionen Neue Feed-Elemente \"Player abstürzen lassen\" anzeigen @@ -691,4 +691,24 @@ Ändern der Größe des Ladeintervalls (derzeit %s). Ein niedrigerer Wert kann das anfängliche Laden des Videos beschleunigen. Änderungen erfordern einen Neustart des Players. Geschwindigkeitsstufe ExoPlayer Standard + Benachrichtigungen + Benachrichtigen über neue abonnierbare Streams + Neue Streams + + %s neuer Stream + %s neue Streams + + Stream-Details laden … + Über neue Streams aus Abonnements benachrichtigen + , + Jedes Netzwerk + Benachrichtigungen über neue Streams + Suche nach neuen Streams ausführen + Erforderliche Netzwerkverbindung + Benachrichtigungen sind deaktiviert + Benachrichtigung erhalten + Alle heruntergeladenen Dateien von der Festplatte löschen\? + Du hast jetzt diesen Kanal abonniert + Alle umschalten + Aktualisierungsintervall \ No newline at end of file diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 911c97be6..769292f58 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -689,4 +689,26 @@ Βήμα τέμπο Εξ\' ορισμού ExoPlayer Αλλάξτε το μέγεθος του διαστήματος φόρτωσης (επί του παρόντος είναι %s). Μια χαμηλότερη τιμή μπορεί να επιταχύνει την αρχική φόρτωση βίντεο. Οι αλλαγές απαιτούν επανεκκίνηση της εφαρμογής. + Ειδοποιήσεις + + %s νέα ροή + %s νέες ροές + + Απαιτούμενη σύνδεση δικτύου + Οποιοδήποτε δίκτυο + Ειδοποίηση αναπαραγωγής + Νέες ροές + Διαμόρφωση ειδοποίησης τρέχουσας αναπαραγωγής ροής + Συχνότητα ελέγχου + Ειδοποιήσεις σχετικά με νέες ροές για συνδρομές + Φόρτωση λεπτομερειών ροής… + Εκτελέστε έλεγχο για νέες ροές + Ειδοποιήσεις για νέες ροές + Ειδοποίηση για νέες ροές από συνδρομές + Διαγραφή όλων των ληφθέντων αρχείων από το δίσκο; + Οι ειδοποιήσεις είναι απενεργοποιημένες + , + Λάβετε ειδοποίηση + Έχετε εγγραφεί τώρα σε αυτό το κανάλι + Εναλλαγή όλων \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 4d69a096d..2bef8db08 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -692,4 +692,8 @@ Paso de tempo Cambia el tamaño del intervalo de carga (actualmente %s). Un valor más bajo puede acelerar la carga inicial del vídeo. Los cambios requieren un reinicio del reproductor. Ajustar el tono por semitonos musicales + Notificaciones + Nuevos streams + Notificación del reproductor + Configurar notificación de la reproducción en curso \ No newline at end of file diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 439c9d906..055f103c6 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -687,4 +687,28 @@ LeakCanary pole saadaval ExoPlayer\'i vaikimisi väärtused Muuda video laadimise välpa (hetkel %s). Väiksemast väärtusest võib abi olla, kui tahad et video esitamine algaks varem. Muudatuste jõustamine eeldab rakenduse uuesti käivitamist. + Meediamängija teavitused + Teavitused pole kasutusel + Kontrollimise sagedus + Tellimuste-kohaste uute meedivoogude teavitused + Kas kustutame kõik allalaaditud failid andmekandjalt\? + Teavitused + Seadista hetkel esitatava meediavoo teavitusi + Uued meediavood + + %s uus meediavoog + %s uut meediavoogu + + Laadin meediavoo teavet… + Käivita uute meediavoogude kontroll + Uute meedivoogude teavitused + Tellimustega seotud uute meedivoogude teavitused + Võrguühendus on vajalik + Mis tahes võrk + Saa teavitusi + Sa oled nüüd selle kanali tellija + , + Lülita kõik sisse + Reguleeri helikõrgust muusikaliste pooltoonide kaupa + Tempo samm \ No newline at end of file diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 004d5d7a8..7faed5800 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -315,7 +315,7 @@ NewPipe proiektuak aintzat hartzen du zure pribatutasuna. Aplikazioak ez du zure baimenik gabe daturik jasotzen. \nNewPipe pribatutasun politikak azaltzen du zehazki bidali eta gordetako informazioa zein den kraskatze txosten bat bidaltzen duzunean. Irakurri pribatutasun politika - European General Data Protection Regulation (GDPR) legea betetzeko, NewPipe pribatutasun politika irakurtzera gonbidaatzen zaitugu. + Datuak Babesteko Araudi Orokorra (GDPR) betetzeko, NewPipe-en pribatutasun politika kontuan hartzera gonbidatzen zaitugu. Mesedez, irakurri kontu handiz. \nAkats txosten bat bidali ahal izateko onartu behar duzu. Onartu Ukatu @@ -664,7 +664,7 @@ Hasi erreproduzitzaile nagusia pantaila osoan Isatsari bideo hau erantsita Gehitu bideo hau isatsari - Erakutsi \"itxi erreproduzigailua\" + Erakutsi \"Itxi erreproduzigailua\" Prozesatzen... Itxoin mesedez Atzeko planoan erreproduzitzen dagoeneko Erroreen txostenen jakinarazpena @@ -684,4 +684,31 @@ Erreproduzigailua erabiltzean ustekabean ixteko aukera ematen du Erakutsi errore barra bat Sortu errore jakinarazpen bat + Konfiguratu uneko erreprodukzioaren jakinarazpenak + Jakinarazpenak + Erreproduzigailuaren jakinarazpenak + Jario berriak + Egiaztatu jario berriak + Jario berrien jakinarazpenak + Edozein sare + Jakinarazpenak desgaituta daude + Kanal honetara harpidetu zara + , + Txandakatu denak + Doitu tonua semitono musikalen arabera + Tempo urratsa + Aldatu karga maiztasun tamaina (unean %s). Balio txikiago batek bideoaren hasierako karga azkartu dezake. Erreproduzigailuaren berrabiarazte bat behar du. + Harpidetzen jario berriei buruz jakinarazi + Ezabatu deskargatutako fitxategi guztiak biltegitik\? + Harpidetzentzako jario berrien jakinarazpenak + Jarioaren xehetasunak kargatzen… + + jario berri %s + %s jario berri + + LeakCanary ez dago eskuragarri + Egiaztapen maiztasuna + Jakinarazi + ExoPlayer lehenetsia + Beharrezko sare konexioa \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 7d139d347..3186deb72 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -154,17 +154,17 @@ M B - %s مشترک + ۱ مشترک %s مشترک بدون بازدید - %s بازدید + ۱ بازدید %s بازدید بدون ویدیو - %s ویدیو + ۱ ویدیو %s ویدیو ایجاد @@ -438,7 +438,7 @@ جدید می‌خواهید این گروه را پاک کنید؟ - %d مورد گزیده + ۱ مورد گزیده %d مورد گزیده پردازش خوراک… @@ -446,19 +446,19 @@ بارگیری نشده: %d آخرین به‌روزرسانی خوراک: %s - %d روز + ۱ روز %d روز - %d ساعت + ۱ ساعت %d ساعت - %d دقیقه + ۱ دقیقه %d دقیقه - %d ثانیه + ۱ ثانیه %d ثانیه بله، و ویدیوهای ناقص دیده شده @@ -485,12 +485,12 @@ ∞ ویدیو بیش از ۱۰۰ ویدیو - %s شنونده + ۱ شنونده %s شنونده کسی در حال شنیدن نیست - %s بیننده + ۱ بیننده %s بیننده کسی در حال مشاهده نیست @@ -689,4 +689,26 @@ تنظیم زیر و بم با شبه‌تن‌ها تغییر اندازهٔ بازهٔ بار (هم‌اکنون %s). مقداری پایین‌تر، می‌تواند بار کردن نخستین ویدیو را سرعت بخشد. تغییرها نیاز به یک آغاز دوبارهٔ پخش‌کننده دارند. پیش‌گزیدهٔ اگزوپلیر + آگاهی‌ها + بار کردن جزییات جریان… + اجرای بررسی برای جریان‌های جدید + نیازمند اتّصال شبکه + ، + تغییر وضعیت همه + جریان‌های جدید + + ۱ جریان جدید + %s جریان جدید + + پیکربندی آگاهی جریان در حال پخش کنونی + آگاهی‌های جریان‌های جدید + آگاهی پخش‌کننده + آگاهی‌ها دربارهٔ جریان‌های جدید برای اشتراک‌ها + آگاهی‌ها از کار افتاده‌اند + آگاه شوید + بسامد بررسی + آگاه کردن دربارهٔ جریان‌های جدید از اشتراک‌ها + پاک کردن تمامی پرونده‌های بارگرفته از دیسک؟ + هر شبکه‌ای + اکنون مشترک این کانال شده‌اید \ No newline at end of file diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index c0197c3cf..1795fc98c 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -117,4 +117,5 @@ Haba ng fast forward/-rewind seek Ituloy ang pagpapalabas Mga Patok Ngayon + Subaybayan ang mga napanood nang video \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index a90822091..9b103256d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -691,4 +691,26 @@ Règler la hauteur par demi-tons musicaux Pas du tempo Valeur par défaut d’ExoPlayer + Nouveaux flux + Configurer la notification du flux en cours de lecture + Recevoir des notifications + Chargement des détails du flux… + + %s nouveau flux + %s nouveaux flux + + Connexion réseau requise + Notifications + Notifications désactivées + Vous êtes maintenant abonné(e) à cette chaîne + Notification du Lecteur + Notifications pour de nouveaux flux des abonnements + Supprimer tous les fichiers téléchargés du disque \? + Exécuter la vérification de nouveaux flux + Notifications pour de nouveaux flux + N\'importe quel réseau + Fréquence de vérification + Notifications pour de nouveaux flux des abonnements + , + Sélectionner/Désélectionner tout \ No newline at end of file diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 90c85c483..f6dd702b4 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -565,7 +565,7 @@ להתחיל לנגן אוטומטית — %s לנגן את התור לא ניתן לזהות את הכתובת. לפתוח אותה ביישומון אחר\? - הוספה אוטומטית לתור + סידור אוטומטי בתור התור מהנגן הפעיל יוחלף מעבר מנגן אחד למשנהו עלול להחליף את התור שלך לבקש אישור לפני מחיקת התור @@ -713,4 +713,28 @@ צעד מקצב ברירת מחדל של ExoPlayer שינוי גודל מרווח הטעינה (כרגע %s). ערך נמוך יותר עשוי להאיץ את טעינת הווידאו הראשונית. שינויים דורשים את הפעלת הנגן מחדש. + התראות על תזרימים חדשים להרשמה + תדירות בדיקה + נדרש חיבור לרשת + קבלת הודעה + להחליף את המצב של הכול + הגדרת התראת התזרים שמתנגן כרגע + התראות + + תזרים חדש + %s תזרימים חדשים + %s תזרימים חדשים + %s תזרימים חדשים + + פרטי התזרים נטענים… + הרצת בדיקה על תזרימים חדשים + התראות תזרימים חדשים + הודעה על תזרימים חדשים מהמינויים + , + תזרימים חדשים + התראות נגן + רשת כלשהי + למחוק את כל הקבצים שהורדו מהכונן\? + התראות מושבתות + נרשמת לערוץ הזה \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index bf02517ac..83a4a147c 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -677,4 +677,25 @@ Default ExoPlayer Atur nada berdasarkan semitone musik Ubah ukuran interval pemuatan (saat ini %s). Sebuah nilai yang rendah mungkin dapat membuat pemuatan video awal lebih cepat. Membutuhkan sebuah pemulaian ulang pada pemain. + Memuat detail stream… + Frekuensi pemeriksaan + Dibutuhkan koneksi jaringan + Jaringan apa saja + Beritahu saya + , + Alih semua + + %s stream baru + + Jalankan periksa untuk stream baru + Hapus semua file yang terunduh dari disk\? + Notifikasi dinonaktifkan + Notifikasi pemain + Notifikasi + Konfigurasi notifikasi permainan stream saat ini + Stream baru + Notifikasi tentang stream baru untuk langganan + Notifikasi stream baru + Beritahu tentang stream baru dari notifikasi + Anda sekarang berlangganan ke channel ini \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 9ab26ae6d..6e1b213e4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -291,7 +291,7 @@ Elimina i dati delle pagine web memorizzati nella cache Cache metadati svuotata Controlli della velocità di riproduzione - Tempo + Velocità Tono Scollega (può causare distorsione) Nessun flusso disponibile per il download @@ -689,4 +689,26 @@ Predefinito ExoPlayer Cambia la dimensione dell\'intervallo da caricare (attualmente %s). Un valore basso può velocizzare il caricamento iniziale del video. La modifica richiede il riavvio del lettore. Passo tempo + Notifiche di nuove stream dalle iscrizioni + Frequenza controllo + Richiesta connessione alla rete + Ricevi le notifiche + Sei ora iscritto a questo canale + , + Attiva/disattiva tutti + Notifiche per nuove stream + Notifica lettore + Configura la notifica della stream attualmente in riproduzione + Notifiche + Nuove stream + + %s nuova stream + %s nuove stream + + Caricando i dettagli della stream… + Cancellare tutti i file scaricati dal dispositivo\? + Avvia controllo per nuove stream + Qualsiasi rete + Le notifiche sono disabilitate + Notifica se ci sono nuove stream dalle iscrizioni \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 2bb071f8e..9469d81e0 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -674,4 +674,25 @@ エラーを報告する通知 LeakCanaryが利用不可能です 緩急音階 + プレイヤー通知 + ストリームの詳細を読み込んでいます… + 登録チャンネルの新しいストリームについて通知する + , + 通知は無効化されています + ExoPlayer のデフォルト + 通知を受け取る + このチャンネルを購読しました + ディスクからダウンロードしたすべてのファイルを削除しますか? + すべて切り替え + 確認する頻度 + 新しいストリームのチェックを実行 + 購読チャンネルの新しいストリームに関する通知 + 新しいストリームの通知 + + %s 件の新しいストリーム + + 新しいストリーム + 通知 + 現在再生しているストリームの通知を構成 + 読み込む間隔を変更します (現在 %s)。小さい値にすると初回読み込み時間が短くなります。変更にはプレイヤーの再起動が必要です。 \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index b163640b2..d0d54c62d 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -25,7 +25,7 @@ 다음/유사한 비디오 표시 지원하지 않는 URL입니다 기본 컨텐츠 언어 - 비디오 & 오디오 + 비디오 및 오디오 비디오 재생, 구간: 업로더 썸네일 싫어요 @@ -43,7 +43,7 @@ 네트워크 오류 \"검색\" 버튼을 눌러서 시작하세요 컨텐츠 - 연령 제한 컨텐츠 + 연령 제한 컨텐츠 보여주기 라이브 오류 모든 썸네일을 불러올 수 없습니다 @@ -52,7 +52,7 @@ 컨텐츠를 사용할 수 없습니다 다운로드 메뉴를 설정할 수 없습니다 죄송합니다. 오류가 발생했습니다. - 이메일을 통해 오류 보고 + 이메일을 통해 이 오류 보고 죄송합니다. 오류가 발생했습니다. 보고 정보: @@ -81,7 +81,7 @@ 팝업 기본 팝업 해상도 높은 해상도 표시 - 일부 기기에서만 2K/4K 해상도 재생이 지원됩니다 + 일부 기기에서만 2K/4K 영상을 재생할 수 있습니다 기본 비디오 형식 검은 테마 팝업 크기 및 위치 기억 @@ -98,7 +98,7 @@ 비디오 상세 정보 페이지에서 백그라운드/팝업 재생 버튼을 누를 경우 팁을 표시합니다 플레이어 동작 - 기록 & 캐시 + 기록 및 캐시 팝업 모드에서 재생 중 오류 보고 전부 @@ -108,13 +108,13 @@ 되돌리기 전부 재생 NewPipe 알림 - NewPipe 백그라운드 및 팝업 플레이어 알림 + NewPipe 플레이어 알림 [알 수 없음] 앱/UI 충돌 이 스트림을 재생할 수 없습니다 복구할 수 없는 플레이어 오류가 발생했습니다 플레이어 오류로부터 복구 중 - 무엇을:\\n요청:\\n컨텐츠 언어:\\n서비스:\\nGMT 기준 시간:\\n패키지:\\n버전:\\n안드로이드 버전: + 무엇을:\\n요청:\\n컨텐츠 언어:\\컨텐츠 국가:\\n앱 언어:\\n서비스:\\nGMT 기준 시간:\\n패키지:\\n버전:\\n안드로이드 버전: 결과 없음 구독할 항목을 추가하세요 @@ -188,7 +188,7 @@ 재생목록 북마크 이곳에 추가 정확하지는 않지만 빠른 탐색 - 정확하지 않은 탐색은 더 빠르게 위치를 탐색할 수 있지만 정확도는 떨어집니다 + 정확하지 않은 탐색은 더 빠르게 위치를 탐색할 수 있지만 정확도는 떨어집니다. 5, 15, 25초 탐색은 이 기능과 같이 작동하지 않습니다 다음 스트림을 자동으로 대기열에 추가하기 이전 스트림이 반복 재생 대기열이 아닐 경우, 관련 스트림을 자동 재생합니다 기본 콘텐츠 국가 @@ -201,7 +201,7 @@ 데이터베이스 가져오기 데이터베이스 내보내기 현재 시청 기록 및 구독 목록을 덮어쓰기 합니다 - 시청 기록, 구독 목록과 재생목록을 내보냅니다 + 시청 기록과 구독 목록, 재생 목록, 설정을 내보냅니다 외부 플레이어는 이러한 종류의 링크를 지원하지 않습니다 발견된 비디오 스트림 없음 발견된 오디오 스트림 없음 @@ -300,11 +300,11 @@ 시청 기록 삭제하기 동영상 시청 기록과 저장된 재생 위치를 삭제합니다 모든 시청 기록을 삭제하시겠습니까\? - 동영상 시청 기록이 삭제되었습니다. + 동영상 시청 기록이 삭제되었습니다 검색 기록 삭제 검색 기록을 모두 삭제합니다 모든 검색 기록을 삭제하시겠습니까\? - 검색 기록이 삭제되었습니다. + 검색 기록이 삭제되었습니다 NewPipe 개인정보 보호 정책 NewPipe 프로젝트는 사용자의 개인 정보 보호를 최우선으로 생각하며, 동의 없이 어떠한 정보도 수집하지 않습니다. \nNewPipe 개인정보 보호 정책에서는 오류 보고 시 어떠한 정보가 수집되고 저장되는지 자세히 명시되어 있습니다. @@ -393,7 +393,7 @@ 리스트 내 위치 표시 리스트에서 재생 위치를 표시합니다 데이터 삭제 - 재생위치 삭제완료. + 재생위치 삭제완료 파일이 이동되거나 삭제되었습니다 파일을 덮어쓰기할 수 없습니다 해당 이름으로 대기된 다운로드가 있습니다 @@ -431,7 +431,7 @@ 빠른-감기/되감기 찾는 시간 피어튜브 인스턴스 당신이 선호하는 피어튜브 인스턴스를 선택하세요. - %s에서 당신에게 가장 잘 어울리는 인스턴스를 찾으세요. + %s에서 당신이 좋아하는 인스턴스를 찾으세요. 인스턴스 추가하기 인스턴스 URL을 입력하세요. 인스턴스를 검증할 수 없습니다. @@ -517,4 +517,19 @@ 어두운 테마 최대 3개까지 축소 알림에 표시될 항목을 고를 수 있습니다! 아래 항목을 터치해서 편집하세요. 위에서부터 체크된 3개 항목은 축소 알림일 때도 표시됩니다 + 유튜브의 \"제한 모드\"를 활성화 + 비디오 해싱 진행 알림 + 새로운 스트림 + 구독에서 새 스트림이 있을 때 알림 + 오류 보고 알림 + reCAPTCHA 쿠키를 비웠습니다 + 플레이어 알림 + 알림 + 유튜브는 잔인할 수 있는 컨텐츠를 숨겨주는 \"제한 모드\"를 제공합니다 + reCAPTCHA 쿠키 비우기 + 플레이어 크래시 발생 + 없음 + 전체화면으로 주 플레이어 시작 + 비디오 해시 알림 + GitHub에 보고 \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d755cbcaf..a13dec423 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -22,7 +22,7 @@ Wybierz folder zapisywania plików audio Domyślna rozdzielczość Odtwórz w Kodi - Zainstalować brakującą aplikację Kore\? + Czy zainstalować brakującą aplikację Kore\? Pokazuj opcję „Odtwórz z Kodi” Wyświetlaj opcję odtwarzania wideo przez centrum multimedialne Kodi Dźwięk @@ -406,7 +406,7 @@ Wyczyść dane Usunięto pozycje odtwarzania Plik usunięty albo przeniesiony - Plik z tą nazwą już istnieje + Plik o tej nazwie już istnieje Nie udało się nadpisać pliku Plik o tej samej nazwie oczekuje na pobranie NewPipe został zamknięty podczas pracy nad plikiem @@ -539,7 +539,7 @@ Tak, i częściowo obejrzane wideo Wideo, które zostały obejrzane przed i po dodaniu do playlisty, zostaną usunięte. \nCzy na pewno\? Tego nie da się cofnąć! - Usunąć obejrzane wideo\? + Czy usunąć obejrzane wideo\? Usuń obejrzane Oryginalne teksty z usług będą widoczne w strumieniowanych pozycjach Pokazuj oryginalny czas na pozycjach @@ -709,4 +709,28 @@ domyślny ExoPlayera Dostosuj wysokość półtonami Krok tempa + Powiadomienie odtwarzacza + Skonfiguruj powiadomienie aktualnie odtwarzanego strumienia + Uruchom sprawdzenie nowych strumieni + Dowolna sieć + Subskrybujesz teraz ten kanał + Powiadomienia + Nowe strumienie + Powiadomienia o nowych strumieniach dla subskrypcji + + %s nowy strumień + %s nowe strumienie + %s nowych strumieni + %s nowych strumieni + + Ładowanie szczegółów strumienia… + Powiadomienia o nowych strumieniach + Powiadamiaj o nowych strumieniach z subskrypcji + Częstotliwość sprawdzania + Wymagane połączenie sieciowe + Czy usunąć wszystkie pobrane pliki z dysku\? + Powiadomienia są wyłączone + Otrzymuj powiadomienia + , + Przełącz wszystkie \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 408d33e87..1746d6615 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -689,4 +689,26 @@ Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. As alterações exigem que o player reinicie. Ajustar o tom por semitons musicais ExoPlayer padrão + Notificação do reprodutor + Configurar a notificação do fluxo da reprodução atual + Notificações + Novos streams + Notificações sobre novas transmissões para inscrições + Notificações de novas transmissões + Notificar sobre novas transmissões de inscrições + Frequência de verificação + Nenhuma rede + Excluir todos os arquivos baixados do disco\? + Agora você se inscreveu neste canal + Alternar tudo + , + Carregando detalhes da transmissão… + + %s nova transmissão + %s novas transmissões + + Executar verificação de novas transmissões + Conexão de rede necessária + As notificações estão desativadas + Seja notificado \ No newline at end of file diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index a9d43252b..8e2cd1366 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -689,4 +689,26 @@ Ajustar o tom por semitons musicais Passo do tempo Predefinido do ExoPlayer + Notificações + A carregar detalhes do fluxo… + Verificar se há novos fluxos + Notificações sobre novos fluxos + Frequência da verificação + Apagar todos os ficheiros descarregados do disco\? + Notificações são desativadas + + %s fluxo novo + %s fluxos novos + + Notificar sobre novos fluxos de assinaturas + Conexão de rede necessária + Qualquer rede + Alternar tudo + Notificações sobre novos fluxos para assinaturas + Notificação do reprodutor + Configurar a notificação da reprodução do fluxo atual + Seja notificado + Agora assinou este canal + , + Novos fluxos \ No newline at end of file diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index f9b9856ee..d6993c012 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -690,4 +690,26 @@ Predefinido do ExoPlayer Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. Se fizer alterações é necessário reiniciar. Passo do tempo + Notificação do reprodutor + Configurar a notificação da reprodução do fluxo atual + Notificações + A carregar detalhes do fluxo… + Verificar se há novos fluxos + Notificações sobre novos fluxos + Notificar sobre novos fluxos de assinaturas + Frequência da verificação + Conexão de rede necessária + Qualquer rede + Agora assinou este canal + Alternar tudo + Apagar todos os ficheiros descarregados do disco\? + Novos fluxos + Notificações sobre novos fluxos para assinaturas + + %s fluxo novo + %s fluxos novos + + Seja notificado + Notificações são desativadas + , \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 93ae31506..6527c8d36 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -725,4 +725,9 @@ Шаг темпа Стандартное значение ExoPlayer Изменить размер интервала загрузки (сейчас %s). Меньшее значение может ускорить начальную загрузку видео. Изменение значения потребует перезапуска плеера. + Загрузка деталей трансляции… + Проверить на наличие новых трансляций + Удалить все загруженные файлы\? + Уведомления плеера + , \ No newline at end of file diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 3fdd9b768..1a6456865 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -686,7 +686,29 @@ Giai in riprodutzione in s\'isfundu LeakCanary no est a disponimentu Règula s\'intonatzione in base a sos semitonos musicales - Passu de su ritmu + Passu de tempus Valore ExoPlayer predefinidu Muda sa mannària de s\'intervallu de carrigamentu (in custu momentu %s). Unu valore prus bassu diat pòdere allestrare su carrigamentu de incumintzu de su vìdeu. Sas modìficas tenent bisòngiu de torrare a allùghere su riproduidore. + Cunfigura sa notìfica de su flussu in cursu de riprodutzione + Notìficas de flussos noos dae sas iscritziones + + %s flussu nou + %s flussos noos + + Carrighende sos detàllios de su flussu… + Avia una verìfica pro flussos noos + Notìficas pro sos flussos noos + Notìfica de flussos noos dae sas iscritziones + Frecuèntzia de controllu + Connessione de retze rechesta + Cale si siat retze + Sas notìficas sunt disabilitadas + Retzi notìficas + , + Ativa/disativa totu + Como ses iscritu a custu canale + Notìfica de su riproduidore + Notìficas + Flussos noos + Iscantzellare totu sos archìvios iscarrigados dae su discu\? \ No newline at end of file diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 265dec114..c630eae16 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -702,4 +702,14 @@ Krok tempa ExoPlayer preddefinovaný Zmeniť interval načítania (aktuálne %s). Menšia hodnota môže zvýšiť rýchlosť prvotného načítania videa. Zmena vyžaduje reštart. + Upozornenia + Frekvencia kontroly + Vymazať všetky stiahnuté súbory z disku\? + Upozornenia sú vypnuté + Upozornenie z prehrávača + Nastavte notifikáciu aktuálneho prehrávania + Je vyžadované pripojenie na internet + Začali ste odoberať tento kanál + , + Zapnúť všetko \ No newline at end of file diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index d08bdbf12..95d5ea82f 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -175,7 +175,7 @@ Välj en kanal Inga kanal prenumerationer ännu Välj en kiosk - Trend + Trendigt Topp 50 Nytt och populärt Ta bort @@ -243,7 +243,7 @@ Byt namn 1 objekt borttaget. Ingen app installerad för att spela upp filen - NewPipes Sekretesspolicy + NewPipes sekretesspolicy NewPipe-projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. \nNewPipes sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport. Läs sekretesspolicy @@ -258,7 +258,7 @@ Vill du också importera inställningar? Öppna navigationspanelen Stäng navigationspanelen - Föredragen \'öppna\' åtgärd + Föredragen \"öppna\" åtgärd Standardåtgärden när du öppnar innehåll — %s Videospelare Bakgrundsspelare @@ -524,7 +524,7 @@ Skapad av %s Ingen spellista har bokmärkts än Visa endast prenumerationer som inte grupperats - Skala tumnagel till 1:1-förhållande + Skala miniatyrbild till 1: 1 bildförhållande Endast över Wi-Fi Skala videominiatyrbilden som visas i aviseringen från 16:9- till 1:1-förhållande (kan orsaka bildförvrängning) Starta uppspelning automatiskt — %s @@ -637,7 +637,7 @@ Markera som sedd Ej listad Aktuellt - Nattema + Natt-tema Aviseringar för videohashningsframsteg Miniatyrbild-webbadress Inaktivera medietunnel om du upplever en svart skärm eller stamning vid videouppspelning @@ -689,4 +689,26 @@ ExoPlayer standard Ändra inläsningsintervallets storlek (för närvarande %s). Ett lägre värde kan påskynda den första videoinläsningen. Ändringar kräver omstart av spelaren. Temposteg + Validera frekvens + Kräver nätverksanslutning + Alla nätverk + Radera alla nedladdade filer från disken\? + Notifikationer är avstängda + Bli medelad + Du har nu prenumenerat till denna kanalen + Notifikationer om nya strömmar för prenumenanter + + %s Ny ström + %s Nya strömmar + + Konfigurera meddelande om aktuell ström som spelas upp + Kör leta efter nya strömmar + Medela om nya strömmar från prenumenanter + Notifikationer + Nya strömmar + Laddar strömdetaljer… + Nya strömmnings notifikationer + , + Spelaravisering + Växla alla \ No newline at end of file diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index 82e0feaac..d41b317e8 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -65,4 +65,5 @@ \n \nBuksan ang \"%1$s\" sa ayos ng app kung gusto mong makita ito. Mga Artista + Nakalutang \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 12a2d4348..4dd10063b 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -689,4 +689,26 @@ ExoPlayer öntanımlısı Tempo adımı Perdeyi müzikal yarım tonlarla uyarla + Yeni akış bildirimleri + Bildirimler + + %s yeni akış + %s yeni akış + + Yeni akışları denetlemeyi çalıştır + Oynatıcı bildirimi + Oynatılan akış bildirimini yapılandırın + Yeni akışlar + Akış ayrıntıları yükleniyor… + Abonelikler için yeni akışlarla ilgili bildirimler + Gerekli ağ bağlantısı + Bildirimler devre dışı + Bildirim alın + Artık bu kanala abone oldunuz + Aboneliklerden yeni akışlar hakkında bildirim gönder + Denetleme sıklığı + Herhangi bir ağ + İndirilen tüm dosyalar diskten silinsin mi\? + , + Tümünü değiştir \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 3f4d1e214..06e51f576 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -706,4 +706,27 @@ Регулювання висоти звуку за музичними півтонами Типовий ExoPlayer Змінити розмір інтервалу завантаження (наразі %s). Менше значення може прискорити початкове завантаження відео. Зміни вимагають перезапуску програвача. + Ви підписалися на цей канал + , + Сповіщення про нові трансляції для підписок + + %s нова трансляція + %s нові трансляції + %s нових трансляцій + %s нових трансляцій + + Завантаження відомостей про трансляцію… + Запустити виявлення нових трансляцій + Сповіщати про нові трансляції з підписок + Сповіщення вимкнено + Будь-яка мережа + Видалити всі завантажені файли з диска\? + Перемкнути всі + Сповіщати + Сповіщення програвача + Сповіщення + Нові трансляції + Сповіщення про нові трансляції + Частота перевірки + Необхідний тип з\'єднання \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 65054bebe..2a00a818e 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -145,7 +145,7 @@ 睇過嘅紀錄 恢復播放 返返最後播放到去嗰個位 - 播放清單有排位 + 喺播放清單排第幾 縮圖放到去 1:1 長寬比 顯示喺通知嘅影片縮圖由 16:9 放到去 1:1 長寬比 (話唔定會鬆郁矇) 通知色彩化 @@ -586,4 +586,27 @@ 收起播放清單 唔再收起 係咪要刪除呢個播放清單? + 播放器通知 + 調整目前播放緊嘅串流嘅通知 + 訂閱有新加串流嘅通知 + 載入緊串流詳細資料… + 通知訂閱有新加串流 + 檢查頻率 + 須要網絡連線 + 不拘任何網絡 + 收取通知 + 您現已訂閱呢個頻道 + 全部切換 + 執行檢查有冇新加串流 + 通知 + 新加串流 + + %s 個新加串流 + + 按樂音半度調整音高 + 新加串流通知 + 係咪要喺磁碟機上面消除晒全部下載咗嘅檔案? + 通知已停用 + 單曲 + 節奏步伐 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0f74f5bde..d93cf4088 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -680,4 +680,25 @@ ExoPlayer 預設值 變更載入間隔大小(目前為 %s)。較低的值可能會提昇初始影片載入速度。變更需要重新啟動播放器。 按音樂半音調整音高 + 播放器通知 + 通知 + 正在載入串流詳細資訊…… + 您已訂閱此頻道 + , + 切換全部 + 新串流通知 + 設定目前播放串流通知 + 需要網路連線 + 從磁碟抹除所有已下載的檔案? + 取得通知 + 新串流 + 關於訂閱的新串流通知 + 執行新串流檢查 + 通知來自訂閱的新串流 + 檢查頻率 + 通知已停用 + + %s 個新串流 + + 任意網路 \ No newline at end of file diff --git a/fastlane/metadata/android/ar_LY/changelogs/63.txt b/fastlane/metadata/android/ar_LY/changelogs/63.txt new file mode 100644 index 000000000..535376e48 --- /dev/null +++ b/fastlane/metadata/android/ar_LY/changelogs/63.txt @@ -0,0 +1,7 @@ +### تحسينات +- استيراد / تصدير إعدادات # 1333 +- تقليل السحب على المكشوف (تحسين الأداء) #1371 +- تحسينات رمز صغير # 1375 +- أضف كل شيء عن الناتج المحلي الإجمالي #1420 +### ثابت +- تنزيل: إصلاح تحطم على تحميل التنزيلات التي لم تنته من .ملفات جيجا # 1407 diff --git a/fastlane/metadata/android/ar_LY/changelogs/64.txt b/fastlane/metadata/android/ar_LY/changelogs/64.txt new file mode 100644 index 000000000..bb2e2f3fd --- /dev/null +++ b/fastlane/metadata/android/ar_LY/changelogs/64.txt @@ -0,0 +1,7 @@ +### تحسينات +- أضيفت القدرة على الحد من جودة الفيديو في حالة استخدام البيانات المتنقلة. #1339 +- تذكر السطوع للدورة # 1442 +- تحسين أداء التنزيل لوحدات المعالجة المركزية الأضعف # 1431 +- إضافة (العمل) دعم الدورة الإعلامية # 1433 +### إصلاح +- فيكس تحطم على فتح التنزيلات (فيكس متاحة الآن ليبني الإصدار) #1441 diff --git a/fastlane/metadata/android/ar_LY/full_description.txt b/fastlane/metadata/android/ar_LY/full_description.txt new file mode 100644 index 000000000..f1a39cbdd --- /dev/null +++ b/fastlane/metadata/android/ar_LY/full_description.txt @@ -0,0 +1 @@ +نيو بايب لا تستخدم أي مكتبات إطار جوجل ، أو يوتيوب API. إنه يوزع الموقع فقط من أجل الحصول على المعلومات التي يحتاجها. لذلك يمكن استخدام هذا التطبيق على الأجهزة دون تثبيت خدمات جوجل. أيضا ، لا تحتاج إلى حساب يوتيوب لاستخدام نيو بايب ، وانها الخيط. diff --git a/fastlane/metadata/android/ar_LY/short_description.txt b/fastlane/metadata/android/ar_LY/short_description.txt new file mode 100644 index 000000000..72c4d0ee6 --- /dev/null +++ b/fastlane/metadata/android/ar_LY/short_description.txt @@ -0,0 +1 @@ +واجهة يوتيوب خفيفة الوزن مجانية للاندرويد diff --git a/fastlane/metadata/android/de/changelogs/985.txt b/fastlane/metadata/android/de/changelogs/985.txt index e2a10be2e..43623578f 100644 --- a/fastlane/metadata/android/de/changelogs/985.txt +++ b/fastlane/metadata/android/de/changelogs/985.txt @@ -1 +1 @@ -Behoben, dass YouTube keinen Stream abspielte. +Behoben, dass YouTube keinen Stream abspielte diff --git a/fastlane/metadata/android/es/changelogs/66.txt b/fastlane/metadata/android/es/changelogs/66.txt new file mode 100644 index 000000000..ff20c3517 --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/66.txt @@ -0,0 +1 @@ +- Revisado, minimizar el Reproductor a Imagen Sobre Imagen no destruye el Reproductor cuando no se permite el permiso para la ventana emergente. diff --git a/fastlane/metadata/android/es/changelogs/68.txt b/fastlane/metadata/android/es/changelogs/68.txt new file mode 100644 index 000000000..728f819f9 --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/68.txt @@ -0,0 +1,8 @@ +- Mostrar "Recuento de suscriptores no disponible" en esos casos +- Corregir NPE cuando una lista de reproducción de YouTube está vacía +- Corrección rápida de los quioscos en SoundCloud +- Refactorización y corrección de errores #1623 + - Arreglar el resultado cíclico de la búsqueda #1562 + - Corrección de la barra de búsqueda no estática + - Fix YT Premium video no se bloquean correctamente + - Corregir los vídeos que a veces no se cargan (debido al análisis sintáctico de DASH) diff --git a/fastlane/metadata/android/es/changelogs/71.txt b/fastlane/metadata/android/es/changelogs/71.txt new file mode 100644 index 000000000..7c98dafa3 --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/71.txt @@ -0,0 +1,6 @@ +### Mejoras +* Añadir notificación de actualización de la aplicación para la versión de GitHub (#1608 por @krtkush) +* Varias mejoras en el gestor de descargas (#1944 de @kapodamy): +* añadir los iconos blancos que faltan y utilizar la manera de cambiar los colores de los iconos + * comprobar si el iterador está inicializado (corrige #2031) + * permite reintentar las descargas con el error "post-procesamiento fallido" en el nuevo muxer diff --git a/fastlane/metadata/android/es/changelogs/730.txt b/fastlane/metadata/android/es/changelogs/730.txt new file mode 100644 index 000000000..45f336afd --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/730.txt @@ -0,0 +1,2 @@ +# Corregido +-Parche rápido del error de la función de descifrado de nuevo. diff --git a/fastlane/metadata/android/es/changelogs/770.txt b/fastlane/metadata/android/es/changelogs/770.txt index a043c0c9f..f0abd100d 100644 --- a/fastlane/metadata/android/es/changelogs/770.txt +++ b/fastlane/metadata/android/es/changelogs/770.txt @@ -1,4 +1,4 @@ Cambios en 0.17.2 Corregido -- Corregido no hay vídeo estaba disponible +- Corregido, el video no estaba disponible diff --git a/fastlane/metadata/android/fa/changelogs/850.txt b/fastlane/metadata/android/fa/changelogs/850.txt new file mode 100644 index 000000000..ef761776f --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/850.txt @@ -0,0 +1 @@ +در این نسخه سایت یوتیوب آپدیت شد. سایت قدیمی منسوخ شد و دیگر قابل استفاده نخواهد بود، درنتیجه لازم است که شما اپلیکیشن را آپدیت کنید. diff --git a/fastlane/metadata/android/fa/changelogs/982.txt b/fastlane/metadata/android/fa/changelogs/982.txt new file mode 100644 index 000000000..7c5f9147c --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/982.txt @@ -0,0 +1 @@ +مشکل عدم نمایش پخش‌زنده برطرف شد. diff --git a/fastlane/metadata/android/fa/changelogs/985.txt b/fastlane/metadata/android/fa/changelogs/985.txt new file mode 100644 index 000000000..ba5413d49 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/985.txt @@ -0,0 +1 @@ +مشکل عدم نمایش پخش‌زنده برطرف شد diff --git a/fastlane/metadata/android/he/changelogs/986.txt b/fastlane/metadata/android/he/changelogs/986.txt new file mode 100644 index 000000000..53dabb4cf --- /dev/null +++ b/fastlane/metadata/android/he/changelogs/986.txt @@ -0,0 +1,16 @@ +חדש +• התראות על תזרימים חדשים +• מעבר חלק בין נגני רקע ווידאו +• שינוי גובה הצליל בחצאי טונים +• הוספת התור מהנגן הראשי לתור + +שיפורים +• גודל צעד מהירות/גובה צליל נשמר +• צמצום זמן הטעינה הראשונית בנגן הווידאו +• מנשק המשתמש בנגן Android TV השתפר +• אישור לפני מחיקת כל הקבצים שהורדו + +תיקונים +• תוקנה התופעה שכפתורי המדיה לא מסתירים את פקדי הנגן +• תוקנה איפוס נגינה בשינוי סוג נגן +• תוקנה החלפת חלונית רשימת הנגינה diff --git a/fastlane/metadata/android/id/changelogs/986.txt b/fastlane/metadata/android/id/changelogs/986.txt new file mode 100644 index 000000000..886467178 --- /dev/null +++ b/fastlane/metadata/android/id/changelogs/986.txt @@ -0,0 +1,16 @@ +Baru +• Notifikasi untuk stream baru +• Transisi tanpa batas antara pemutar latar belakang & video +• Ubah nada dgn semitone +• Tambahkan antrean pemain utama ke daftar putar + +Perbaikan +• Ingat ukuran langkah kecepatan/nada +• Kurangi buffering panjang awal di pemutar video +• Tingkatkan UI pemutar utk Android TV +• Konfirmasi sblm menghapus semua file yang diunduh + +Diperbaiki +• Tombol media agar tdk menyembunyikan kontrol pemain +• Reset pemutaran pada perubahan tipe pemutar +• Memutar dialog dftr putar diff --git a/fastlane/metadata/android/nb-NO/changelogs/986.txt b/fastlane/metadata/android/nb-NO/changelogs/986.txt new file mode 100644 index 000000000..d60a5e1d5 --- /dev/null +++ b/fastlane/metadata/android/nb-NO/changelogs/986.txt @@ -0,0 +1,16 @@ +Nytt +• Merknader for nye strømmer +• Sømløs overgang i bakgrunn og videospillere +• Endre toneart med halvtoner +• Legg til hovedspillerkøen på slutten av en spilleliste + +Forbedret +• Husk hastighet/toneart-stegstørrelse +• Unngå lang mellomlagring i videospilleren +• Forbedret spillergrensesnitt for Android TV +• Bekreft sletting av alle nedlastede filer + +Fikset +• Mediaknapper som ikke skjuler avspillerkontroller +• Avspillingstilbakestilling ved endring av spillertype +• Rotering av spillelistedialog diff --git a/fastlane/metadata/android/pl/changelogs/986.txt b/fastlane/metadata/android/pl/changelogs/986.txt new file mode 100644 index 000000000..c9146e57c --- /dev/null +++ b/fastlane/metadata/android/pl/changelogs/986.txt @@ -0,0 +1,16 @@ +Nowe +• Powiadom. o nowych strumieniach +• Płynne przejście między odtwarzacz. w tle i wideo +• Zmiana wys. tonu o półtony +• Dołącz. głównej kolejki odtwarzacza do playlisty + +Ulepszone +• Zapamięt. wielkości kroku prędk./wys. dźwięku +• Zmniej. wstępne długie bufor. w odtwarzaczu +• Ulepsz. odtwarzacza dla Android TV +• Potwierdz. przed usun. wszystkich plików + +Naprawione +• Przycisk multimediów nie ukrywał kontrolek odtwarzacza +• Reset odtwarzania po zmianie typu odtwarzacz. +• Obracanie okna playlisty diff --git a/fastlane/metadata/android/ru/changelogs/982.txt b/fastlane/metadata/android/ru/changelogs/982.txt new file mode 100644 index 000000000..0ea2b74e6 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/982.txt @@ -0,0 +1 @@ +Исправлена ошибка, из-за которой YouTube не воспроизводил ни одну трансляцию. diff --git a/fastlane/metadata/android/sk/changelogs/64.txt b/fastlane/metadata/android/sk/changelogs/64.txt new file mode 100644 index 000000000..aa9fd1f03 --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/64.txt @@ -0,0 +1,8 @@ +### Vylepšenia +- Pridaná možnosť obmedziť kvalitu videa pri používaní mobilných dát. #1339 +- Zapamätanie jasu pre reláciu #1442 +- Zlepšenie výkonu sťahovania pre slabšie procesory #1431 +- Pridanie (funkčnej) podpory pre reláciu médií #1433 + +### Opravy +- Oprava zlyhania pri otváraní sťahovania (oprava je teraz k dispozícii pre verzie vydania) #1441 diff --git a/fastlane/metadata/android/sv/changelogs/969.txt b/fastlane/metadata/android/sv/changelogs/969.txt new file mode 100644 index 000000000..a9ecf6b67 --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/969.txt @@ -0,0 +1,13 @@ +• Tillåt installation på extern lagring + +• [Bandcamp] Stöd för att visa de tre första kommentarerna i en stream har lagts till. + +• Visa endast "nedladdning har börjat" när nedladdningen har påbörjats. + +• Ställ inte in reCaptcha-cookie när det inte finns någon cookie lagrad. + +• Player] Förbättra prestanda för cache + +• Avskaffa tidigare Snackbars när nedladdningar raderas + +• Fixat att försöka radera objekt som inte finns i listan diff --git a/fastlane/metadata/android/tr/changelogs/910.txt b/fastlane/metadata/android/tr/changelogs/910.txt new file mode 100644 index 000000000..c3bc3a516 --- /dev/null +++ b/fastlane/metadata/android/tr/changelogs/910.txt @@ -0,0 +1 @@ +Bazı nadir durumlarda NewPipe'ın başlamasını engelleyen veri tabanı taşıması düzeltildi. diff --git a/fastlane/metadata/android/tr/changelogs/963.txt b/fastlane/metadata/android/tr/changelogs/963.txt new file mode 100644 index 000000000..f56a60157 --- /dev/null +++ b/fastlane/metadata/android/tr/changelogs/963.txt @@ -0,0 +1 @@ +• [YouTube] Kanal devam ettirme düzeltildi diff --git a/fastlane/metadata/android/tr/changelogs/982.txt b/fastlane/metadata/android/tr/changelogs/982.txt new file mode 100644 index 000000000..9e2b10e2d --- /dev/null +++ b/fastlane/metadata/android/tr/changelogs/982.txt @@ -0,0 +1 @@ +YouTube'un herhangi bir akışı oynatmaması düzeltildi. diff --git a/fastlane/metadata/android/tr/changelogs/985.txt b/fastlane/metadata/android/tr/changelogs/985.txt new file mode 100644 index 000000000..e5979c68d --- /dev/null +++ b/fastlane/metadata/android/tr/changelogs/985.txt @@ -0,0 +1 @@ +YouTube'un herhangi bir akışı oynatmaması düzeltildi diff --git a/fastlane/metadata/android/uk/changelogs/985.txt b/fastlane/metadata/android/uk/changelogs/985.txt index 41d4d11ce..905287c74 100644 --- a/fastlane/metadata/android/uk/changelogs/985.txt +++ b/fastlane/metadata/android/uk/changelogs/985.txt @@ -1 +1 @@ -Виправлено проблему невідтворюваності трансляцій YouTube. +Виправлено проблему невідтворюваності трансляцій diff --git a/fastlane/metadata/android/uk/changelogs/986.txt b/fastlane/metadata/android/uk/changelogs/986.txt new file mode 100644 index 000000000..f4e9472b1 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/986.txt @@ -0,0 +1,13 @@ +Нове +• Сповіщення про нові потоки +• Плавний перехід між фоновими та відеопрогравачем +• Додавання основної черги програвача до добірки + +Поліпшення +• Згладження початкової тривалої буферизації у відеопрогравачі +• Покращення інтерфейсу користувача програвача для Android TV +• Підтвердження перед видаленням усіх завантажених файлів + +Виправлення +• Виправлення кнопки мультимедіа, яка не приховує елементи керування програвачем +• Виправлено обертання діалогового вікна списку відтворення diff --git a/fastlane/metadata/android/zh-Hans/changelogs/986.txt b/fastlane/metadata/android/zh-Hans/changelogs/986.txt new file mode 100644 index 000000000..9a23508cb --- /dev/null +++ b/fastlane/metadata/android/zh-Hans/changelogs/986.txt @@ -0,0 +1,16 @@ +新增 +• 新串流的通知 +• 后台播放和(前台)d播放器之间的无缝过渡 +• 通过半音改变音高 +• 将主播放器队列追加至一播放列表 + +改进 +• 记住速度/音调步长 +• 减少视频播放器中初始时间缓冲 +• 改进 Android TV 的播放器界面 +• 在删除所有下载的文件之前进去确认 + +修复 +• 使用物理媒体按钮(如耳机按键等)不会隐藏播放器控件 +• 播放器类型更改时重置播放 +• 旋转播放列表对话框的异常 diff --git a/fastlane/metadata/android/zh-Hant/changelogs/985.txt b/fastlane/metadata/android/zh-Hant/changelogs/985.txt new file mode 100644 index 000000000..4e8bf6537 --- /dev/null +++ b/fastlane/metadata/android/zh-Hant/changelogs/985.txt @@ -0,0 +1 @@ +修正 YouTube 無法播放任何串流 diff --git a/fastlane/metadata/android/zh-Hant/changelogs/986.txt b/fastlane/metadata/android/zh-Hant/changelogs/986.txt new file mode 100644 index 000000000..964a2d74f --- /dev/null +++ b/fastlane/metadata/android/zh-Hant/changelogs/986.txt @@ -0,0 +1,16 @@ +新增 +• 新串流通知 +• 背景與影片播放器之間無縫轉換 +• 按半音調整音高 +• 將主播放器佇列追加至播放清單中 + +改進 +• 記住速度/音高步距 +• 避免影片播放器初始緩衝太久 +• 改善 Android TV 的播放器介面 +• 刪除全部已下載檔案前先確認 + +修正 +• 修正媒體鍵未有隱藏播放器控制項 +• 修正播放器類型變更時重新播放 +• 修正播放清單對話方塊的縱橫旋轉 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt new file mode 100644 index 000000000..f1d67925f --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt @@ -0,0 +1 @@ +修正 YouTube 乜串流都播唔到 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt new file mode 100644 index 000000000..e451189ef --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt @@ -0,0 +1,16 @@ +新嘢 +• 新加串流有通知 +• 幕後同影片播放器無縫切換 +• 按半度調整音高 +• 將主版面播放器排隊播追加落播放清單 + +進步 +• 記住速率/音高調整步伐 +• 改善影片播放器開波時漫長緩衝 +• 完善 Android TV 嘅播放器版面 +• 刪除晒全部下載咗嘅檔案之前先確認 + +修正 +• 修正媒體掣冇隱藏到啲播放器控掣 +• 修正播放器類型有變時重頭再播 +• 修正播放器清單對話方塊嘅方向旋轉 diff --git a/fastlane/metadata/android/zh_Hant_HK/full_description.txt b/fastlane/metadata/android/zh_Hant_HK/full_description.txt index 1a516a17d..9fe7dfeb9 100644 --- a/fastlane/metadata/android/zh_Hant_HK/full_description.txt +++ b/fastlane/metadata/android/zh_Hant_HK/full_description.txt @@ -1 +1 @@ -NewPipe 沒有使用任何 Google 框架庫組件或是 YouTube API。NewPipe 只需解析網頁以獲取所需資訊,因此 NewPipe 可在沒有安裝 Google 服務的裝置上使用。此外,你亦無需 YouTube 帳號就能使用NewPipe,NewPipe 是自由及開放源碼軟件(FLOSS)。 +NewPipe 冇用到任何 Google 框架程式庫又或者 YouTube API,單憑解析網站去攞到所需嘅資訊,因此就算冇裝 Google 服務嘅機都用得呢個 app。此外,NewPipe 亦毋需您要有 YouTube 帳戶就用得,而且係自由同開放原始碼嘅軟件 (FLOSS)。 diff --git a/fastlane/metadata/android/zh_Hant_HK/short_description.txt b/fastlane/metadata/android/zh_Hant_HK/short_description.txt index fca9de0da..8f4a31c03 100644 --- a/fastlane/metadata/android/zh_Hant_HK/short_description.txt +++ b/fastlane/metadata/android/zh_Hant_HK/short_description.txt @@ -1 +1 @@ -一個自由輕量的 Android YouTube 前端。 +一個自由輕巧嘅 Android YouTube 前端。 From b8dbb3f0733288fac580b9f09ae8399a7bbd24a2 Mon Sep 17 00:00:00 2001 From: Stypox Date: Thu, 28 Apr 2022 11:32:33 +0200 Subject: [PATCH 29/33] Use 64 KiB as the default progressive load interval This ensures a small value is used by default, solving buffering issues at the beginning of videos --- .../org/schabi/newpipe/player/helper/PlayerHelper.java | 2 +- app/src/main/res/values/settings_keys.xml | 9 +++++---- app/src/main/res/values/strings.xml | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index 513e94419..b73c6cf7f 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -426,7 +426,7 @@ public final class PlayerHelper { context.getString(R.string.progressive_load_interval_key), context.getString(R.string.progressive_load_interval_default_value)); - if (context.getString(R.string.progressive_load_interval_default_value) + if (context.getString(R.string.progressive_load_interval_exoplayer_default_value) .equals(preferredIntervalBytes)) { return ProgressiveMediaSource.DEFAULT_LOADING_CHECK_INTERVAL_BYTES; } diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index d72be0ccf..bf42aaf0e 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -56,20 +56,21 @@ progressive_load_interval - default + 64 + exoplayer_default 1 KiB 16 KiB 64 KiB 256 KiB - @string/progressive_load_interval_default + @string/progressive_load_interval_exoplayer_default 1 16 - 64 + @string/progressive_load_interval_default_value 256 - default + @string/progressive_load_interval_exoplayer_default_value minimize_on_exit_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 792e6414b..0af08a8ad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -733,7 +733,7 @@ On Off - ExoPlayer default + ExoPlayer default Notifications are disabled Get notified From 6a4d8329c35e6c67c8192d47a6d05fbfbc7f8b66 Mon Sep 17 00:00:00 2001 From: Stypox Date: Fri, 29 Apr 2022 16:11:28 +0200 Subject: [PATCH 30/33] Rename progressive_load_interval_exoplayer_default for all languages --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-b+zh+HANS+CN/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-et/strings.xml | 2 +- app/src/main/res/values-eu/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-gl/strings.xml | 2 +- app/src/main/res/values-he/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-nb-rNO/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-pt-rPT/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sc/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rHK/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 7022a2c29..3bb304848 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -735,7 +735,7 @@ LeakCanary غير متوفر ضبط الصوت من خلال النغمات الموسيقية النصفية خطوة الإيقاع - الافتراضي ExoPlayer + الافتراضي ExoPlayer تغيير حجم الفاصل الزمني للتحميل (حاليا %s). قد تؤدي القيمة الأقل إلى تسريع تحميل الفيديو الأولي. تتطلب التغييرات إعادة تشغيل المشغل. تكوين إشعار مشغل البث الحالي الإشعارات diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml index 26c930886..c5b9e9646 100644 --- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml +++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml @@ -676,7 +676,7 @@ 以音乐半音调整音高 节奏步长 改变加载间隔的大小(当前%s),较低的值可以加快初始的视频加载速度,改变需要重启播放器。 - ExoPlayer 默认 + ExoPlayer 默认 配置当前正在播放的串流的通知 新串流通知 检查频率 diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 98523442a..84c957f1c 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -700,5 +700,5 @@ LeakCanary není dostupné Upravit výšku tónů po půltónech Krok tempa - Výchozí ExoPlayer + Výchozí ExoPlayer \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 51224727d..1b47fba2f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -690,7 +690,7 @@ Tonhöhe nach musikalischen Halbtönen anpassen Ändern der Größe des Ladeintervalls (derzeit %s). Ein niedrigerer Wert kann das anfängliche Laden des Videos beschleunigen. Änderungen erfordern einen Neustart des Players. Geschwindigkeitsstufe - ExoPlayer Standard + ExoPlayer Standard Benachrichtigungen Benachrichtigen über neue abonnierbare Streams Neue Streams diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 769292f58..b54b34d60 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -687,7 +687,7 @@ Το LeakCanary δεν είναι διαθέσιμο Προσαρμόστε τον τόνο με βάση τα μουσικά ημιτόνια Βήμα τέμπο - Εξ\' ορισμού ExoPlayer + Εξ\' ορισμού ExoPlayer Αλλάξτε το μέγεθος του διαστήματος φόρτωσης (επί του παρόντος είναι %s). Μια χαμηλότερη τιμή μπορεί να επιταχύνει την αρχική φόρτωση βίντεο. Οι αλλαγές απαιτούν επανεκκίνηση της εφαρμογής. Ειδοποιήσεις diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2bef8db08..f386801e2 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -688,7 +688,7 @@ Comentario fijado Ya se reproduce en segundo plano LeakCanary no está disponible - ExoPlayer valor por defecto + ExoPlayer valor por defecto Paso de tempo Cambia el tamaño del intervalo de carga (actualmente %s). Un valor más bajo puede acelerar la carga inicial del vídeo. Los cambios requieren un reinicio del reproductor. Ajustar el tono por semitonos musicales diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 055f103c6..d04834f8a 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -685,7 +685,7 @@ \nPalun paigalda nutiseadmesse failihaldur, mis järgib Storage Access Framework reeglistikku.
Esiletõstetud kommentaar LeakCanary pole saadaval - ExoPlayer\'i vaikimisi väärtused + ExoPlayer\'i vaikimisi väärtused Muuda video laadimise välpa (hetkel %s). Väiksemast väärtusest võib abi olla, kui tahad et video esitamine algaks varem. Muudatuste jõustamine eeldab rakenduse uuesti käivitamist. Meediamängija teavitused Teavitused pole kasutusel diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 7faed5800..1c710641e 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -709,6 +709,6 @@ LeakCanary ez dago eskuragarri Egiaztapen maiztasuna Jakinarazi - ExoPlayer lehenetsia + ExoPlayer lehenetsia Beharrezko sare konexioa \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 3186deb72..d0f4d3d84 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -688,7 +688,7 @@ گام سرعت تنظیم زیر و بم با شبه‌تن‌ها تغییر اندازهٔ بازهٔ بار (هم‌اکنون %s). مقداری پایین‌تر، می‌تواند بار کردن نخستین ویدیو را سرعت بخشد. تغییرها نیاز به یک آغاز دوبارهٔ پخش‌کننده دارند. - پیش‌گزیدهٔ اگزوپلیر + پیش‌گزیدهٔ اگزوپلیر آگاهی‌ها بار کردن جزییات جریان… اجرای بررسی برای جریان‌های جدید diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9b103256d..4a4559477 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -690,7 +690,7 @@ Modifie la taille de l\'intervalle de chargement (actuellement %s). Une valeur plus faible peut accélérer le chargement initial des vidéos . Règler la hauteur par demi-tons musicaux Pas du tempo - Valeur par défaut d’ExoPlayer + Valeur par défaut d’ExoPlayer Nouveaux flux Configurer la notification du flux en cours de lecture Recevoir des notifications diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index f8b0b3a06..52225b843 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -682,7 +682,7 @@ Amosar fitas coloridas de Picasso na cima das imaxes que indican a súa fonte: vermello para a rede, azul para o disco e verde para a memoria O \'Sistema de Acceso ao almacenamento\' non está soportado en Android KitKat e anteriores Novos elementos - Predefinido do ExoPlayer + Predefinido do ExoPlayer Amosar \"Travar o reprodutor\" Amosar un snackbar de erro Amosa unha opción de travamento ao usar o reprodutor diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index f6dd702b4..a0e6c32a9 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -711,7 +711,7 @@ LeakCanary אינה זמינה התאמת גובה הצליל לפי חצאי טונים מוזיקליים צעד מקצב - ברירת מחדל של ExoPlayer + ברירת מחדל של ExoPlayer שינוי גודל מרווח הטעינה (כרגע %s). ערך נמוך יותר עשוי להאיץ את טעינת הווידאו הראשונית. שינויים דורשים את הפעלת הנגן מחדש. התראות על תזרימים חדשים להרשמה תדירות בדיקה diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 83a4a147c..056cdfce4 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -674,7 +674,7 @@ Sudah diputar di latar belakang LeakCanary tidak tersedia Langkah tempo - Default ExoPlayer + Default ExoPlayer Atur nada berdasarkan semitone musik Ubah ukuran interval pemuatan (saat ini %s). Sebuah nilai yang rendah mungkin dapat membuat pemuatan video awal lebih cepat. Membutuhkan sebuah pemulaian ulang pada pemain. Memuat detail stream… diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6e1b213e4..9f7b74d8e 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -686,7 +686,7 @@ Già in riproduzione in sottofondo LeakCanary non è disponibile Regola il tono secondo i semitoni musicali - Predefinito ExoPlayer + Predefinito ExoPlayer Cambia la dimensione dell\'intervallo da caricare (attualmente %s). Un valore basso può velocizzare il caricamento iniziale del video. La modifica richiede il riavvio del lettore. Passo tempo Notifiche di nuove stream dalle iscrizioni diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 9469d81e0..a0699f229 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -679,7 +679,7 @@ 登録チャンネルの新しいストリームについて通知する , 通知は無効化されています - ExoPlayer のデフォルト + ExoPlayer のデフォルト 通知を受け取る このチャンネルを購読しました ディスクからダウンロードしたすべてのファイルを削除しますか? diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index fe48ef520..92b24fbc8 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -681,7 +681,7 @@ Installer en filbehandler først, eller skru av «%s» i nedlastingsinnstillingene. Installer en filbehandler som støtter lagringstilgangsrammeverk først. LeakCanary er ikke tilgjengelig - ExoPlayer-forvalg + ExoPlayer-forvalg Juster toneart etter musikalske halvtoner Tempo-steg \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index efbb64f6a..dd405963a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -688,5 +688,5 @@ Verander de laad interval tijd (nu %s). Een lagere waarde kan het initiële laden van de video versnellen. De wijziging vereist een herstart van de speler. Pas de toonhoogte aan met muzikale halve tonen Tempo stap - ExoPlayer standaard + ExoPlayer standaard \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index a13dec423..cfa995212 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -706,7 +706,7 @@ LeakCanary jest niedostępne Rozmiar interwału ładowania odtwarzania Zmień rozmiar interwału ładowania (aktualnie %s). Niższa wartość może przyspieszyć początkowe ładowanie wideo. Zmiany wymagają ponownego uruchomienia odtwarzacza - domyślny ExoPlayera + domyślny ExoPlayera Dostosuj wysokość półtonami Krok tempa Powiadomienie odtwarzacza diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1746d6615..0850034f6 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -688,7 +688,7 @@ Passo do tempo Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. As alterações exigem que o player reinicie. Ajustar o tom por semitons musicais - ExoPlayer padrão + ExoPlayer padrão Notificação do reprodutor Configurar a notificação do fluxo da reprodução atual Notificações diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 8e2cd1366..43e782251 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -688,7 +688,7 @@ Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. Se fizer alterações é necessário reiniciar. Ajustar o tom por semitons musicais Passo do tempo - Predefinido do ExoPlayer + Predefinido do ExoPlayer Notificações A carregar detalhes do fluxo… Verificar se há novos fluxos diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index d6993c012..9e1a80916 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -687,7 +687,7 @@ Comentário fixado LeakCanary não está disponível Ajustar o tom por semitons musicais - Predefinido do ExoPlayer + Predefinido do ExoPlayer Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. Se fizer alterações é necessário reiniciar. Passo do tempo Notificação do reprodutor diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6527c8d36..fc4c03f42 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -723,7 +723,7 @@ LeakCanary недоступна Регулировка высоты тона по музыкальным полутонам Шаг темпа - Стандартное значение ExoPlayer + Стандартное значение ExoPlayer Изменить размер интервала загрузки (сейчас %s). Меньшее значение может ускорить начальную загрузку видео. Изменение значения потребует перезапуска плеера. Загрузка деталей трансляции… Проверить на наличие новых трансляций diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 1a6456865..38a7c3303 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -687,7 +687,7 @@ LeakCanary no est a disponimentu Règula s\'intonatzione in base a sos semitonos musicales Passu de tempus - Valore ExoPlayer predefinidu + Valore ExoPlayer predefinidu Muda sa mannària de s\'intervallu de carrigamentu (in custu momentu %s). Unu valore prus bassu diat pòdere allestrare su carrigamentu de incumintzu de su vìdeu. Sas modìficas tenent bisòngiu de torrare a allùghere su riproduidore. Cunfigura sa notìfica de su flussu in cursu de riprodutzione Notìficas de flussos noos dae sas iscritziones diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index c630eae16..9b7a62145 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -700,7 +700,7 @@ Oznámte chybu Upraviť výšku poltónov Krok tempa - ExoPlayer preddefinovaný + ExoPlayer preddefinovaný Zmeniť interval načítania (aktuálne %s). Menšia hodnota môže zvýšiť rýchlosť prvotného načítania videa. Zmena vyžaduje reštart. Upozornenia Frekvencia kontroly diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 95d5ea82f..63af6d4d6 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -686,7 +686,7 @@ Fäst kommentar LeakCanary är inte tillgänglig Justera tonhöjden med musikaliska halvtoner - ExoPlayer standard + ExoPlayer standard Ändra inläsningsintervallets storlek (för närvarande %s). Ett lägre värde kan påskynda den första videoinläsningen. Ändringar kräver omstart av spelaren. Temposteg Validera frekvens diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 4dd10063b..958dc5eeb 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -686,7 +686,7 @@ Sabitlenmiş yorum LeakCanary yok Yükleme ara boyutunu değiştir (şu anda %s). Düşük bir değer videonun ilk yüklenişini hızlandırabilir. Değişiklikler oynatıcının yeniden başlatılmasını gerektirir. - ExoPlayer öntanımlısı + ExoPlayer öntanımlısı Tempo adımı Perdeyi müzikal yarım tonlarla uyarla Yeni akış bildirimleri diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 06e51f576..f2a3e986e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -704,7 +704,7 @@ LeakCanary недоступний Крок темпу Регулювання висоти звуку за музичними півтонами - Типовий ExoPlayer + Типовий ExoPlayer Змінити розмір інтервалу завантаження (наразі %s). Менше значення може прискорити початкове завантаження відео. Зміни вимагають перезапуску програвача. Ви підписалися на цей канал , diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 71838b160..7ea1a1ed5 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -674,6 +674,6 @@ LeakCanary không khả dụng Điều chỉnh cao độ theo nhạc nền âm nhạc Nhịp độ tiếp theo - ExoPlayer mặc định + ExoPlayer mặc định Bình luận được ghim \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 2a00a818e..0e79f5a58 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -577,7 +577,7 @@ \n您肯定?剷走咗冇得掹個囉喎!
「儲存空間存取框架」呢壇嘢,俾您下載落外置 SD 卡嗰度 Android 10 打上局住要用「儲存空間存取框架」 - ExoPlayer 預設值 + ExoPlayer 預設值 外置儲存空間用唔到 排隊尾輪候播 刪除咗搜尋紀錄 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index d93cf4088..fd129fb6c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -677,7 +677,7 @@ 已經在背景播放 LeakCanary 無法使用 步進時間 - ExoPlayer 預設值 + ExoPlayer 預設值 變更載入間隔大小(目前為 %s)。較低的值可能會提昇初始影片載入速度。變更需要重新啟動播放器。 按音樂半音調整音高 播放器通知 From 173b6c3f00df02e64151ee642323205400d412f2 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 30 Apr 2022 21:46:06 +0200 Subject: [PATCH 31/33] Fix wrong NonNull --- .../schabi/newpipe/player/helper/PlaybackParameterDialog.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java index 2d1461aaf..7220335d1 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlaybackParameterDialog.java @@ -38,8 +38,6 @@ import java.util.function.DoubleConsumer; import java.util.function.DoubleFunction; import java.util.function.DoubleSupplier; -import javax.annotation.Nonnull; - import icepick.Icepick; import icepick.State; @@ -498,7 +496,7 @@ public class PlaybackParameterDialog extends DialogFragment { ) { return new SimpleOnSeekBarChangeListener() { @Override - public void onProgressChanged(@Nonnull final SeekBar seekBar, + public void onProgressChanged(@NonNull final SeekBar seekBar, final int progress, final boolean fromUser) { if (fromUser) { // ensure that the user triggered the change From 7e50eed95e25928cc4a40d9308ff38c216a3de0e Mon Sep 17 00:00:00 2001 From: litetex <40789489+litetex@users.noreply.github.com> Date: Sun, 1 May 2022 20:50:37 +0200 Subject: [PATCH 32/33] Removed unused string resources --- app/src/main/res/values-ar/strings.xml | 3 --- app/src/main/res/values-b+zh+HANS+CN/strings.xml | 3 --- app/src/main/res/values-ca/strings.xml | 1 - app/src/main/res/values-ckb/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 3 --- app/src/main/res/values-de/strings.xml | 3 --- app/src/main/res/values-el/strings.xml | 3 --- app/src/main/res/values-es/strings.xml | 3 --- app/src/main/res/values-et/strings.xml | 3 --- app/src/main/res/values-eu/strings.xml | 3 --- app/src/main/res/values-fa/strings.xml | 3 --- app/src/main/res/values-fr/strings.xml | 3 --- app/src/main/res/values-gl/strings.xml | 2 -- app/src/main/res/values-he/strings.xml | 3 --- app/src/main/res/values-hu/strings.xml | 1 - app/src/main/res/values-ia/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 3 --- app/src/main/res/values-it/strings.xml | 3 --- app/src/main/res/values-ja/strings.xml | 2 -- app/src/main/res/values-nb-rNO/strings.xml | 3 --- app/src/main/res/values-nl/strings.xml | 3 --- app/src/main/res/values-pl/strings.xml | 3 --- app/src/main/res/values-pt-rBR/strings.xml | 3 --- app/src/main/res/values-pt-rPT/strings.xml | 3 --- app/src/main/res/values-pt/strings.xml | 4 ---- app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 5 ----- app/src/main/res/values-sc/strings.xml | 3 --- app/src/main/res/values-sk/strings.xml | 4 ---- app/src/main/res/values-sv/strings.xml | 3 --- app/src/main/res/values-ta/strings.xml | 1 - app/src/main/res/values-te/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 3 --- app/src/main/res/values-uk/strings.xml | 4 ---- app/src/main/res/values-vi/strings.xml | 2 -- app/src/main/res/values-zh-rHK/strings.xml | 2 -- app/src/main/res/values-zh-rTW/strings.xml | 6 ------ 37 files changed, 101 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 3bb304848..e7da4611a 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -730,11 +730,8 @@ إظهار خطأ snackbar لم يتم العثور على مدير ملفات مناسب لهذا الإجراء. \nالرجاء تثبيت مدير ملفات متوافق مع Storage Access Framework. - يتم تشغيله في الخلفية تعليق مثبت LeakCanary غير متوفر - ضبط الصوت من خلال النغمات الموسيقية النصفية - خطوة الإيقاع الافتراضي ExoPlayer تغيير حجم الفاصل الزمني للتحميل (حاليا %s). قد تؤدي القيمة الأقل إلى تسريع تحميل الفيديو الأولي. تتطلب التغييرات إعادة تشغيل المشغل. تكوين إشعار مشغل البث الحالي diff --git a/app/src/main/res/values-b+zh+HANS+CN/strings.xml b/app/src/main/res/values-b+zh+HANS+CN/strings.xml index c5b9e9646..917016675 100644 --- a/app/src/main/res/values-b+zh+HANS+CN/strings.xml +++ b/app/src/main/res/values-b+zh+HANS+CN/strings.xml @@ -670,11 +670,8 @@ 找不到适合此操作的文件管理器。 \n请安装与存储访问框架(SAF)兼容的文件管理器。 NewPipe 遇到了一个错误,点击此处报告此错误 - 已经在后台播放 置顶评论 LeakCanary 不可用 - 以音乐半音调整音高 - 节奏步长 改变加载间隔的大小(当前%s),较低的值可以加快初始的视频加载速度,改变需要重启播放器。 ExoPlayer 默认 配置当前正在播放的串流的通知 diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 421139875..a42e68940 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -650,7 +650,6 @@ Inicia el reproductor principal en pantalla completa Llisqueu els elements per eliminar-los Si la rotació automàtica està bloquejada, no inicieu vídeos al mini reproductor, sinó que aneu directament al mode de pantalla completa. Podeu accedir igualment al mini reproductor sortint de pantalla completa - Ja s\'està reproduint en segon pla Notificació d\'informe d\'error Tancar abruptament el reproductor Comprovar si hi ha actualitzacions diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index f621b88bd..399d2360e 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -672,7 +672,6 @@ پیشاندانی ”کڕاش کردنی لێدەرەکە“ سازاندنی پەیامی کێشەیەک پشکنین بۆ نوێکردنەوە - وا لە پاشبنەمادا لێدەدرێت کێشە لە سکاڵا کردنی پەیام پەیامەکانی سکاڵاکردن لە کێشەکان بابەتە نوێیەکانی فیید diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 84c957f1c..9ba0d1e98 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -684,7 +684,6 @@ Vytvořit oznámení o chybě Kontrola aktualizací… Ukázat „Shodit přehrávač“ - Hraje již v pozadí Nové položky feedů Pro tuto akci nebyl nalezen žádný vhodný správce souborů. \nProsím, nainstalujte správce souborů kompatibilní se Storage Access Framework. @@ -698,7 +697,5 @@ Shodit přehrávač Změnit interval načítání (aktuálně %s). Menší hodnota může zrychlit počáteční načítání videa. Změna vyžaduje restart přehrávače. LeakCanary není dostupné - Upravit výšku tónů po půltónech - Krok tempa Výchozí ExoPlayer \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 1b47fba2f..ffc501c63 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -684,12 +684,9 @@ \nBitte installiere einen Dateimanager oder versuche, \'%s\' in den Downloadeinstellungen zu deaktivieren.
Es wurde kein geeigneter Dateimanager für diese Aktion gefunden. \nBitte installiere einen Storage Access Framework kompatiblen Dateimanager. - Wird bereits im Hintergrund abgespielt Angehefteter Kommentar LeakCanary ist nicht verfügbar - Tonhöhe nach musikalischen Halbtönen anpassen Ändern der Größe des Ladeintervalls (derzeit %s). Ein niedrigerer Wert kann das anfängliche Laden des Videos beschleunigen. Änderungen erfordern einen Neustart des Players. - Geschwindigkeitsstufe ExoPlayer Standard Benachrichtigungen Benachrichtigen über neue abonnierbare Streams diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index b54b34d60..e202d2b34 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -682,11 +682,8 @@ \nΕγκαταστήστε έναν συμβατό με το Πλαίσιο Πρόσβασης Αποθήκευσης.
Το NewPipe παρουσίασε ένα σφάλμα. Πατήστε για αναφορά Εμφάνιση μιας snackbar σφάλματος - Αναπαράγεται ήδη στο παρασκήνιο Καρφιτσωμένο σχόλιο Το LeakCanary δεν είναι διαθέσιμο - Προσαρμόστε τον τόνο με βάση τα μουσικά ημιτόνια - Βήμα τέμπο Εξ\' ορισμού ExoPlayer Αλλάξτε το μέγεθος του διαστήματος φόρτωσης (επί του παρόντος είναι %s). Μια χαμηλότερη τιμή μπορεί να επιταχύνει την αρχική φόρτωση βίντεο. Οι αλλαγές απαιτούν επανεκκίνηση της εφαρμογής. Ειδοποιήσεις diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f386801e2..bb0decc9a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -686,12 +686,9 @@ No se encontró ningún gestor de archivos adecuado para esta acción. \nPor favor instale un gestor de archivos compatible con \"Sistema de Acceso al Almacenamiento\". Comentario fijado - Ya se reproduce en segundo plano LeakCanary no está disponible ExoPlayer valor por defecto - Paso de tempo Cambia el tamaño del intervalo de carga (actualmente %s). Un valor más bajo puede acelerar la carga inicial del vídeo. Los cambios requieren un reinicio del reproductor. - Ajustar el tono por semitonos musicales Notificaciones Nuevos streams Notificación del reproductor diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index d04834f8a..029ff9878 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -674,7 +674,6 @@ NewPipe töös tekkis viga, sellest teavitamiseks klõpsi Jooksuta meediamängija kokku Näita veateate akent - Meedia esitamine taustal toimib juba Teavitus vigadest Teavitused vigadest informeerimiseks Tekkis viga, vaata vastavat teadet @@ -709,6 +708,4 @@ Sa oled nüüd selle kanali tellija , Lülita kõik sisse - Reguleeri helikõrgust muusikaliste pooltoonide kaupa - Tempo samm \ No newline at end of file diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 1c710641e..d4bddf4a8 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -666,7 +666,6 @@ Gehitu bideo hau isatsari Erakutsi \"Itxi erreproduzigailua\" Prozesatzen... Itxoin mesedez - Atzeko planoan erreproduzitzen dagoeneko Erroreen txostenen jakinarazpena Jakinarazpenak erroreen berri emateko NewPipe-k errore bat aurkitu du, sakatu berri emateko @@ -695,8 +694,6 @@ Kanal honetara harpidetu zara , Txandakatu denak - Doitu tonua semitono musikalen arabera - Tempo urratsa Aldatu karga maiztasun tamaina (unean %s). Balio txikiago batek bideoaren hasierako karga azkartu dezake. Erreproduzigailuaren berrabiarazte bat behar du. Harpidetzen jario berriei buruz jakinarazi Ezabatu deskargatutako fitxategi guztiak biltegitik\? diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index d0f4d3d84..dac49883d 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -683,10 +683,7 @@ نیوپایپ به خطایی برخورد. برای گزارش، بزنید خطایی رخ داد. آگاهی را ببینید نظر سنجاق شده - در حال پخش در پس‌زمینه لیک‌کاناری موجود نیست - گام سرعت - تنظیم زیر و بم با شبه‌تن‌ها تغییر اندازهٔ بازهٔ بار (هم‌اکنون %s). مقداری پایین‌تر، می‌تواند بار کردن نخستین ویدیو را سرعت بخشد. تغییرها نیاز به یک آغاز دوبارهٔ پخش‌کننده دارند. پیش‌گزیدهٔ اگزوپلیر آگاهی‌ها diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4a4559477..1716cc06b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -685,11 +685,8 @@ Aucun gestionnaire de fichier approprié n\'a été trouvé pour cette action. \nVeuillez installer un gestionnaire de fichiers ou essayez de désactiver \'%s\' dans les paramètres de téléchargement. Commentaire épinglé - Une lecture est déjà en arrière-plan LeakCanary n\'est pas disponible Modifie la taille de l\'intervalle de chargement (actuellement %s). Une valeur plus faible peut accélérer le chargement initial des vidéos . - Règler la hauteur par demi-tons musicaux - Pas du tempo Valeur par défaut d’ExoPlayer Nouveaux flux Configurer la notification du flux en cours de lecture diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 52225b843..7b49adc6d 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -672,8 +672,6 @@ Enfileirado Procurar actualizacións Procurar manualmente novas versións - Axustar o ton do semitóns musicais - Paso do tempo A procurar actualizacións… A partir do Android 10, só o \'Sistema de Acceso ao Almacenamento\' está soportado Cambia o tamaño do intervalo de carga (actualmente %s). Un valor menor pode acelerar o carregamento do vídeo. Cambios poden precisar un reinicio do reprodutor. diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index a0e6c32a9..4d4350f07 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -706,11 +706,8 @@ התראת דיווח שגיאה לא נמצאו מנהלי קבצים שמתאימים לפעולה הזאת. \nנא להתקין מנהל קבצים שתומך בתשתית גישה לאחסון. - כבר מתנגן ברקע הערה ננעצה LeakCanary אינה זמינה - התאמת גובה הצליל לפי חצאי טונים מוזיקליים - צעד מקצב ברירת מחדל של ExoPlayer שינוי גודל מרווח הטעינה (כרגע %s). ערך נמוך יותר עשוי להאיץ את טעינת הווידאו הראשונית. שינויים דורשים את הפעלת הנגן מחדש. התראות על תזרימים חדשים להרשמה diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index adaf6a8c0..e5457d3e1 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -683,6 +683,5 @@ %1$s letöltés törölve Rögzített megjegyzés - Már megy a lejátszás a háttérben LeakCanary nem elérhető \ No newline at end of file diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index e9d400be2..d5bc90e6f 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -229,7 +229,6 @@ Aperir con Suggestiones de recerca remote Cargar miniaturas - Notification Monstrante resultatos pro: %s Solmente alicun apparatos pote reproducer videos 2K/4K Initiar le reproductor principal in schermo plen diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 056cdfce4..1a88bb747 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -671,11 +671,8 @@ Tidak ada manajer file yang ditemukan untuk tindakan ini. \nMohon instal sebuah manajer file yang kompatibel dengan Storage Access Framework. Komentar dipin - Sudah diputar di latar belakang LeakCanary tidak tersedia - Langkah tempo Default ExoPlayer - Atur nada berdasarkan semitone musik Ubah ukuran interval pemuatan (saat ini %s). Sebuah nilai yang rendah mungkin dapat membuat pemuatan video awal lebih cepat. Membutuhkan sebuah pemulaian ulang pada pemain. Memuat detail stream… Frekuensi pemeriksaan diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 9f7b74d8e..9671f8617 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -683,12 +683,9 @@ Non è stato trovato alcun gestore di file appropriato per questa azione. \nInstallane uno compatibile con Storage Access Framework. Commento in primo piano - Già in riproduzione in sottofondo LeakCanary non è disponibile - Regola il tono secondo i semitoni musicali Predefinito ExoPlayer Cambia la dimensione dell\'intervallo da caricare (attualmente %s). Un valore basso può velocizzare il caricamento iniziale del video. La modifica richiede il riavvio del lettore. - Passo tempo Notifiche di nuove stream dalle iscrizioni Frequenza controllo Richiesta connessione alla rete diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a0699f229..9a15b25d1 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -663,7 +663,6 @@ エラーが発生しました。通知をご覧ください NewPipe はエラーに遭遇しました。タップして報告 スナックバーにエラーを表示 - 既にバックグラウンドで再生されています 固定されたコメント この動作に適切なファイルマネージャが見つかりませんでした。 \nStorage Access Frameworkと互換性のあるファイルマネージャをインストールしてください。 @@ -673,7 +672,6 @@ エラー通知を作成 エラーを報告する通知 LeakCanaryが利用不可能です - 緩急音階 プレイヤー通知 ストリームの詳細を読み込んでいます… 登録チャンネルの新しいストリームについて通知する diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 92b24fbc8..b2829ba27 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -672,7 +672,6 @@ Viser et krasjalternativ ved bruk av avspilleren Det oppstod en feil. Sjekk merknaden. Festet kommentar - Spilles allerede i bakgrunnen Feilrapport-merknad Merknader for innrapportering av feil NewPipe-feil. Trykk for å rapportere. @@ -682,6 +681,4 @@ Installer en filbehandler som støtter lagringstilgangsrammeverk først. LeakCanary er ikke tilgjengelig ExoPlayer-forvalg - Juster toneart etter musikalske halvtoner - Tempo-steg \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index dd405963a..3a943d2ca 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -677,7 +677,6 @@ NewPipe meldt fout, tik voor bericht Foutmelding Maak een foutmelding - Speelt al op de achtergrond Korte foutmelding weergeven Er is geen geschikte bestandsbeheerder gevonden voor deze actie. \nInstalleer een bestandsbeheerder of probeer \'%s\' uit te schakelen in de download instellingen. @@ -686,7 +685,5 @@ Vastgemaakt commentaar LeakCanary is niet beschikbaar Verander de laad interval tijd (nu %s). Een lagere waarde kan het initiële laden van de video versnellen. De wijziging vereist een herstart van de speler. - Pas de toonhoogte aan met muzikale halve tonen - Tempo stap ExoPlayer standaard \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index cfa995212..6e2c95119 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -701,14 +701,11 @@ \nZainstaluj menedżer plików lub spróbuj wyłączyć „%s” w ustawieniach pobierania.
Nie znaleziono odpowiedniego menedżera plików dla tej akcji. \nZainstaluj menedżer plików zgodny z Storage Access Framework. - Już jest odtwarzane w tle Przypięty komentarz LeakCanary jest niedostępne Rozmiar interwału ładowania odtwarzania Zmień rozmiar interwału ładowania (aktualnie %s). Niższa wartość może przyspieszyć początkowe ładowanie wideo. Zmiany wymagają ponownego uruchomienia odtwarzacza domyślny ExoPlayera - Dostosuj wysokość półtonami - Krok tempa Powiadomienie odtwarzacza Skonfiguruj powiadomienie aktualnie odtwarzanego strumienia Uruchom sprawdzenie nowych strumieni diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 0850034f6..d19196c06 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -682,12 +682,9 @@ Mostrar um snackbar de erro Nenhum gerenciador de arquivos apropriado foi encontrado para esta ação. \nInstale um gerenciador de arquivos ou tente desativar \'%s\' nas configurações de download. - Já está tocando em segundo plano Comentário fixado O LeakCanary não está disponível - Passo do tempo Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. As alterações exigem que o player reinicie. - Ajustar o tom por semitons musicais ExoPlayer padrão Notificação do reprodutor Configurar a notificação do fluxo da reprodução atual diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 43e782251..aa3862b6b 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -683,11 +683,8 @@ Nenhum gestor de ficheiros apropriado foi encontrado para esta ação. \nPor favor, instale um gestor de ficheiros compatível com o Storage Access Framework. Comentário fixado - Já está a reproduzir em segundo plano LeakCanary não está disponível Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. Se fizer alterações é necessário reiniciar. - Ajustar o tom por semitons musicais - Passo do tempo Predefinido do ExoPlayer Notificações A carregar detalhes do fluxo… diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 9e1a80916..9563c9a6f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -554,7 +554,6 @@ URL não reconhecido. Abrir com outra aplicação\? Enfileiramento automático Embaralhar - Notificação Apenas em Wi-Fi Nada Mudar de um reprodutor para outro pode substituir a sua fila @@ -683,13 +682,10 @@ \nPor favor, instale um gestor de ficheiros ou tente desativar \'%s\' nas configurações de descarregar.
Nenhum gestor de ficheiros apropriado foi encontrado para esta ação. \nPor favor, instale um gestor de ficheiros compatível com o Storage Access Framework. - Já está a reproduzir em segundo plano Comentário fixado LeakCanary não está disponível - Ajustar o tom por semitons musicais Predefinido do ExoPlayer Altere o tamanho do intervalo de carregamento (atualmente %s). Um valor menor pode acelerar o carregamento inicial do vídeo. Se fizer alterações é necessário reiniciar. - Passo do tempo Notificação do reprodutor Configurar a notificação da reprodução do fluxo atual Notificações diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index e83fc5462..67108b500 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -679,7 +679,6 @@ Procesarea.. Poate dura un moment Verifică dacă există actualizări Verifică manual dacă există versiuni noi - Se redă deja pe fundal Comentariu lipit Notificare cu raport de eroare Afișează opțiunea de a întrerupe atunci când utilizați playerul diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index fc4c03f42..2a16a4573 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -691,8 +691,6 @@ Проверить обновления Проверка обновлений… Новое на канале - Отчёт об ошибках плеера - Подробные отчёты об ошибках плеера вместо коротких всплывающих сообщений (полезно при диагностике проблем) Уведомления Новые видео Уведомления о новых видео в подписках @@ -718,11 +716,8 @@ \nПожалуйста, установите файловый менеджер, или попробуйте отключить \'%s\' в настройках загрузок.
Для этого действия не найдено подходящего файлового менеджера. \nПожалуйста, установите файловый менеджер, совместимый со Storage Access Framework (SAF). - Уже проигрывается в фоне Закреплённый комментарий LeakCanary недоступна - Регулировка высоты тона по музыкальным полутонам - Шаг темпа Стандартное значение ExoPlayer Изменить размер интервала загрузки (сейчас %s). Меньшее значение может ускорить начальную загрузку видео. Изменение значения потребует перезапуска плеера. Загрузка деталей трансляции… diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 38a7c3303..7c6120832 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -683,10 +683,7 @@ \nPro praghere installa unu gestore de documentos cumpatìbile cun su \"Sistema de Atzessu a s\'Archiviatzione\". Faghe serrare su riproduidore Cummentu apicadu - Giai in riprodutzione in s\'isfundu LeakCanary no est a disponimentu - Règula s\'intonatzione in base a sos semitonos musicales - Passu de tempus Valore ExoPlayer predefinidu Muda sa mannària de s\'intervallu de carrigamentu (in custu momentu %s). Unu valore prus bassu diat pòdere allestrare su carrigamentu de incumintzu de su vìdeu. Sas modìficas tenent bisòngiu de torrare a allùghere su riproduidore. Cunfigura sa notìfica de su flussu in cursu de riprodutzione diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 9b7a62145..c47562bb0 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -647,8 +647,6 @@ Pri každom sťahovaní sa zobrazí výzva kam uložiť súbor Nie je nastavený adresár na sťahovanie, nastavte ho teraz Označiť ako videné - Načítavanie podrobností o kanáli… - Chyba pri zobrazení podrobností kanála Vypnuté Zapnuté Režim tabletu @@ -698,8 +696,6 @@ Zobrazí možnosť zlyhania pri používaní prehrávača Zobraziť krátke oznámenie chyby Oznámte chybu - Upraviť výšku poltónov - Krok tempa ExoPlayer preddefinovaný Zmeniť interval načítania (aktuálne %s). Menšia hodnota môže zvýšiť rýchlosť prvotného načítania videa. Zmena vyžaduje reštart. Upozornenia diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 63af6d4d6..b7e66a85b 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -682,13 +682,10 @@ \nInstallera en filhanterare eller testa att inaktivera \'%s\' i nedladdningsinställningarna. Ingen lämplig filhanterare hittades för denna åtgärd. \nInstallera en filhanterare som är kompatibel med Storage Access Framework. - Spelas redan i bakgrunden Fäst kommentar LeakCanary är inte tillgänglig - Justera tonhöjden med musikaliska halvtoner ExoPlayer standard Ändra inläsningsintervallets storlek (för närvarande %s). Ett lägre värde kan påskynda den första videoinläsningen. Ändringar kräver omstart av spelaren. - Temposteg Validera frekvens Kräver nätverksanslutning Alla nätverk diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index d7c920f2b..827da452a 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -253,7 +253,6 @@ இயக்குதலைத் மறுதொடர் நி நிகழ்வு ஏற்கனவே உள்ளது - அறிவிப்பு யூடியூபின் \"கட்டுப்பாடு பயன்முறை\"ஐ இயக்கு பாடல்கள் பிழைகளைப் புகாரளிக்க அறிவிப்புகள் diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 60542e0b6..3958e02b0 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -371,7 +371,6 @@ reCAPTCHA సవాలు reCAPTCHA సవాలు అభ్యర్థించబడింది ప్లేజాబితాను ఎంచుకోండి - ఇప్పటికే వెనుకగా ప్లే అవుతోంది డాటాబేసుని ఎగుమతిచేయుము యాప్ పునఃప్రారంభించబడిన తర్వాత భాష మారుతుంది ఛానెల్ వివరాలను చూపు diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 958dc5eeb..a9bbe30e5 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -682,13 +682,10 @@ Hata raporları için bildirimler Oynatıcı kullanırken çöktürme seçeneği gösterir Oynatıcıyı çöktür - Zaten arka planda oynuyor Sabitlenmiş yorum LeakCanary yok Yükleme ara boyutunu değiştir (şu anda %s). Düşük bir değer videonun ilk yüklenişini hızlandırabilir. Değişiklikler oynatıcının yeniden başlatılmasını gerektirir. ExoPlayer öntanımlısı - Tempo adımı - Perdeyi müzikal yarım tonlarla uyarla Yeni akış bildirimleri Bildirimler diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index f2a3e986e..0768f241b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -58,7 +58,6 @@ Завантаження Звіт про помилку Усе - Так Вимкнено Збій застосунку/інтерфейсу Ваш коментар (англійською): @@ -699,11 +698,8 @@ \nУстановіть файловий менеджер, сумісний зі Storage Access Framework. Показати панель помилок Створити сповіщення про помилку - Уже відтворюється у фоновому режимі Закріплений коментар LeakCanary недоступний - Крок темпу - Регулювання висоти звуку за музичними півтонами Типовий ExoPlayer Змінити розмір інтервалу завантаження (наразі %s). Менше значення може прискорити початкове завантаження відео. Зміни вимагають перезапуску програвача. Ви підписалися на цей канал diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 7ea1a1ed5..08bf7cae0 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -672,8 +672,6 @@ \nVui lòng cài đặt ứng dụng quản lý tệp hoặc tắt \'%s\' trong cài đặt tải xuống. Thay đổi kích thước khoảng thời gian tải (tầm khoảng %s). Để ở giá trị thấp hơn có thể sẽ tăng tốc độ tải video hơn ban đầu. Khởi động lại trình phát để áp dụng thay đổi. LeakCanary không khả dụng - Điều chỉnh cao độ theo nhạc nền âm nhạc - Nhịp độ tiếp theo ExoPlayer mặc định Bình luận được ghim \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 0e79f5a58..d527edc9b 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -603,10 +603,8 @@ %s 個新加串流 - 按樂音半度調整音高 新加串流通知 係咪要喺磁碟機上面消除晒全部下載咗嘅檔案? 通知已停用 單曲 - 節奏步伐 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index fd129fb6c..8b5a24661 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -539,7 +539,6 @@ 作用中播放器的佇列可能會被取代 從一個播放器切換到另一個可能會取代您的佇列 清除佇列前要求確認 - 通知 正在緩衝 隨機播放 @@ -638,8 +637,6 @@ 拖動列縮圖預覽 被創作者加心號 標記為已看過 - 正在載入頻道詳細資訊…… - 顯示頻道詳細資訊時發生錯誤 在圖片頂部顯示畢卡索彩色絲帶,指示其來源:紅色代表網路、藍色代表磁碟、綠色代表記憶體 顯示圖片指示器 遠端搜尋建議 @@ -674,12 +671,9 @@ NewPipe 遇到錯誤,點擊以回報 發生錯誤,請檢視通知 釘選的留言 - 已經在背景播放 LeakCanary 無法使用 - 步進時間 ExoPlayer 預設值 變更載入間隔大小(目前為 %s)。較低的值可能會提昇初始影片載入速度。變更需要重新啟動播放器。 - 按音樂半音調整音高 播放器通知 通知 正在載入串流詳細資訊…… From 0fef4e6e2eeb63341059d3e8941dd0ee538d676b Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 27 Apr 2022 21:02:14 +0200 Subject: [PATCH 33/33] Translated using Weblate (Bengali (India)) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 45.6% (289 of 633 strings) Translated using Weblate (Danish) Currently translated at 47.2% (299 of 633 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Basque) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Tagalog) Currently translated at 9.4% (60 of 633 strings) Translated using Weblate (Arabic (Libya)) Currently translated at 5.9% (4 of 67 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 14.9% (10 of 67 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (67 of 67 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 61.1% (41 of 67 strings) Translated using Weblate (Slovak) Currently translated at 7.4% (5 of 67 strings) Translated using Weblate (Persian) Currently translated at 62.6% (42 of 67 strings) Translated using Weblate (Swedish) Currently translated at 50.7% (34 of 67 strings) Translated using Weblate (Spanish) Currently translated at 59.7% (40 of 67 strings) Translated using Weblate (Indonesian) Currently translated at 79.1% (53 of 67 strings) Translated using Weblate (Polish) Currently translated at 55.2% (37 of 67 strings) Translated using Weblate (Hebrew) Currently translated at 55.2% (37 of 67 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (67 of 67 strings) Translated using Weblate (Russian) Currently translated at 17.9% (12 of 67 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 10.4% (7 of 67 strings) Translated using Weblate (Turkish) Currently translated at 28.3% (19 of 67 strings) Translated using Weblate (German) Currently translated at 65.6% (44 of 67 strings) Translated using Weblate (Sardinian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Filipino) Currently translated at 18.7% (119 of 633 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Hebrew) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 97.6% (618 of 633 strings) Translated using Weblate (Persian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Polish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Slovak) Currently translated at 98.5% (624 of 633 strings) Translated using Weblate (Greek) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 90.0% (570 of 633 strings) Translated using Weblate (Basque) Currently translated at 95.7% (606 of 633 strings) Translated using Weblate (Italian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Korean) Currently translated at 71.8% (455 of 633 strings) Translated using Weblate (Japanese) Currently translated at 99.5% (630 of 633 strings) Translated using Weblate (Russian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (French) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (French) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Spanish) Currently translated at 97.6% (618 of 633 strings) Translated using Weblate (German) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (German) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (German) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.8% (632 of 633 strings) Translated using Weblate (German) Currently translated at 98.1% (621 of 633 strings) Translated using Weblate (German) Currently translated at 98.1% (621 of 633 strings) Translated using Weblate (Swedish) Currently translated at 99.6% (631 of 633 strings) Translated using Weblate (Swedish) Currently translated at 99.6% (631 of 633 strings) Translated using Weblate (French) Currently translated at 99.5% (630 of 633 strings) Translated using Weblate (French) Currently translated at 99.5% (630 of 633 strings) Translated using Weblate (French) Currently translated at 99.3% (629 of 633 strings) Translated using Weblate (French) Currently translated at 99.3% (629 of 633 strings) Co-authored-by: Agnieszka C Co-authored-by: AioiLight Co-authored-by: Ajeje Brazorf Co-authored-by: Alberto De Negri Co-authored-by: Alex25820 Co-authored-by: Allan Nordhøy Co-authored-by: Andrés Paredes Co-authored-by: Ayoub Rejal Co-authored-by: BurningKarl Co-authored-by: Danial Behzadi Co-authored-by: DanieLoche Co-authored-by: DanieLoche Co-authored-by: David Kovács Co-authored-by: Deleted User Co-authored-by: Digiwizkid Co-authored-by: Gontzal Manuel Pujana Onaindia Co-authored-by: Hosted Weblate Co-authored-by: Ihor Hordiichuk Co-authored-by: JS Ahn Co-authored-by: Jeff Huang Co-authored-by: Jonatan Nyberg Co-authored-by: Jonathan Soares Co-authored-by: Karl Tammik Co-authored-by: Lars Co-authored-by: Linerly Co-authored-by: Napstaguy04 Co-authored-by: Oğuz Ersen Co-authored-by: Ray Co-authored-by: Retrial Co-authored-by: Rex_sa Co-authored-by: Ricardo Co-authored-by: Simon N Co-authored-by: TiA4f8R Co-authored-by: VfBFan Co-authored-by: Yaron Shahrabani Co-authored-by: chr56 Co-authored-by: jazzyjabroni Co-authored-by: nautilusx Co-authored-by: nzgha Co-authored-by: qqqq1 Co-authored-by: sal0max Co-authored-by: ssantos Co-authored-by: Егор Ермаков Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ar_LY/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/es/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/fa/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/he/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sv/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/tr/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant_HK/ Translation: NewPipe/Metadata Translated using Weblate (Spanish) Currently translated at 97.6% (618 of 633 strings) Translated using Weblate (Italian) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 90.0% (570 of 633 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (633 of 633 strings) Translated using Weblate (Croatian) Currently translated at 98.4% (623 of 633 strings) Translated using Weblate (Filipino) Currently translated at 28.7% (182 of 633 strings) --- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fil/strings.xml | 87 +++++++++++++++++++++- app/src/main/res/values-hr/strings.xml | 31 +++++++- app/src/main/res/values-it/strings.xml | 24 +++--- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-zh-rHK/strings.xml | 6 +- 6 files changed, 131 insertions(+), 21 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index bb0decc9a..9ab3b8ce9 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -292,7 +292,7 @@ Quitar todos los datos guardados de páginas web Se vació la caché de metadatos Controles de velocidad de reproducción - Tiempo + Tempo Tono Desvincular (puede causar distorsión) No hay streams disponibles para descargar diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 1795fc98c..db1fdfcd8 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -116,6 +116,91 @@ Gamitin ang mabilis ngunit di-saktong seek Haba ng fast forward/-rewind seek Ituloy ang pagpapalabas - Mga Patok Ngayon + Patok Ngayon Subaybayan ang mga napanood nang video + Kumakailan + Kategorya + Mga Tag + Praybasi + Nakapatay ang Mga Notipikasyon + Publiko + Mga Puna + Nagda-dawnload ang NewPipe + Naka-bukas + Wika ng App + Tungkol dito + Ang video na ito ay may paghihigpit sa edad. +\nDahil sa mga bagong polisiya ng Youtube, hindi maaring ma-access ng NewPipe ang mga video streams nito, kaya hindi ito maipapalabas. + Notipikasyon sa NewPipe + + %s nakikinig + Mga %s nakikinig + + 100+ na mga video + ∞ na mga video + Walang Komento + Ipalabas Lahat + Mga Notipikasyon + Pinagbabawal ang pagkomento + Mga pinahihintulutang karakter sa pangalan ng file + Mga Lisensya + Kasaysayan + Laman ng pangunahing pahina + Live + Palagi + Gusto mo bang burahin ito sa kasaysayan ng paghanap\? + Laman + + %d oras + mga %d oras + + Karaniwan ng Sistema + Nakapribado ang content na ito, kaya hindi ito maipalabas o mai-download ng NewPipe. + Sinisimulan na ang Pagdownload + Pinusuan ng creator + Ni %s + Tulong + Naka-pin na komento + Buksan ang website + Lisensya + Wika + Pribado + URL ng Thumbnail + Hindi nakalista + Nakapatay + Bago at patok + Panimulang wika ng content + Itsura ng App + + %d segundo + Mga %d segundo + + Nilikha ni %s + Mga Kabanata + Walang app sa device mo ang makakabukas nito + Tampok + Huling Pinanood + Kasaysayan + Walang nakikinig + Walang nahanap + Pumalit sa Likuran + Linisin ang kasaysayan ng panonood + + %s nanonood + Mga %s nanonood + + Walang mga video + Madalas na Pinanood + + %s video + Mga %s na video + + + %d minuto + Mga %d minuto + + + %d araw + mga %d araw + \ No newline at end of file diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 01cbab7f6..0ca0c75dc 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -340,7 +340,7 @@ NewPipe razvijaju volonteri koji provode vrijeme donoseći vam najbolje iskustvo. Vratite im kako biste programerima učinili da NewPipe bude još bolji dok uživate u šalici kave. Koje su kartice prikazane na glavnoj stranici Konferencije - Preferirana \'otvori\' akcija + Željena radnja otvaranja streama Zadana radnja pri otvaranju sadržaja — %s Titlovi Promijeni veličinu podnaslova reproduktora i pozadinske stilove reproduktora. Za stupanje na snagu, program se mora ponovo pokrenuti @@ -602,8 +602,8 @@ Ovaj je video dobno ograničen. \nZbog novih YouTube pravila za videa s dobnim ograničenjem, NewPipe ne može pristupiti nijednoj vlastitoj video emisiji i stoga je ne može reproducirati. Preuzimanje je započeto - Dolje možeš odabrati omiljenu noćnu temu - Odaberi omiljenu noćnu temu – %s + Dolje možete odabrati željenu noćnu temu + Odaberi željenu noćnu temu – %s Automatski (tema uređaja) Radio Istaknuto @@ -687,4 +687,29 @@ NewPipe je naišao na grešku, dodirni za prijavu Došlo je do greške, pogledaj obavijest Prekini rad playera + Obavijest reproduktora + Prilagođavanje obavijesti reproduktora + Obavijesti + Novi videozapisi + Obavijesti novih streamova pretplaćenih kanala + Želite li izbrisati sve preuzete datoteke\? + Obavijesti su onemogućene + Pretplatili ste se ovome kanalu + , + Uključiti/isključiti sve + Bilo kakva mreža + Obavijesti novih streamova pretplaćenih kanala + Pokaži zalogajnicu greške + Učitavanje pojedinosti streama… + Pokrenite provjeru novih streamova + Učestalost provjere + LeakCanary nije dostupno + Podešavanje visine tona po glazbenim polutonovima + Obavijesti o novim streamovima + Potrebna mrežna veza + Zadano za ExoPlayer + Primite obavijesti + Za ovu radnju nije pronađen odgovarajući upravitelj datoteka. +\nMolimo vas da instalirate upravitelj za datoteke ili da pokušate onemogućiti \'%s\' u postavkama preuzimanja. + Prikvačeni komentar \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 9671f8617..1726c32c3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -94,7 +94,7 @@ In sottofondo Popup Risoluzione predefinita lettore popup - Mostra altre risoluzioni + Mostra risoluzioni più elevate Solo alcuni dispositivi possono riprodurre video 2K/4K Formato video predefinito Ricorda proprietà lettore popup @@ -664,7 +664,7 @@ Avvia il lettore principale a schermo intero Aggiunto alla coda come prossimo Accoda come prossimo - Elaborazione... Potrebbe volerci un attimo + Elaborazione… Potrebbe volerci un attimo Controlla aggiornamenti Verifica manualmente la presenza di nuove versioni Controllo aggiornamenti… @@ -686,26 +686,26 @@ LeakCanary non è disponibile Predefinito ExoPlayer Cambia la dimensione dell\'intervallo da caricare (attualmente %s). Un valore basso può velocizzare il caricamento iniziale del video. La modifica richiede il riavvio del lettore. - Notifiche di nuove stream dalle iscrizioni + Notifiche di nuovi contenuti dalle iscrizioni Frequenza controllo - Richiesta connessione alla rete + Connessione di rete richiesta Ricevi le notifiche Sei ora iscritto a questo canale , Attiva/disattiva tutti - Notifiche per nuove stream - Notifica lettore - Configura la notifica della stream attualmente in riproduzione + Notifiche per i nuovi contenuti + Notifica del lettore multimediale + Configura la notifica dell\'elemento attualmente in riproduzione Notifiche - Nuove stream + Nuovi contenuti - %s nuova stream - %s nuove stream + %s nuovo contenuto + %s nuovi contenuti Caricando i dettagli della stream… Cancellare tutti i file scaricati dal dispositivo\? - Avvia controllo per nuove stream + Controlla la presenza di nuovi contenuti Qualsiasi rete Le notifiche sono disabilitate - Notifica se ci sono nuove stream dalle iscrizioni + Notifica la presenza di nuovi contenuti dalle iscrizioni \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a9bbe30e5..0f405f132 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -541,7 +541,7 @@ Lütfen hatanızı tartışan sorunun var olup olmadığını kontrol edin. Yinelenen istekler oluştururken, bizden asıl hatayı düzeltmek için harcayabileceğimiz zamanı alırsınız. Henüz oynatma listesi yer imleri yok Asla - Yalnızca Wi-Fi\'de + Yalnızca Wi-Fi Oynatmayı kendiliğinden başlat — %s Oynatma kuyruğu URL tanınamadı. Başka bir uygulamayla açılsın mı\? diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index d527edc9b..277fa6937 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -145,7 +145,7 @@ 睇過嘅紀錄 恢復播放 返返最後播放到去嗰個位 - 喺播放清單排第幾 + 清單度睇到播到去邊 縮圖放到去 1:1 長寬比 顯示喺通知嘅影片縮圖由 16:9 放到去 1:1 長寬比 (話唔定會鬆郁矇) 通知色彩化 @@ -164,7 +164,7 @@ 顯示留言 關閉去隱藏留言 搜尋紀錄 - 喺播放清單顯示位置編號 + 喺清單入面顯示最後播放到去邊個位 抹除資料 顯示描述 抹除咗影像快取 @@ -526,7 +526,7 @@ 開啟網站 主機 - 喺影片「詳情:」度撳一下「幕後播」或者「浮面播」個掣嘅時候顯示提示 + 喺影片詳情撳一下「幕後播」或「浮面播」個掣嘅時候顯示提示 紀錄 紀錄 攝下個等陣播