Merge pull request #7989 from litetex/refactor-playback-parameter-dialog
Rewrote ``PlaybackParameterDialog``
This commit is contained in:
commit
7646c683b5
|
@ -25,7 +25,6 @@ import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.graphics.Typeface
|
import android.graphics.Typeface
|
||||||
import android.graphics.drawable.Drawable
|
|
||||||
import android.graphics.drawable.LayerDrawable
|
import android.graphics.drawable.LayerDrawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
|
@ -37,7 +36,6 @@ import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import androidx.annotation.AttrRes
|
|
||||||
import androidx.annotation.Nullable
|
import androidx.annotation.Nullable
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
|
@ -80,6 +78,7 @@ import org.schabi.newpipe.util.DeviceUtils
|
||||||
import org.schabi.newpipe.util.Localization
|
import org.schabi.newpipe.util.Localization
|
||||||
import org.schabi.newpipe.util.NavigationHelper
|
import org.schabi.newpipe.util.NavigationHelper
|
||||||
import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountStreams
|
import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountStreams
|
||||||
|
import org.schabi.newpipe.util.ThemeHelper.resolveDrawable
|
||||||
import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout
|
import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout
|
||||||
import java.time.OffsetDateTime
|
import java.time.OffsetDateTime
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
@ -579,19 +578,6 @@ class FeedFragment : BaseStateFragment<FeedState>() {
|
||||||
lastNewItemsCount = highlightCount
|
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() {
|
private fun showNewItemsLoaded() {
|
||||||
tryGetNewItemsLoadedButton()?.clearAnimation()
|
tryGetNewItemsLoadedButton()?.clearAnimation()
|
||||||
tryGetNewItemsLoadedButton()
|
tryGetNewItemsLoadedButton()
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,38 @@
|
||||||
|
package org.schabi.newpipe.player.helper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts between percent and 12-tone equal temperament semitones.
|
||||||
|
* <br/>
|
||||||
|
* @see
|
||||||
|
* <a href="https://en.wikipedia.org/wiki/Equal_temperament#Twelve-tone_equal_temperament">
|
||||||
|
* Wikipedia: Equal temperament#Twelve-tone equal temperament
|
||||||
|
* </a>
|
||||||
|
*/
|
||||||
|
public final class PlayerSemitoneHelper {
|
||||||
|
public static final int SEMITONE_COUNT = 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) SEMITONE_COUNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int percentToSemitones(final double percent) {
|
||||||
|
return ensureSemitonesInRange(
|
||||||
|
(int) Math.round(SEMITONE_COUNT * Math.log(percent) / Math.log(2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int ensureSemitonesInRange(final int semitones) {
|
||||||
|
return Math.max(-SEMITONE_COUNT, Math.min(SEMITONE_COUNT, semitones));
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,9 +23,11 @@ import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
|
|
||||||
import androidx.annotation.AttrRes;
|
import androidx.annotation.AttrRes;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.StyleRes;
|
import androidx.annotation.StyleRes;
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
@ -227,6 +229,22 @@ public final class ThemeHelper {
|
||||||
return value.data;
|
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) {
|
private static String getSelectedThemeKey(final Context context) {
|
||||||
final String themeKey = context.getString(R.string.theme_key);
|
final String themeKey = context.getString(R.string.theme_key);
|
||||||
final String defaultTheme = context.getResources().getString(R.string.default_theme_value);
|
final String defaultTheme = context.getResources().getString(R.string.default_theme_value);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -29,9 +30,9 @@
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/tempoControl"
|
android:id="@+id/tempoControl"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@id/tempoControlText"
|
android:layout_below="@id/tempoControlText"
|
||||||
android:layout_marginTop="3dp"
|
android:layout_marginTop="1dp"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
@ -39,7 +40,6 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
|
@ -57,9 +57,7 @@
|
||||||
android:layout_marginLeft="4dp"
|
android:layout_marginLeft="4dp"
|
||||||
android:layout_marginRight="4dp"
|
android:layout_marginRight="4dp"
|
||||||
android:layout_toStartOf="@id/tempoStepUp"
|
android:layout_toStartOf="@id/tempoStepUp"
|
||||||
android:layout_toLeftOf="@id/tempoStepUp"
|
|
||||||
android:layout_toEndOf="@id/tempoStepDown"
|
android:layout_toEndOf="@id/tempoStepDown"
|
||||||
android:layout_toRightOf="@id/tempoStepDown"
|
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
@ -67,9 +65,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="4dp"
|
||||||
android:layout_marginLeft="4dp"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="-.--x"
|
android:text="-.--x"
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
|
@ -93,9 +89,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:layout_marginRight="4dp"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="---%"
|
android:text="---%"
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
|
@ -108,7 +102,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@id/tempoCurrentText"
|
android:layout_below="@id/tempoCurrentText"
|
||||||
android:paddingBottom="4dp"
|
android:paddingBottom="2dp"
|
||||||
tools:progress="50" />
|
tools:progress="50" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
@ -117,10 +111,8 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:layout_marginRight="4dp"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
|
@ -138,9 +130,9 @@
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:layout_below="@id/tempoControl"
|
android:layout_below="@id/tempoControl"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginTop="6dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_marginEnd="6dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:layout_marginBottom="6dp"
|
android:layout_marginBottom="5dp"
|
||||||
android:background="?attr/separator_color" />
|
android:background="?attr/separator_color" />
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
@ -154,232 +146,268 @@
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<RelativeLayout
|
<ImageView
|
||||||
android:id="@+id/pitchControl"
|
android:id="@+id/pitchToogleControlModes"
|
||||||
|
android:layout_width="22dp"
|
||||||
|
android:layout_height="22dp"
|
||||||
|
android:layout_below="@id/separatorPitch"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
app:srcCompat="@drawable/ic_expand_more"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/pitchControlModeTabs"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="22dp"
|
||||||
android:layout_below="@id/pitchControlText"
|
android:layout_below="@id/pitchControlText"
|
||||||
android:layout_marginTop="3dp"
|
android:layout_marginStart="22dp"
|
||||||
android:orientation="horizontal">
|
android:layout_marginEnd="22dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible">
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/pitchStepDown"
|
android:id="@+id/pitchControlModePercent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_weight="1"
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="--%"
|
android:text="@string/percent"
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent" />
|
||||||
android:textStyle="bold"
|
|
||||||
tools:ignore="HardcodedText"
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
tools:text="-5%" />
|
android:id="@+id/pitchControlModeSemitone"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/semitone"
|
||||||
|
android:textColor="?attr/colorAccent" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/pitchControlContainer"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/pitchControlModeTabs"
|
||||||
|
android:layout_marginTop="1dp">
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/pitchDisplay"
|
android:id="@+id/pitchPercentControl"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginLeft="4dp"
|
|
||||||
android:layout_marginRight="4dp"
|
|
||||||
android:layout_toStartOf="@+id/pitchStepUp"
|
|
||||||
android:layout_toLeftOf="@+id/pitchStepUp"
|
|
||||||
android:layout_toEndOf="@+id/pitchStepDown"
|
|
||||||
android:layout_toRightOf="@+id/pitchStepDown"
|
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/pitchMinimumText"
|
android:id="@+id/pitchPercentStepDown"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginStart="4dp"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:layout_marginLeft="4dp"
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="---%"
|
android:text="--%"
|
||||||
android:textColor="?attr/colorAccent"
|
|
||||||
tools:ignore="HardcodedText"
|
|
||||||
tools:text="25%" />
|
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
|
||||||
android:id="@+id/pitchCurrentText"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="---%"
|
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
tools:ignore="HardcodedText"
|
tools:ignore="HardcodedText"
|
||||||
tools:text="100%" />
|
tools:text="-5%" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/pitchPercentDisplay"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginLeft="4dp"
|
||||||
|
android:layout_marginRight="4dp"
|
||||||
|
android:layout_toStartOf="@+id/pitchPercentStepUp"
|
||||||
|
android:layout_toEndOf="@+id/pitchPercentStepDown"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
android:id="@+id/pitchPercentMinimumText"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="---%"
|
||||||
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:ignore="HardcodedText"
|
||||||
|
tools:text="25%" />
|
||||||
|
|
||||||
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
android:id="@+id/pitchPercentCurrentText"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="---%"
|
||||||
|
android:textColor="?attr/colorAccent"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:ignore="HardcodedText"
|
||||||
|
tools:text="100%" />
|
||||||
|
|
||||||
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
android:id="@+id/pitchPercentMaximumText"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_marginEnd="4dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="---%"
|
||||||
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:ignore="HardcodedText"
|
||||||
|
tools:text="300%" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatSeekBar
|
||||||
|
android:id="@+id/pitchPercentSeekbar"
|
||||||
|
style="@style/Widget.AppCompat.SeekBar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/pitchPercentCurrentText"
|
||||||
|
android:paddingBottom="2dp"
|
||||||
|
tools:progress="50" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/pitchMaximumText"
|
android:id="@+id/pitchPercentStepUp"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginEnd="4dp"
|
||||||
android:layout_marginRight="4dp"
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="---%"
|
android:text="+-%"
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
|
android:textStyle="bold"
|
||||||
tools:ignore="HardcodedText"
|
tools:ignore="HardcodedText"
|
||||||
tools:text="300%" />
|
tools:text="+5%" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
|
||||||
android:id="@+id/pitchSeekbar"
|
|
||||||
style="@style/Widget.AppCompat.SeekBar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@+id/pitchCurrentText"
|
|
||||||
android:paddingBottom="4dp"
|
|
||||||
tools:progress="50" />
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
|
||||||
android:id="@+id/pitchStepUp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_marginEnd="4dp"
|
|
||||||
android:layout_marginRight="4dp"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="+-%"
|
|
||||||
android:textColor="?attr/colorAccent"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:ignore="HardcodedText"
|
|
||||||
tools:text="+5%" />
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/semitoneControl"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="40dp"
|
|
||||||
android:layout_below="@id/pitchControlText"
|
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
|
||||||
android:id="@+id/semitoneStepDown"
|
|
||||||
android:layout_width="24dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="♭"
|
|
||||||
android:textColor="?attr/colorAccent"
|
|
||||||
android:textSize="24sp"
|
|
||||||
android:textStyle="bold"
|
|
||||||
tools:ignore="HardcodedText" />
|
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/semitoneDisplay"
|
android:id="@+id/pitchSemitoneControl"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginLeft="4dp"
|
android:orientation="horizontal"
|
||||||
android:layout_marginRight="4dp"
|
tools:visibility="gone">
|
||||||
android:layout_toStartOf="@+id/semitoneStepUp"
|
|
||||||
android:layout_toLeftOf="@+id/semitoneStepUp"
|
|
||||||
android:layout_toEndOf="@+id/semitoneStepDown"
|
|
||||||
android:layout_toRightOf="@+id/semitoneStepDown"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/semitoneMinimumText"
|
android:id="@+id/pitchSemitoneStepDown"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="24dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginStart="4dp"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:layout_marginLeft="4dp"
|
android:clickable="true"
|
||||||
android:gravity="center"
|
android:focusable="true"
|
||||||
android:text="-12"
|
|
||||||
android:textColor="?attr/colorAccent"
|
|
||||||
tools:ignore="HardcodedText"/>
|
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
|
||||||
android:id="@+id/semitoneCurrentText"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
|
android:text="♭"
|
||||||
android:textColor="?attr/colorAccent"
|
android:textColor="?attr/colorAccent"
|
||||||
|
android:textSize="24sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
tools:text="0" />
|
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
|
||||||
android:id="@+id/semitoneMaximumText"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_marginEnd="4dp"
|
|
||||||
android:layout_marginRight="4dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="+12"
|
|
||||||
android:textColor="?attr/colorAccent"
|
|
||||||
tools:ignore="HardcodedText" />
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSeekBar
|
<RelativeLayout
|
||||||
android:id="@+id/semitoneSeekbar"
|
android:id="@+id/pitchSemitoneDisplay"
|
||||||
style="@style/Widget.AppCompat.SeekBar"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_below="@+id/semitoneCurrentText"
|
android:layout_marginLeft="4dp"
|
||||||
android:max="24"
|
android:layout_marginRight="4dp"
|
||||||
android:paddingBottom="4dp"
|
android:layout_toStartOf="@+id/pitchSemitoneStepUp"
|
||||||
android:progress="12" />
|
android:layout_toEndOf="@+id/pitchSemitoneStepDown"
|
||||||
</RelativeLayout>
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/semitoneStepUp"
|
android:id="@+id/pitchSemitoneMinimumText"
|
||||||
android:layout_width="24dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentStart="true"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_marginStart="4dp"
|
||||||
android:layout_centerVertical="true"
|
android:gravity="center"
|
||||||
android:layout_marginEnd="4dp"
|
android:text="-12"
|
||||||
android:layout_marginRight="4dp"
|
android:textColor="?attr/colorAccent"
|
||||||
android:background="?attr/selectableItemBackground"
|
tools:ignore="HardcodedText" />
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:gravity="center"
|
android:id="@+id/pitchSemitoneCurrentText"
|
||||||
android:text="♯"
|
android:layout_width="wrap_content"
|
||||||
android:textColor="?attr/colorAccent"
|
android:layout_height="wrap_content"
|
||||||
android:textSize="20sp"
|
android:layout_centerHorizontal="true"
|
||||||
android:textStyle="bold"
|
android:gravity="center"
|
||||||
tools:ignore="HardcodedText" />
|
android:textColor="?attr/colorAccent"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:text="0"
|
||||||
|
tools:ignore="RelativeOverlap" />
|
||||||
|
|
||||||
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
android:id="@+id/pitchSemitoneMaximumText"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_marginEnd="4dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="+12"
|
||||||
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:ignore="HardcodedText" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatSeekBar
|
||||||
|
android:id="@+id/pitchSemitoneSeekbar"
|
||||||
|
style="@style/Widget.AppCompat.SeekBar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/pitchSemitoneCurrentText"
|
||||||
|
android:max="24"
|
||||||
|
android:paddingBottom="2dp"
|
||||||
|
android:progress="12" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
|
android:id="@+id/pitchSemitoneStepUp"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_marginEnd="4dp"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="♯"
|
||||||
|
android:textColor="?attr/colorAccent"
|
||||||
|
android:textSize="20sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:ignore="HardcodedText" />
|
||||||
|
</RelativeLayout>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:id="@+id/separatorStepSizeSelector"
|
android:id="@+id/separatorStepSizeSelector"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:layout_below="@+id/semitoneControl"
|
android:layout_below="@+id/pitchControlContainer"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginTop="6dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:layout_marginBottom="6dp"
|
android:layout_marginBottom="5dp"
|
||||||
android:background="?attr/separator_color" />
|
android:background="?attr/separator_color" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/stepSizeSelector"
|
android:id="@+id/stepSizeSelector"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="32dp"
|
android:layout_height="30dp"
|
||||||
android:layout_below="@id/separatorStepSizeSelector"
|
android:layout_below="@id/separatorStepSizeSelector"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
@ -403,7 +431,8 @@
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:textColor="?attr/colorAccent" />
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:text="1%" />
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/stepSizeFivePercent"
|
android:id="@+id/stepSizeFivePercent"
|
||||||
|
@ -414,7 +443,8 @@
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:textColor="?attr/colorAccent" />
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:text="5%" />
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/stepSizeTenPercent"
|
android:id="@+id/stepSizeTenPercent"
|
||||||
|
@ -425,7 +455,8 @@
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:textColor="?attr/colorAccent" />
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:text="10%" />
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/stepSizeTwentyFivePercent"
|
android:id="@+id/stepSizeTwentyFivePercent"
|
||||||
|
@ -436,9 +467,10 @@
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:textColor="?attr/colorAccent" />
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:text="25%" />
|
||||||
|
|
||||||
<TextView
|
<org.schabi.newpipe.views.NewPipeTextView
|
||||||
android:id="@+id/stepSizeOneHundredPercent"
|
android:id="@+id/stepSizeOneHundredPercent"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -447,7 +479,8 @@
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:textColor="?attr/colorAccent" />
|
android:textColor="?attr/colorAccent"
|
||||||
|
tools:text="100%" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
|
@ -456,9 +489,9 @@
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:layout_below="@+id/stepSizeSelector"
|
android:layout_below="@+id/stepSizeSelector"
|
||||||
android:layout_marginStart="12dp"
|
android:layout_marginStart="12dp"
|
||||||
android:layout_marginTop="6dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_marginEnd="12dp"
|
android:layout_marginEnd="12dp"
|
||||||
android:layout_marginBottom="6dp"
|
android:layout_marginBottom="5dp"
|
||||||
android:background="?attr/separator_color" />
|
android:background="?attr/separator_color" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@ -486,17 +519,6 @@
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:text="@string/skip_silence_checkbox" />
|
android:text="@string/skip_silence_checkbox" />
|
||||||
|
|
||||||
<CheckBox
|
|
||||||
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"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:text="@string/adjust_by_semitones_checkbox" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<!-- END HERE -->
|
<!-- END HERE -->
|
||||||
|
|
|
@ -497,10 +497,10 @@
|
||||||
<string name="playback_pitch">Pitch</string>
|
<string name="playback_pitch">Pitch</string>
|
||||||
<string name="unhook_checkbox">Unhook (may cause distortion)</string>
|
<string name="unhook_checkbox">Unhook (may cause distortion)</string>
|
||||||
<string name="skip_silence_checkbox">Fast-forward during silence</string>
|
<string name="skip_silence_checkbox">Fast-forward during silence</string>
|
||||||
<string name="adjust_by_semitones_checkbox">Adjust pitch by musical semitones</string>
|
|
||||||
<string name="playback_step">Step</string>
|
<string name="playback_step">Step</string>
|
||||||
<string name="playback_tempo_step">Tempo step</string>
|
|
||||||
<string name="playback_reset">Reset</string>
|
<string name="playback_reset">Reset</string>
|
||||||
|
<string name="percent">Percent</string>
|
||||||
|
<string name="semitone">Semitone</string>
|
||||||
<!-- GDPR dialog -->
|
<!-- GDPR dialog -->
|
||||||
<string name="start_accept_privacy_policy">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.
|
<string name="start_accept_privacy_policy">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.</string>
|
\nYou must accept it to send us the bug report.</string>
|
||||||
|
|
Loading…
Reference in New Issue