Merge remote-tracking branch 'newpipe/dev' into rebase

This commit is contained in:
Alexander-- 2020-04-03 06:56:52 +06:59
commit 3c193dca58
42 changed files with 546 additions and 348 deletions

View File

@ -12,8 +12,8 @@ android {
resValue "string", "app_name", "NewPipe"
minSdkVersion 19
targetSdkVersion 28
versionCode 900
versionName "0.19.0"
versionCode 910
versionName "0.19.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@ -46,6 +46,7 @@ android {
} else {
applicationIdSuffix ".debug." + normalizedWorkingBranch
resValue "string", "app_name", "NewPipe " + workingBranch
archivesBaseName = 'NewPipe_' + normalizedWorkingBranch
}
}
}

View File

@ -25,6 +25,9 @@ class AppDatabaseTest {
private const val DEFAULT_DURATION = 480L
private const val DEFAULT_UPLOADER_NAME = "Uploader Test"
private const val DEFAULT_THUMBNAIL = "https://example.com/example.jpg"
private const val DEFAULT_SECOND_SERVICE_ID = 0
private const val DEFAULT_SECOND_URL = "https://www.youtube.com/watch?v=ncQU6iBn5Fc"
}
@get:Rule val testHelper = MigrationTestHelper(InstrumentationRegistry.getInstrumentation(),
@ -45,6 +48,26 @@ class AppDatabaseTest {
put("uploader", DEFAULT_UPLOADER_NAME)
put("thumbnail_url", DEFAULT_THUMBNAIL)
})
insert("streams", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply {
// put("uid", null)
put("service_id", DEFAULT_SECOND_SERVICE_ID)
put("url", DEFAULT_SECOND_URL)
// put("title", null)
// put("stream_type", null)
// put("duration", null)
// put("uploader", null)
// put("thumbnail_url", null)
})
insert("streams", SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply {
// put("uid", null)
put("service_id", DEFAULT_SERVICE_ID)
// put("url", null)
// put("title", null)
// put("stream_type", null)
// put("duration", null)
// put("uploader", null)
// put("thumbnail_url", null)
})
close()
}
@ -53,9 +76,11 @@ class AppDatabaseTest {
val migratedDatabaseV3 = getMigratedDatabase()
val listFromDB = migratedDatabaseV3.streamDAO().all.blockingFirst()
assertEquals(1, listFromDB.size)
val streamFromMigratedDatabase = listFromDB.first()
// Only expect 2, the one with the null url will be ignored
assertEquals(2, listFromDB.size)
val streamFromMigratedDatabase = listFromDB[0]
assertEquals(DEFAULT_SERVICE_ID, streamFromMigratedDatabase.serviceId)
assertEquals(DEFAULT_URL, streamFromMigratedDatabase.url)
assertEquals(DEFAULT_TITLE, streamFromMigratedDatabase.title)
@ -67,6 +92,20 @@ class AppDatabaseTest {
assertNull(streamFromMigratedDatabase.textualUploadDate)
assertNull(streamFromMigratedDatabase.uploadDate)
assertNull(streamFromMigratedDatabase.isUploadDateApproximation)
val secondStreamFromMigratedDatabase = listFromDB[1]
assertEquals(DEFAULT_SECOND_SERVICE_ID, secondStreamFromMigratedDatabase.serviceId)
assertEquals(DEFAULT_SECOND_URL, secondStreamFromMigratedDatabase.url)
assertEquals("", secondStreamFromMigratedDatabase.title)
// Should fallback to VIDEO_STREAM
assertEquals(StreamType.VIDEO_STREAM, secondStreamFromMigratedDatabase.streamType)
assertEquals(0, secondStreamFromMigratedDatabase.duration)
assertEquals("", secondStreamFromMigratedDatabase.uploader)
assertEquals("", secondStreamFromMigratedDatabase.thumbnailUrl)
assertNull(secondStreamFromMigratedDatabase.viewCount)
assertNull(secondStreamFromMigratedDatabase.textualUploadDate)
assertNull(secondStreamFromMigratedDatabase.uploadDate)
assertNull(secondStreamFromMigratedDatabase.isUploadDateApproximation)
}
private fun getMigratedDatabase(): AppDatabase {

View File

@ -88,11 +88,12 @@ public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");
private ActionBarDrawerToggle toggle = null;
private DrawerLayout drawer = null;
private NavigationView drawerItems = null;
private TextView headerServiceView = null;
private Button toggleServiceButton = null;
private ActionBarDrawerToggle toggle;
private DrawerLayout drawer;
private NavigationView drawerItems;
private ImageView headerServiceIcon;
private TextView headerServiceView;
private Button toggleServiceButton;
private boolean servicesShown = false;
private ImageView serviceArrow;
@ -294,11 +295,10 @@ public class MainActivity extends AppCompatActivity {
View hView = navigationView.getHeaderView(0);
serviceArrow = hView.findViewById(R.id.drawer_arrow);
headerServiceIcon = hView.findViewById(R.id.drawer_header_service_icon);
headerServiceView = hView.findViewById(R.id.drawer_header_service_view);
toggleServiceButton = hView.findViewById(R.id.drawer_header_action_button);
toggleServiceButton.setOnClickListener(view -> {
toggleServices();
});
toggleServiceButton.setOnClickListener(view -> toggleServices());
}
private void toggleServices() {
@ -308,7 +308,6 @@ public class MainActivity extends AppCompatActivity {
drawerItems.getMenu().removeGroup(R.id.menu_tabs_group);
drawerItems.getMenu().removeGroup(R.id.menu_options_about_group);
if(servicesShown) {
showServices();
} else {
@ -321,7 +320,7 @@ public class MainActivity extends AppCompatActivity {
}
private void showServices() {
serviceArrow.setImageResource(R.drawable.ic_arrow_up_white);
serviceArrow.setImageResource(R.drawable.ic_arrow_drop_up_white_24dp);
for(StreamingService s : NewPipe.getServices()) {
final String title = s.getServiceInfo().getName() +
@ -379,7 +378,7 @@ public class MainActivity extends AppCompatActivity {
}
private void showTabs() throws ExtractionException {
serviceArrow.setImageResource(R.drawable.ic_arrow_down_white);
serviceArrow.setImageResource(R.drawable.ic_arrow_drop_down_white_24dp);
//Tabs
int currentServiceId = ServiceHelper.getSelectedServiceId(this);
@ -437,9 +436,11 @@ public class MainActivity extends AppCompatActivity {
// when the user returns to MainActivity
drawer.closeDrawer(GravityCompat.START, false);
try {
String selectedServiceName = NewPipe.getService(
ServiceHelper.getSelectedServiceId(this)).getServiceInfo().getName();
final int selectedServiceId = ServiceHelper.getSelectedServiceId(this);
final String selectedServiceName = NewPipe.getService(selectedServiceId).getServiceInfo().getName();
headerServiceView.setText(selectedServiceName);
headerServiceIcon.setImageResource(ServiceHelper.getIcon(selectedServiceId));
headerServiceView.post(() -> headerServiceView.setSelected(true));
toggleServiceButton.setContentDescription(
getString(R.string.drawer_header_description) + selectedServiceName);
@ -487,7 +488,7 @@ public class MainActivity extends AppCompatActivity {
if (DEBUG) Log.d(TAG, "onBackPressed() called");
if (AndroidTvUtils.isTv()) {
View drawerPanel = findViewById(R.id.navigation_layout);
View drawerPanel = findViewById(R.id.navigation);
if (drawer.isDrawerOpen(drawerPanel)) {
drawer.closeDrawers();
return;

View File

@ -81,8 +81,16 @@ public class Migrations {
" duration INTEGER NOT NULL, uploader TEXT NOT NULL, thumbnail_url TEXT, view_count INTEGER, textual_upload_date TEXT, upload_date INTEGER," +
" is_upload_date_approximation INTEGER)");
database.execSQL("INSERT INTO streams_new (uid, service_id, url, title, stream_type, duration, uploader, thumbnail_url, view_count, textual_upload_date, upload_date, is_upload_date_approximation)"+
" SELECT uid, service_id, url, title, stream_type, duration, uploader, thumbnail_url, NULL, NULL, NULL, NULL FROM streams");
database.execSQL("INSERT INTO streams_new (uid, service_id, url, title, stream_type," +
"duration, uploader, thumbnail_url, view_count," +
"textual_upload_date, upload_date, is_upload_date_approximation) " +
"SELECT uid, service_id, url, ifnull(title, ''), ifnull(stream_type, 'VIDEO_STREAM')," +
"ifnull(duration, 0), ifnull(uploader, ''), ifnull(thumbnail_url, ''), NULL," +
"NULL, NULL, NULL " +
"FROM streams " +
"WHERE url IS NOT NULL");
database.execSQL("DROP TABLE streams");
database.execSQL("ALTER TABLE streams_new RENAME TO streams");

View File

@ -3,17 +3,9 @@ package org.schabi.newpipe.player;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.ItemTouchHelper;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@ -26,6 +18,12 @@ import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
@ -698,13 +696,10 @@ public abstract class ServicePlayerActivity extends AppCompatActivity
item.setTitle(player.isMuted() ? R.string.unmute : R.string.mute);
//2) Icon change accordingly to current App Theme
item.setIcon(player.isMuted() ? getThemedDrawable(R.attr.volume_off) : getThemedDrawable(R.attr.volume_on));
// using rootView.getContext() because getApplicationContext() didn't work
item.setIcon(player.isMuted()
? ThemeHelper.resolveResourceIdFromAttr(rootView.getContext(), R.attr.volume_off)
: ThemeHelper.resolveResourceIdFromAttr(rootView.getContext(), R.attr.volume_on));
}
}
private Drawable getThemedDrawable(int attribute) {
return getResources().getDrawable(
getTheme().obtainStyledAttributes(R.style.Theme_AppCompat, new int[]{attribute})
.getResourceId(0, 0));
}
}

View File

@ -69,6 +69,11 @@ public class DataReader {
return primitive[0] << 24 | primitive[1] << 16 | primitive[2] << 8 | primitive[3];
}
public long readUnsignedInt() throws IOException {
long value = readInt();
return value & 0xffffffffL;
}
public short readShort() throws IOException {
primitiveRead(SHORT_SIZE);
return (short) (primitive[0] << 8 | primitive[1]);

View File

@ -294,10 +294,6 @@ public class Mp4DashReader {
private long readUint() throws IOException {
return stream.readInt() & 0xffffffffL;
}
public static boolean hasFlag(int flags, int mask) {
return (flags & mask) == mask;
}
@ -317,7 +313,7 @@ public class Mp4DashReader {
private Box readBox() throws IOException {
Box b = new Box();
b.offset = stream.position();
b.size = stream.readInt();
b.size = stream.readUnsignedInt();
b.type = stream.readInt();
if (b.size == 1) {
@ -478,7 +474,7 @@ public class Mp4DashReader {
private long parse_tfdt() throws IOException {
int version = stream.read();
stream.skipBytes(3);// flags
return version == 0 ? readUint() : stream.readLong();
return version == 0 ? stream.readUnsignedInt() : stream.readLong();
}
private Trun parse_trun() throws IOException {
@ -551,7 +547,7 @@ public class Mp4DashReader {
stream.skipBytes(2 * (version == 0 ? 4 : 8));
Mvhd obj = new Mvhd();
obj.timeScale = readUint();
obj.timeScale = stream.readUnsignedInt();
// chunkDuration
stream.skipBytes(version == 0 ? 4 : 8);
@ -563,7 +559,7 @@ public class Mp4DashReader {
// predefined
stream.skipBytes(76);
obj.nextTrackId = readUint();
obj.nextTrackId = stream.readUnsignedInt();
return obj;
}
@ -582,7 +578,7 @@ public class Mp4DashReader {
stream.skipBytes(4);// reserved
obj.duration = version == 0 ? readUint() : stream.readLong();
obj.duration = version == 0 ? stream.readUnsignedInt() : stream.readLong();
stream.skipBytes(2 * 4);// reserved

View File

@ -46,7 +46,7 @@ public class Mp4FromDashWriter {
private int overrideMainBrand = 0x00;
private ArrayList<Integer> compatibleBrands = new ArrayList<>(5);
private final ArrayList<Integer> compatibleBrands = new ArrayList<>(5);
public Mp4FromDashWriter(SharpStream... sources) throws IOException {
for (SharpStream src : sources) {

View File

@ -104,7 +104,7 @@ public class ChunkFileInputStream extends SharpStream {
@Override
public long available() {
return (int) (length - position);
return length - position;
}
@SuppressWarnings("EmptyCatchBlock")

View File

@ -221,7 +221,7 @@ public class CircularFileWriter extends SharpStream {
available = out.length - offsetOut;
}
int length = Math.min(len, (int) available);
int length = Math.min(len, (int) Math.min(Integer.MAX_VALUE, available));
out.write(b, off, length);
len -= length;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="90"
android:endColor="#00000000"
android:startColor="#4D000000"/>
</shape>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M7,10l5,5 5,-5z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M7,14l5,-5 5,5z" />
</vector>

View File

@ -1,80 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="150dp">
<Button
android:id="@+id/drawer_header_action_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/drawer_header_description"
android:background="?android:attr/selectableItemBackground" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimary"
android:scaleType="centerCrop"
android:src="@drawable/background_header"
android:contentDescription="TODO" />
<ImageView
android:id="@+id/drawer_header_np_nude_view"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_marginTop="30dp"
android:src="@drawable/np_logo_nude_shadow"
android:contentDescription="TODO" />
<TextView
android:id="@+id/drawer_header_np_text_view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_alignBottom="@id/drawer_header_np_nude_view"
android:layout_alignTop="@id/drawer_header_np_nude_view"
android:layout_toEndOf="@id/drawer_header_np_nude_view"
android:layout_toRightOf="@id/drawer_header_np_nude_view"
android:gravity="center"
android:text="@string/app_name"
android:textSize="30sp"
android:textColor="@color/drawer_header_font_color"
android:textStyle="bold|italic" />
<TextView
android:id="@+id/drawer_header_service_view"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:layout_alignLeft="@id/drawer_header_np_text_view"
android:layout_alignStart="@id/drawer_header_np_text_view"
android:layout_below="@id/drawer_header_np_text_view"
android:layout_toLeftOf="@id/drawer_arrow"
android:layout_marginRight="5dp"
android:text="YouTube"
android:textSize="18sp"
android:textColor="@color/drawer_header_font_color"
android:textStyle="italic"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true" />
<ImageView
android:id="@+id/drawer_arrow"
android:layout_width="30dp"
android:layout_height="35dp"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_gravity="bottom"
android:layout_marginBottom="0dp"
android:paddingBottom="20dp"
android:paddingEnd="20dp"
android:paddingRight="20dp"
android:src="@drawable/ic_arrow_down_white"
android:contentDescription="TODO" />
</RelativeLayout>

View File

@ -1,79 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="150dp">
<androidx.constraintlayout.widget.ConstraintLayout
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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
android:nextFocusDown="@+id/drawer_header_action_button">
<ImageView
android:layout_width="match_parent"
android:layout_height="0dp"
android:scaleType="centerCrop"
android:src="@drawable/background_header"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/drawer_header_padding_top"
android:fitsSystemWindows="true"
android:gravity="bottom"
android:minHeight="@dimen/drawer_header_content_min_height"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:gravity="center"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/drawer_header_newpipe_icon"
android:layout_width="@dimen/drawer_header_newpipe_icon_size"
android:layout_height="@dimen/drawer_header_newpipe_icon_size"
android:layout_marginEnd="@dimen/drawer_header_newpipe_icon_title_space"
app:srcCompat="@drawable/splash_forground"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/drawer_header_newpipe_title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginEnd="@dimen/drawer_header_newpipe_icon_title_space"
android:ellipsize="end"
android:gravity="start|center_vertical"
android:hyphenationFrequency="full"
android:maxWidth="@dimen/drawer_header_newpipe_title_max_width"
android:maxLines="2"
android:minWidth="@dimen/drawer_header_newpipe_title_min_width"
android:text="@string/app_name"
android:textColor="@color/drawer_header_font_color"
android:textStyle="bold"
app:autoSizeMaxTextSize="@dimen/drawer_header_newpipe_title_max_text_size"
app:autoSizeMinTextSize="@dimen/drawer_header_newpipe_title_min_text_size"
app:autoSizeTextType="uniform"
tools:ignore="UnusedAttribute" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:background="@drawable/drawer_header_bottom_background"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="6dp"
android:paddingRight="6dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="32dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/drawer_header_service_icon"
android:layout_width="@dimen/drawer_header_service_icon_size"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:scaleType="fitCenter"
app:tint="@color/drawer_header_font_color"
tools:ignore="ContentDescription"
tools:srcCompat="@drawable/youtube" />
<TextView
android:id="@+id/drawer_header_service_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/drawer_header_font_color"
android:textSize="@dimen/drawer_header_service_title_text_size"
tools:text="YouTube" />
</LinearLayout>
<ImageView
android:id="@+id/drawer_arrow"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="4dp"
app:srcCompat="@drawable/ic_arrow_drop_down_white_24dp"
tools:ignore="ContentDescription" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/drawer_header_action_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/selectableItemBackground"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorPrimary"
android:src="@drawable/background_header"
android:scaleType="centerCrop"
android:contentDescription="TODO" />
<ImageView
android:id="@+id/drawer_header_np_nude_view"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_marginTop="20dp"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/np_logo_nude_shadow"
android:contentDescription="TODO" />
<TextView
android:id="@+id/drawer_header_np_text_view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:text="@string/app_name"
android:layout_toRightOf="@id/drawer_header_np_nude_view"
android:layout_toEndOf="@id/drawer_header_np_nude_view"
android:layout_alignTop="@id/drawer_header_np_nude_view"
android:layout_alignBottom="@id/drawer_header_np_nude_view"
android:gravity="center"
android:textSize="30sp"
android:textColor="@color/drawer_header_font_color"
android:textStyle="bold|italic"/>
<TextView
android:id="@+id/drawer_header_service_view"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:text="YouTube"
android:layout_below="@id/drawer_header_np_text_view"
android:layout_alignLeft="@id/drawer_header_np_text_view"
android:layout_alignStart="@id/drawer_header_np_text_view"
android:layout_toLeftOf="@id/drawer_arrow"
android:layout_marginRight="5dp"
android:textSize="18sp"
android:textColor="@color/drawer_header_font_color"
android:textStyle="italic"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true" />
<ImageView
android:id="@+id/drawer_arrow"
android:layout_width="30dp"
android:layout_height="35dp"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_gravity="bottom"
android:layout_marginBottom="0dp"
android:paddingBottom="20dp"
android:paddingRight="20dp"
android:src="@drawable/ic_arrow_down_white"
android:paddingEnd="20dp"
android:contentDescription="TODO" />
</RelativeLayout>
android:background="?selectableItemBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,37 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.internal.ScrimInsetsFrameLayout android:id="@+id/navigation_layout"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
android:focusable="false"
android:background="?attr/android:windowBackground"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<com.google.android.material.navigation.NavigationView
<com.google.android.material.navigation.NavigationView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/navigation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:elevation="0dp"
android:background="?attr/android:windowBackground"
app:headerLayout="@layout/drawer_header"
android:focusable="false"
android:theme="@style/NavViewTextStyle"/>
<!-- app:menu="@menu/drawer_items" -->
<LinearLayout
android:id="@+id/navigation_drawer_footer"
android:layout_width="0dp"
android:layout_height="60dp"
android:orientation="horizontal"
android:layout_alignLeft="@id/navigation"
android:layout_alignRight="@id/navigation"
android:layout_alignStart="@id/navigation"
android:layout_alignEnd="@id/navigation"
android:layout_alignParentBottom="true">
</LinearLayout>
</com.google.android.material.internal.ScrimInsetsFrameLayout>
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="?android:attr/windowBackground"
android:orientation="vertical"
app:headerLayout="@layout/drawer_header" />

View File

@ -456,7 +456,7 @@
<string name="error_postprocessing_failed">后期处理失败</string>
<string name="stop">停止</string>
<string name="max_retry_msg">最大重试次数</string>
<string name="max_retry_desc">取消下载前的最多重试次数</string>
<string name="max_retry_desc">取消下载前的最多重试次数</string>
<string name="pause_downloads_on_mobile">在切换到移动流量网络时中断播放</string>
<string name="pause_downloads_on_mobile_desc">切换至移动数据时可能有用,尽管一些下载无法被暂停</string>
<string name="events">事件</string>
@ -551,7 +551,7 @@
<plurals name="days">
<item quantity="other">%d天</item>
</plurals>
<string name="feed_groups_header_title">Feed</string>
<string name="feed_groups_header_title">频道</string>
<string name="feed_oldest_subscription_update">最早订阅更新:%s</string>
<string name="feed_subscription_not_loaded_count">未加载: %d</string>
<string name="feed_notification_loading">正在加载feed…</string>
@ -565,7 +565,7 @@
<string name="feed_group_dialog_name_input">名称</string>
<string name="feed_group_dialog_delete_message">您要删除该组吗?</string>
<string name="feed_create_new_group_button_title">新建</string>
<string name="settings_category_feed_title">Feed</string>
<string name="settings_category_feed_title">订阅</string>
<string name="feed_update_threshold_title">Feed更新阈值</string>
<string name="feed_update_threshold_summary">上次更新后,订阅被视为过时的时间-s</string>
<string name="feed_update_threshold_option_always_update">始终更新</string>

View File

@ -557,8 +557,8 @@ otevření ve vyskakovacím okně</string>
<item quantity="other">%d vteřin</item>
</plurals>
<string name="new_seek_duration_toast">Kvůli omezením ExoPlayer bylo prohledávání nastaveno na %d vteřin</string>
<string name="mute">Umlčet</string>
<string name="unmute">Odumlčet</string>
<string name="mute">Ztišit</string>
<string name="unmute">Obnovit hlasitost</string>
<string name="help">Nápověda</string>
<plurals name="minutes">
<item quantity="one">%d minuta</item>

View File

@ -572,7 +572,7 @@
<string name="feed_group_dialog_delete_message">Möchtest du diese Gruppe löschen\?</string>
<string name="feed_create_new_group_button_title">Neu</string>
<string name="feed_update_threshold_option_always_update">Immer aktualisieren</string>
<string name="feed_groups_header_title">Feed-Gruppen</string>
<string name="feed_groups_header_title">Channel-Gruppen</string>
<string name="feed_subscription_not_loaded_count">Nicht geladen: %d</string>
<string name="feed_notification_loading">Feed laden…</string>
<string name="feed_processing_message">Feed verarbeiten…</string>

View File

@ -550,7 +550,7 @@
<plurals name="days">
<item quantity="other">%d hari</item>
</plurals>
<string name="feed_groups_header_title">Grup feed</string>
<string name="feed_groups_header_title">Grup channel</string>
<string name="feed_oldest_subscription_update">Pembaruan subscription terlama: %s</string>
<string name="feed_subscription_not_loaded_count">Tidak dimuat: %d</string>
<string name="feed_notification_loading">Memuat feed…</string>

View File

@ -551,7 +551,7 @@
<plurals name="days">
<item quantity="other">%d 日</item>
</plurals>
<string name="feed_groups_header_title">フィード グループ</string>
<string name="feed_groups_header_title">チャンネル グループ</string>
<string name="feed_oldest_subscription_update">最も古い登録チャンネルの更新: %s</string>
<string name="feed_subscription_not_loaded_count">読み込み失敗: %d</string>
<string name="feed_notification_loading">フィードを読み込み中…</string>

View File

@ -16,10 +16,10 @@
<string name="screen_rotation">draaiing</string>
<string name="download_path_title">Downloadlocatie voor video\'s</string>
<string name="download_path_summary">Locatie om gedownloade video\'s in op te slaan</string>
<string name="download_path_dialog_title">Kies de downloadlocatie voor video\'s</string>
<string name="download_path_dialog_title">Voer de downloadlocatie in voor video\'s</string>
<string name="default_resolution_title">Standaardresolutie</string>
<string name="play_with_kodi_title">Afspelen met Kodi</string>
<string name="kore_not_found">Installeer ontbrekende Kore-app\?</string>
<string name="kore_not_found">Kore-app niet gevonden. Deze installeren\?</string>
<string name="show_play_with_kodi_title">\"Afspelen met Kodi\"-optie tonen</string>
<string name="show_play_with_kodi_summary">Toon een optie om een video af te spelen via Kodi media center</string>
<string name="play_audio">Audio</string>
@ -33,12 +33,12 @@
<string name="use_external_audio_player_title">Externe audiospeler gebruiken</string>
<string name="settings_category_video_audio_title">Audio en video</string>
<string name="list_thumbnail_view_description">Videovoorbeeldminiatuur</string>
<string name="detail_thumbnail_view_description">Videovoorbeeldminiatuur</string>
<string name="detail_thumbnail_view_description">Speel video, tijd:</string>
<string name="detail_uploader_thumbnail_view_description">Gebruikersafbeelding van uploader</string>
<string name="detail_dislikes_img_view_description">Vind-ik-niet-leuks</string>
<string name="download_path_audio_title">Downloadfolder voor audio</string>
<string name="download_path_audio_summary">Gedownloade muziek wordt hier opgeslagen</string>
<string name="download_path_audio_dialog_title">Kies de downloadlocatie voor audiobestanden</string>
<string name="download_path_audio_dialog_title">Voer de downloadlocatie in voor audiobestanden</string>
<string name="theme_title">Thema</string>
<string name="dark_theme_title">Donker</string>
<string name="light_theme_title">Licht</string>
@ -85,7 +85,7 @@
<string name="could_not_load_image">Kan afbeelding niet laden</string>
<string name="app_ui_crash">App/UI gecrasht</string>
<string name="info_labels">Wat:\\nVerzoek:\\nTaal van inhoud:\\nDienst:\\nTijd in GMT:\\nPakket:\\nVersie:\\nVersie van besturingssysteem:</string>
<string name="report_error">Probleem melden</string>
<string name="report_error">Meld een probleem</string>
<string name="user_report">Gebruikersrapport</string>
<string name="storage_permission_denied">Geef eerst toegang tot de opslag</string>
<string name="start">Begin</string>
@ -105,7 +105,7 @@
<string name="msg_running_detail">Druk voor meer informatie</string>
<string name="msg_wait">Even geduld…</string>
<string name="msg_copied">Gekopieerd naar klembord</string>
<string name="no_available_dir">Kies een beschikbare downloadmap</string>
<string name="no_available_dir">Selecteer een downloadmap in de Instellingen</string>
<string name="black_theme_title">Zwart</string>
<string name="recaptcha">reCAPTCHA</string>
<string name="title_activity_recaptcha">reCAPTCHA-uitdaging</string>
@ -177,7 +177,7 @@
<string name="enable_watch_history_title">Kijkgeschiedenis</string>
<string name="enable_watch_history_summary">Kijkgeschiedenis bijhouden</string>
<string name="resume_on_audio_focus_gain_title">Hervat afspelen</string>
<string name="resume_on_audio_focus_gain_summary">Ga verder met afspelen na onderbrekingen (zoals telefoongesprekken)</string>
<string name="resume_on_audio_focus_gain_summary">Ga verder met afspelen na onderbrekingen (b.v. telefoongesprekken)</string>
<string name="notification_channel_name">NewPipe-melding</string>
<string name="notification_channel_description">Meldingen voor NewPipe-achtergrond- en pop-upspelers</string>
<string name="title_activity_history">Geschiedenis</string>
@ -212,7 +212,7 @@
<string name="item_deleted">Item verwijderd</string>
<string name="delete_item_search_history">Wil je dit item verwijderen uit je zoekgeschiedenis?</string>
<string name="show_hold_to_append_title">Toon tip \"Ingedrukt houden om toe te voegen\"</string>
<string name="show_hold_to_append_summary">Toon tip als achtergrond- of pop-upknop wordt ingedrukt op de videogegevenspagina</string>
<string name="show_hold_to_append_summary">Toon tip als de achtergrond- of pop-upknop wordt ingedrukt op de videogegevenspagina</string>
<string name="background_player_append">Toegevoegd aan wachtrij voor achtergrondspeler</string>
<string name="popup_playing_append">Toegevoegd aan wachtrij voor pop-upspeler</string>
<string name="play_all">Alles afspelen</string>
@ -237,7 +237,7 @@
<string name="play_queue_remove">Verwijderen</string>
<string name="play_queue_stream_detail">Details</string>
<string name="play_queue_audio_settings">Audio-instellingen</string>
<string name="hold_to_append">Ingedrukt houden om toe te voegen aan wachtrij</string>
<string name="hold_to_append">Houd ingedrukt om toe te voegen aan de wachtrij</string>
<string name="unknown_content">[Onbekend]</string>
<string name="enqueue_on_background">Toevoegen aan wachtrij in de achtergrond</string>
<string name="enqueue_on_popup">Toevoegen aan wachtrij in nieuwe pop-up</string>
@ -318,7 +318,7 @@
<string name="enable_disposed_exceptions_title">Out-of-lifecycle-fouten melden</string>
<string name="enable_disposed_exceptions_summary">Forceer het melden van niet-bezorgbare Rx-uitzonderingen buiten fragment of activiteitscyclus</string>
<string name="use_inexact_seek_title">Snelle, minder exact spoelen gebruiken</string>
<string name="use_inexact_seek_summary">Onnauwkeurig zoeken laat de speler sneller posities zoeken met verminderde precisie. 5, 15 of 25 zoeken werkt dan niet.</string>
<string name="use_inexact_seek_summary">Minder exact spoelen laat de speler sneller posities zoeken met verminderde precisie. 5, 15 en 25 seconden werken niet.</string>
<string name="auto_queue_title">Volgende stream automatisch in wachtrij plaatsen</string>
<string name="auto_queue_summary">Automatisch een gerelateerde stream toekennen bij het afspelen van de laatste stream in een niet-herhalende afspeelwachtlijst</string>
<string name="file">Bestand</string>
@ -369,7 +369,7 @@
<string name="caption_setting_description">Bijschriftgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app.</string>
<string name="toast_no_player">Er is geen app geïnstalleerd die dit bestand kan afspelen</string>
<string name="clear_views_history_title">Kijkgeschiedenis wissen</string>
<string name="clear_views_history_summary">Verwijdert de geschiedenis van afgespeelde streams</string>
<string name="clear_views_history_summary">Verwijdert de geschiedenis van afgespeelde streams en afspeelposities</string>
<string name="delete_view_history_alert">De gehele kijkgeschiedenis wissen\?</string>
<string name="watch_history_deleted">Kijkgeschiedenis gewist.</string>
<string name="clear_search_history_title">Zoekgeschiedenis wissen</string>
@ -458,13 +458,13 @@
<string name="stop">Stop</string>
<string name="max_retry_msg">Maximum aantal keer proberen</string>
<string name="max_retry_desc">Maximum aantal pogingen voordat de download wordt geannuleerd</string>
<string name="pause_downloads_on_mobile">Onderbreken op netwerken met datalimiet</string>
<string name="pause_downloads_on_mobile_desc">Handig bij het overschakelen naar mobiele gegevens, hoewel sommige downloads niet onderbroken kunnen worden</string>
<string name="pause_downloads_on_mobile">Pauzeren bij overschakelen naar mobiele data</string>
<string name="pause_downloads_on_mobile_desc">Handig voor wanneer u naar mobiel internet overschakelt, hoewel sommige downloads niet gepauzeerd kunnen worden</string>
<string name="events">Gebeurtenissen</string>
<string name="conferences">Conferenties</string>
<string name="error_timeout">Time-out van verbinding</string>
<string name="show_comments_title">Reacties tonen</string>
<string name="show_comments_summary">Schakel uit om reacties niet te tonen</string>
<string name="show_comments_summary">Schakel dit uit om reacties te verbergen</string>
<string name="autoplay_title">Automatisch afspelen</string>
<plurals name="comments">
<item quantity="one">%s reactie</item>
@ -473,40 +473,40 @@
<string name="no_comments">Geen reacties</string>
<string name="error_unable_to_load_comments">Kan reacties niet laden</string>
<string name="close">Sluiten</string>
<string name="downloads_storage_use_saf_summary">Het \'Storage Access Framework\' laat downloads naar een externe SD kaart toe.
\n Niet alle toestellen zijn compatibel</string>
<string name="downloads_storage_use_saf_summary">Het \'Storage Access Framework\' laat downloads naar een externe SD kaart toe.
\nNiet alle toestellen zijn compatibel</string>
<string name="settings_category_clear_data_title">Wis data</string>
<string name="download_choose_new_path">Verander de downloadmappen om effect te bekomen</string>
<string name="enable_playback_resume_title">Afspelen hervatten</string>
<string name="enable_playback_resume_summary">Laatste afspeelpositie herstellen</string>
<string name="enable_playback_resume_title">Hervat afspelen</string>
<string name="enable_playback_resume_summary">Herstel de vorige afspeelpositie</string>
<string name="enable_playback_state_lists_title">Posities in lijsten</string>
<string name="enable_playback_state_lists_summary">Afspeelpositie-indicatoren in lijsten tonen</string>
<string name="watch_history_states_deleted">Afspeelposities verwijderd.</string>
<string name="missing_file">Bestand verplaatst of verwijderd</string>
<string name="overwrite_unrelated_warning">Een bestand met deze naam bestaat al</string>
<string name="overwrite_failed">kan het bestand niet overschrijven</string>
<string name="download_already_pending">Er is een download in behandeling met deze naam</string>
<string name="overwrite_unrelated_warning">Een bestand met dezelfde naam bestaat al</string>
<string name="overwrite_failed">het is niet mogelijk het bestand te overschrijven</string>
<string name="download_already_pending">Er is al een download met deze naam bezig</string>
<string name="error_insufficient_storage">Geen ruimte meer op het apparaat</string>
<string name="error_progress_lost">Voortgang verloren, omdat het bestand is verwijderd</string>
<string name="error_progress_lost">Voortgang verloren, omdat bestand was verwijderd</string>
<string name="confirm_prompt">Wil je je downloadgeschiedenis wissen of alle gedownloade bestanden verwijderen\?</string>
<string name="enable_queue_limit">Downloadwachtrij beperken</string>
<string name="enable_queue_limit_desc">Een download zal tegelijkertijd worden uitgevoerd</string>
<string name="start_downloads">Downloads starten</string>
<string name="enable_queue_limit">Limiteer de download wachtrij</string>
<string name="enable_queue_limit_desc">Er zal maximaal 1 bestand tegelijk worden gedownload</string>
<string name="start_downloads">Download starten</string>
<string name="pause_downloads">Downloads pauzeren</string>
<string name="downloads_storage_ask_title">Vraag waar te downloaden</string>
<string name="downloads_storage_ask_summary">Je zal gevraagd worden waar elke download op te slaan</string>
<string name="downloads_storage_ask_title">Vraag waar bestanden geplaatst moeten worden</string>
<string name="downloads_storage_ask_summary">U zal worden gevraagd waar u bestanden wilt opslaan</string>
<string name="downloads_storage_ask_summary_kitkat">Je zal gevraagd worden waar elke download op te slaan.
\nKies SAF als je wilt downloaden naar een externe SD-kaart</string>
<string name="downloads_storage_use_saf_title">SAF gebruiken</string>
<string name="clear_playback_states_title">Afspeelposities verwijderen</string>
<string name="clear_playback_states_summary">Alle afspeelposities verwijderen</string>
<string name="downloads_storage_use_saf_title">Gebruik SAF</string>
<string name="clear_playback_states_title">Verwijder afspeelposities</string>
<string name="clear_playback_states_summary">Verwijder alle afspeelposities</string>
<string name="delete_playback_states_alert">Alle afspeelposities verwijderen\?</string>
<string name="no_one_watching">Niemand kijkt</string>
<string name="no_one_watching">Niemand is aan het kijken</string>
<plurals name="watching">
<item quantity="one">%s kijkt</item>
<item quantity="other">%s kijken</item>
<item quantity="one">%s kijker</item>
<item quantity="other">%s kijkers</item>
</plurals>
<string name="no_one_listening">Niemand luistert</string>
<string name="no_one_listening">Niemand is aan het luisteren</string>
<plurals name="listening">
<item quantity="one">%s luisteraar</item>
<item quantity="other">%s luisteraars</item>
@ -514,38 +514,38 @@
<string name="localization_changes_requires_app_restart">De taal zal veranderen zodra de app opnieuw is opgestart.</string>
<string name="default_kiosk_page_summary">Standaardkiosk</string>
<string name="seek_duration_title">Duur van snel voor-/achteruit zoeken</string>
<string name="peertube_instance_url_title">PeerTube-instanties</string>
<string name="peertube_instance_url_summary">Selecteer je favoriete PeerTube-instanties</string>
<string name="peertube_instance_url_help">Zoek de instanties die je leuk vindt op %s</string>
<string name="peertube_instance_add_title">Instantie toevoegen</string>
<string name="peertube_instance_add_help">Instantie-URL invoeren</string>
<string name="peertube_instance_add_fail">Kon instantie niet valideren</string>
<string name="peertube_instance_add_https_only">Alleen HTTPS-URL\'s worden ondersteund</string>
<string name="peertube_instance_add_exists">Instantie bestaat al</string>
<string name="peertube_instance_url_title">PeerTube instanties</string>
<string name="peertube_instance_url_summary">Favoriete PeerTube instanties instellen</string>
<string name="peertube_instance_url_help">Vind het kanaal dat je leuk vind op %s</string>
<string name="peertube_instance_add_title">Kanaal toevoegen</string>
<string name="peertube_instance_add_help">Kanaal URL invoeren</string>
<string name="peertube_instance_add_fail">Kon kanaal niet valideren</string>
<string name="peertube_instance_add_https_only">Alleen HTTPS links worden ondersteund</string>
<string name="peertube_instance_add_exists">Kanaal bestaat al</string>
<string name="local">Lokaal</string>
<string name="recently_added">Onlangs toegevoegd</string>
<string name="recently_added">Recentelijk toegevoegd</string>
<string name="playlist_no_uploader">Automatisch gegenereerd (geen uploader gevonden)</string>
<string name="recovering">herstellen</string>
<string name="error_download_resource_gone">Kan deze download niet herstellen</string>
<string name="choose_instance_prompt">Kies een instantie</string>
<string name="enable_lock_screen_video_thumbnail_title">Videominiatuur op vergrendelscherm</string>
<string name="enable_lock_screen_video_thumbnail_summary">Een videominiatuur wordt getoond op het vergrendelscherm wanneer de achtergrondspeler wordt gebruikt</string>
<string name="clear_download_history">Downloadgeschiedenis wissen</string>
<string name="delete_downloaded_files">Gedownloade bestanden verwijderen</string>
<string name="enable_lock_screen_video_thumbnail_title">Video afbeelding laten zien op vergrendelingsscherm</string>
<string name="enable_lock_screen_video_thumbnail_summary">Een video afbeelding wordt weergegeven op het vergrendelscherm wanneer de achtergrond speler wordt gebruikt</string>
<string name="clear_download_history">Download geschiedenis verwijderen</string>
<string name="delete_downloaded_files">Verwijder gedownloade bestanden</string>
<string name="deleted_downloads">%1$s downloads verwijderd</string>
<string name="permission_display_over_apps">Geef toestemming voor weergave over andere apps</string>
<string name="app_language_title">App-taal</string>
<string name="systems_language">Systeemstandaard</string>
<string name="app_language_title">Applicatie taal</string>
<string name="systems_language">Systeem taal gebruiken</string>
<string name="subtitle_activity_recaptcha">Druk op \"Klaar\" zodra opgelost</string>
<string name="recaptcha_done_button">Klaar</string>
<string name="videos_string">Video\'s</string>
<string name="new_seek_duration_toast">Door beperkingen van ExoPlayer is de zoekduur ingesteld op %d seconden</string>
<string name="mute">Dempen</string>
<string name="unmute">Dempen opheffen</string>
<string name="mute">Geluid dempen</string>
<string name="unmute">Geluid aanzetten</string>
<string name="help">Hulp</string>
<plurals name="seconds">
<item quantity="one">%d seconde</item>
<item quantity="other">%d secondes</item>
<item quantity="other">%d seconden</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d minuut</item>
@ -560,11 +560,11 @@
<item quantity="other">%d dagen</item>
</plurals>
<string name="feed_groups_header_title">Feedgroepen</string>
<string name="feed_oldest_subscription_update">Oudste abonnementsupdate: %s</string>
<string name="feed_oldest_subscription_update">Oudste abonnements-update: %s</string>
<string name="feed_subscription_not_loaded_count">Niet geladen: %d</string>
<string name="feed_notification_loading">Feed aan het laden…</string>
<string name="feed_processing_message">Feed aan het verwerken…</string>
<string name="feed_group_dialog_select_subscriptions">Abonnementen selecteren</string>
<string name="feed_group_dialog_select_subscriptions">Selecteer abonnementen</string>
<string name="feed_group_dialog_empty_selection">Geen abonnement geselecteerd</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d geselecteerd</item>
@ -572,7 +572,7 @@
</plurals>
<string name="feed_group_dialog_empty_name">Lege groepsnaam</string>
<string name="feed_group_dialog_name_input">Naam</string>
<string name="feed_group_dialog_delete_message">Wil je deze groep verwijderen\?</string>
<string name="feed_group_dialog_delete_message">Wilt u deze groep verwijderen\?</string>
<string name="feed_create_new_group_button_title">Nieuw</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Drempel voor feedupdate</string>
@ -593,4 +593,7 @@
\nYouTube is een voorbeeld van een service die deze snelle methode aanbiedt door zijn RSS-feed.
\n
\nDe keuze komt dus neer op wat je liever hebt: snelheid of precieze informatie.</string>
<string name="drawer_header_description">Toggle service, momenteel geselecteerd:</string>
<string name="most_liked">Meest geliked</string>
<string name="error_postprocessing_stopped">NewPipe werd gesloten terwijl het bezig was met het bestand</string>
</resources>

View File

@ -550,11 +550,62 @@
<string name="recaptcha_done_button">Gotowe</string>
<string name="videos_string">Filmy</string>
<plurals name="seconds">
<item quantity="one">%d sekund</item>
<item quantity="few">%d sekund</item>
<item quantity="one">%d sekunda</item>
<item quantity="few">%d sekundy</item>
<item quantity="many">%d sekund</item>
</plurals>
<string name="new_seek_duration_toast">Ze względu na ograniczenia ExoPlayer, czas trwania wyszukiwania został ustawiony na %d sekund</string>
<string name="mute">Wycisz</string>
<string name="unmute">Wyłącz wyciszenie</string>
<string name="feed_use_dedicated_fetch_method_help_text">Czy uważasz, że ładowanie kanałów jest zbyt powolne\? Jeśli tak, spróbuj włączyć szybkie ładowanie (możesz go zmienić w ustawieniach lub naciskając przycisk poniżej).
\n
\nNewPipe oferuje dwie strategie ładowania kanału:
\n• Pobieranie całego kanału subskrypcji, który jest powolny, ale kompletny.
\n• Korzystanie z dedykowanego punktu końcowego usługi, który jest szybki, ale zwykle nie jest kompletny.
\n
\nRóżnica między nimi polega na tym, że w szybkim zwykle brakuje pewnych informacji, takich jak czas trwania lub typ pozycji (nie można odróżnić filmów na żywo od zwykłych) i może zwrócić mniej pozycji.
\n
\nYouTube jest przykładem usługi, która oferuje tę szybką metodę z kanałem RSS.
\n
\nTak więc wybór sprowadza się do tego, co wolisz: prędkości lub precyzyjne informacje.</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Wyłącz tryb szybki</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Włącz tryb szybki</string>
<string name="feed_use_dedicated_fetch_method_summary">Dostępne w niektórych usługach jest zwykle znacznie szybsze, ale może zwrócić ograniczoną liczbę pozycji i często niekompletne informacje (np. Brak czasu trwania, typ pozycji, brak statusu na żywo).</string>
<string name="feed_use_dedicated_fetch_method_title">Pobierz z dedykowanego kanału, jeśli jest dostępny</string>
<string name="feed_update_threshold_option_always_update">Zawsze aktualizuj</string>
<string name="feed_update_threshold_summary">Czas po ostatniej aktualizacji, zanim subskrypcja zostanie uznana za nieaktualną — %s</string>
<string name="feed_update_threshold_title">Próg aktualizacji kanału</string>
<string name="settings_category_feed_title">Kanał</string>
<string name="feed_create_new_group_button_title">Nowy</string>
<string name="feed_group_dialog_delete_message">Czy chcesz usunąć tę grupę\?</string>
<string name="feed_group_dialog_name_input">Nazwa</string>
<string name="feed_group_dialog_empty_name">Pusta nazwa grupy</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">wybrany %d</item>
<item quantity="few">wybrano %d</item>
<item quantity="many">wybrano %d</item>
</plurals>
<string name="feed_group_dialog_empty_selection">Nie wybrano żadnej subskrypcji</string>
<string name="feed_group_dialog_select_subscriptions">Wybierz subskrypcje</string>
<string name="feed_processing_message">Przetwarzam plik danych…</string>
<string name="feed_notification_loading">Ładowanie kanału…</string>
<string name="feed_subscription_not_loaded_count">Nie uruchamia się: %d</string>
<string name="feed_oldest_subscription_update">Najstarsza aktualizacja subskrypcji: %s</string>
<string name="feed_groups_header_title">Grupy kanałów</string>
<plurals name="days">
<item quantity="one">%d dzień</item>
<item quantity="few">%d dni</item>
<item quantity="many">%d dni</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d godzina</item>
<item quantity="few">%d godziny</item>
<item quantity="many">%d godzin</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d minuta</item>
<item quantity="few">%d minuty</item>
<item quantity="many">%d minut</item>
</plurals>
<string name="help">Pomoc</string>
</resources>

View File

@ -536,7 +536,7 @@ abrir em modo popup</string>
<string name="local">Local</string>
<string name="recently_added">Recentes</string>
<string name="most_liked">Em alta</string>
<string name="playlist_no_uploader">Gerado automaticamente (sem criador)</string>
<string name="playlist_no_uploader">Gerado automaticamente (sem autor)</string>
<string name="recovering">recuperando</string>
<string name="error_download_resource_gone">Não foi possível recuperar o download</string>
<string name="choose_instance_prompt">Escolha uma instância</string>
@ -555,7 +555,54 @@ abrir em modo popup</string>
<item quantity="one">%d segundo</item>
<item quantity="other">%d segundos</item>
</plurals>
<string name="new_seek_duration_toast">Devido a restrições do ExoPlayer a duração da pesquisa foi definida como %d segundos</string>
<string name="new_seek_duration_toast">Devido às configurações do ExoPlayer a duração da pesquisa foi definida como %d segundos</string>
<string name="mute">Desativar som</string>
<string name="unmute">Ativar som</string>
<string name="help">Ajuda</string>
<plurals name="minutes">
<item quantity="one">%d minuto</item>
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d hora</item>
<item quantity="other">%d horas</item>
</plurals>
<plurals name="days">
<item quantity="one">%d dia</item>
<item quantity="other">%d dias</item>
</plurals>
<string name="feed_groups_header_title">Grupos de feed</string>
<string name="feed_oldest_subscription_update">Última atualização das inscrições: %s</string>
<string name="feed_subscription_not_loaded_count">Não carregado: %d</string>
<string name="feed_notification_loading">Carregando feed…</string>
<string name="feed_processing_message">Processando feed…</string>
<string name="feed_group_dialog_select_subscriptions">Selecionar inscrições</string>
<string name="feed_group_dialog_empty_selection">Sem inscrições selecionadas</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d selecionada</item>
<item quantity="other">%d selecionadas</item>
</plurals>
<string name="feed_group_dialog_empty_name">Nome do grupo está vazio</string>
<string name="feed_group_dialog_name_input">Nome</string>
<string name="feed_group_dialog_delete_message">Deseja excluir este grupo\?</string>
<string name="feed_create_new_group_button_title">Novo</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Limiar de atualização do feed</string>
<string name="feed_update_threshold_summary">Período para que uma inscrição seja considerada desatualizada — %s</string>
<string name="feed_update_threshold_option_always_update">Atualizar sempre</string>
<string name="feed_use_dedicated_fetch_method_title">Carregar do feed dedicado, se disponível</string>
<string name="feed_use_dedicated_fetch_method_summary">Disponível em alguns serviços, é mais rápido porém pode apresentar informações limitadas ou incompletas (por exemplo, sem duração, status ao vivo e etc).</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Ativar modo rápido</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Desativar modo rápido</string>
<string name="feed_use_dedicated_fetch_method_help_text">Achou o carregamento do feed lento\? Se sim, tente ativar o modo rápido (você pode mudar isso nas configurações ou tocando no botão abaixo).
\n
\nNewPipe oferece duas estratégias de carregamento do feed:
\n• Carregando todo o canal que se foi inscrito, lento mas completo.
\n• Usando ponto de servidor dedicado, rápido mas incompleto.
\n
\nA diferença entre os dois é que o mais rápido sofre perda de algumas informações como a duração do vídeo, o status ao vivo dele e etc.
\n
\nYouTube é um exemplo de serviço que oferece o modo rápido com seu feed RSS.
\n
\nEntão, a escolha é sua: Velocidade ou informações precisas.</string>
</resources>

View File

@ -2,7 +2,7 @@
<resources>
<string name="view_count_text">%1$s visualizações</string>
<string name="upload_date_text">Publicado em %1$s</string>
<string name="no_player_found">Reprodutor não disponível. Deseja instalar o VLC?</string>
<string name="no_player_found">Nenhum reprodutor de vídeo encontrado. Instalar o VLC\?</string>
<string name="install">Instalar</string>
<string name="cancel">Cancelar</string>
<string name="open_in_browser">Abrir no navegador</string>
@ -21,7 +21,7 @@
<string name="download_path_dialog_title">Escolha a pasta de descarregamento para ficheiros de vídeo</string>
<string name="default_resolution_title">Resolução predefinida</string>
<string name="play_with_kodi_title">Reproduzir no Kodi</string>
<string name="kore_not_found">Aplicação Kore não encontrada. Instalar?</string>
<string name="kore_not_found">Instalar a app Kore\?</string>
<string name="show_play_with_kodi_title">Mostrar opção \"Reproduzir no Kodi\"</string>
<string name="show_play_with_kodi_summary">Exibir uma opção para reproduzir o vídeo via Kodi media center</string>
<string name="play_audio">Áudio</string>
@ -59,7 +59,7 @@
<string name="content_not_available">Conteúdo indisponível</string>
<string name="content">Conteúdo</string>
<string name="show_age_restricted_content_title">Conteúdo com restrição de idade</string>
<string name="video_is_age_restricted">Mostrar vídeo com restrição de idade. É possível permitir tal material nas Definições.</string>
<string name="video_is_age_restricted">Mostrar vídeo com restrição de idade. Alterações serão possíveis nas configurações.</string>
<string name="light_parsing_error">Não foi possível processar totalmente o site da Web</string>
<string name="could_not_setup_download_menu">Não foi possível configurar o menu de transferências</string>
<string name="live_streams_not_supported">As emissões em direto ainda não são suportadas</string>
@ -75,11 +75,11 @@
<string name="video">Vídeo</string>
<string name="audio">Áudio</string>
<string name="retry">Tentar novamente</string>
<string name="storage_permission_denied">Negada a permissão para aceder ao armazenamento</string>
<string name="main_bg_subtitle">Toque para iniciar a pesquisa</string>
<string name="storage_permission_denied">Conceder acesso ao armazenamento primeiro</string>
<string name="main_bg_subtitle">Toque em \"Pesquisar\" para iniciar</string>
<string name="autoplay_by_calling_app_title">Reprodução automática</string>
<string name="autoplay_by_calling_app_summary">Reproduzir vídeo se o NewPipe for invocado por outra aplicação</string>
<string name="duration_live">Direto</string>
<string name="duration_live">Ao vivo</string>
<string name="report_error">Reportar um erro</string>
<string name="user_report">Relatório</string>
<string name="downloads">Transferências</string>
@ -120,13 +120,13 @@
<string name="recaptcha">reCAPTCHA</string>
<string name="title_activity_recaptcha">Desafio reCAPTCHA</string>
<string name="recaptcha_request_toast">Desafio reCAPTCHA solicitado</string>
<string name="popup_mode_share_menu_title">Modo de janela autónoma do NewPipe</string>
<string name="popup_mode_share_menu_title">Modo popup</string>
<string name="popup_playing_toast">Reproduzir no modo de janela autónoma</string>
<string name="default_video_format_title">Formato de vídeo predefinido</string>
<string name="disabled">Desativado</string>
<string name="default_popup_resolution_title">Resolução da janela autónoma predefinida</string>
<string name="show_higher_resolutions_title">Mostrar resoluções mais altas</string>
<string name="show_higher_resolutions_summary">Apenas alguns dispositivos suportam a reprodução de vídeos em 2K/4K</string>
<string name="show_higher_resolutions_summary">Apenas alguns aparelhos suportam a reprodução de vídeos em 2K/4K</string>
<string name="controls_popup_title">Janela</string>
<string name="popup_remember_size_pos_title">Lembrar tamanho e posição da janela</string>
<string name="settings_category_popup_title">Janela</string>
@ -170,7 +170,7 @@
<string name="enable_search_history_summary">Guardar termos de pesquisa localmente</string>
<string name="enable_watch_history_title">Ver histórico</string>
<string name="enable_watch_history_summary">Manter histórico dos vídeos vistos</string>
<string name="resume_on_audio_focus_gain_title">Retomar ao ganhar foco</string>
<string name="resume_on_audio_focus_gain_title">Retomar reprodução</string>
<string name="resume_on_audio_focus_gain_summary">Continuar reprodução após interrupções (ex. chamadas)</string>
<string name="settings_category_player_title">Reprodutor</string>
<string name="settings_category_player_behavior_title">Comportamento</string>
@ -262,7 +262,7 @@
<string name="controls_download_desc">Transferir ficheiro de emissão</string>
<string name="controls_add_to_playlist_title">Adicionar a</string>
<string name="use_inexact_seek_title">Utilizar pesquisa rápida</string>
<string name="use_inexact_seek_summary">Esta opção permite que a pesquisa seja mais rápida mas diminui a qualidade da precisão</string>
<string name="use_inexact_seek_summary">A busca inexata permite que a busca seja mais rápida diminuindo a precisão. Procurar por 5, 15 ou 25 segundos não funciona com isto.</string>
<string name="download_thumbnail_title">Carregar miniaturas</string>
<string name="download_thumbnail_summary">Desative para parar o carregamento das miniaturas, poupar dados e utilização da memória. As alterações limpam a cache de imagem do disco e da memória.</string>
<string name="thumbnail_cache_wipe_complete_notice">Cache de imagens limpa</string>
@ -335,7 +335,7 @@
\n3. A transferência deveria iniciar (esse é o ficheiro de exportação)</string>
<string name="import_soundcloud_instructions">Importe o seu perfil do SoundCloud digitando o URL ou a sua Id.:
\n
\n1. Ative o modo de PC no navegador da Web (o site não está disponível para dispositivos móveis)
\n1. Ative o modo de PC no navegador da Web (o site não está disponível para aparelhos móveis)
\n2. Aceda a este URL: %1$s
\n3. Inicie a sessão
\n4. Copie o URL do perfil em que foi redirecionado.</string>
@ -343,9 +343,9 @@
<string name="playback_speed_control">Controlos para velocidade de reprodução</string>
<string name="playback_tempo">Ritmo</string>
<string name="clear_views_history_title">Limpar histórico de visualizações</string>
<string name="auto_queue_summary">Auto-aplicar uma emissão relacionada ao reproduzir a último emissão numa fila não repetitiva</string>
<string name="auto_queue_summary">Continuar terminando (sem repetição) a fila de reprodução anexando um fluxo relacionado</string>
<string name="show_hold_to_append_title">Mostrar dica \"Toque longo para colocar na fila\"</string>
<string name="show_hold_to_append_summary">Mostrar dica quando o botão de fundo ou da janela for premido na página de detalhes do vídeo</string>
<string name="show_hold_to_append_summary">Mostrar sugestão quando o botão popup ou ambiente de trabalho é pressionado na página de detalhes do vídeo</string>
<string name="channels">Canais</string>
<string name="playlists">Listas de reprodução</string>
<string name="tracks">Faixas</string>
@ -359,7 +359,7 @@
<string name="search_history_deleted">Histórico de pesquisa eliminado.</string>
<string name="one_item_deleted">1 elemento eliminado.</string>
<string name="toast_no_player">Não existe uma aplicação para reproduzir este ficheiro</string>
<string name="donation_encouragement">NewPipe é desenvolvido por voluntários que utilizam o tempo livre para lhe proporcionar uma melhor experiência. Retribua para ajudar os programadores a tornarem o NewPipe ainda melhor enquanto desfruta de um café.</string>
<string name="donation_encouragement">NewPipe é desenvolvido por voluntários que utilizam o tempo livre deles para proporcionar-lhe a melhor experiência. Retribua para ajudar os programadores a tornarem o NewPipe ainda melhor enquanto desfruta de um café.</string>
<string name="give_back">Retribuir</string>
<string name="privacy_policy_title">Política de privacidade do NewPipe</string>
<string name="privacy_policy_encouragement">O projeto NewPipe leva a sua privacidade muito a sério. Sendo assim, o aplicativo não coleta nenhum dado sem seu consentimento.
@ -378,7 +378,7 @@
<string name="resize_fit">Ajustar</string>
<string name="resize_fill">Preencher</string>
<string name="caption_setting_description">Modificar escala das legendas e o estilo de fundo. Tem que reiniciar a aplicação para aplicar as alterações.</string>
<string name="enable_leak_canary_title">Ativar LeakCanary</string>
<string name="enable_leak_canary_title">LeakCanary</string>
<string name="enable_leak_canary_summary">A monitorização de memória pode tornar a aplicação instável</string>
<string name="enable_disposed_exceptions_title">Reportar os erros fora do ciclo de vida</string>
<string name="enable_disposed_exceptions_summary">Forçar relatórios de exceções de Rx não entregues fora do ciclo de vida de fragmento ou atividade após a eliminação</string>
@ -386,7 +386,7 @@
\n
\nDeseja continuar\?</string>
<string name="playback_pitch">Velocidade</string>
<string name="unhook_checkbox">Dissociar (pode causar distorção)</string>
<string name="unhook_checkbox">Desenganchar (pode causar distorção)</string>
<string name="skip_silence_checkbox">Avanço rápido durante silêncio</string>
<string name="playback_step">Passo</string>
<string name="playback_reset">Repor</string>
@ -414,10 +414,10 @@
<string name="app_update_notification_channel_description">Notificações para uma nova versão do NewPipe</string>
<string name="download_to_sdcard_error_title">Armazenamento externo indisponível</string>
<string name="download_to_sdcard_error_message">Não é possível transferir para o cartão SD. Repor a localização da pasta de transferências\?</string>
<string name="saved_tabs_invalid_json">Erro ao ler os separadores guardados e serão usados os separadores predefinidos</string>
<string name="saved_tabs_invalid_json">Não foi possível ler as guias gravadas, portanto usando as guias predefinidas</string>
<string name="restore_defaults">Restaurar predefinições</string>
<string name="restore_defaults_confirmation">Deseja restaurar as predefinições\?</string>
<string name="subscribers_count_not_available">Número de subscritores não disponível</string>
<string name="subscribers_count_not_available">Contagem de assinantes indisponível</string>
<string name="main_page_content_summary">Quais os separadores que são mostrados na página principal</string>
<string name="selection">Seleção</string>
<string name="updates_setting_title">Atualizações</string>
@ -447,7 +447,7 @@
<string name="error_file_creation">O ficheiro não pode ser criado</string>
<string name="error_path_creation">A pasta de destino não pode ser criada</string>
<string name="error_permission_denied">Permissão negada pelo sistema</string>
<string name="error_ssl_exception">Ligação segura falhou</string>
<string name="error_ssl_exception">Não foi possível estabelecer uma ligação segura</string>
<string name="error_unknown_host">Não foi possível encontrar o servidor</string>
<string name="error_connect_host">Não é possível ligar ao servidor</string>
<string name="error_http_no_content">O servidor não envia dados</string>
@ -463,11 +463,11 @@
<string name="conferences">Conferências</string>
<string name="missions_header_pending">Pendente</string>
<string name="show_comments_title">Mostrar comentários</string>
<string name="show_comments_summary">Desativar para parar de mostrar os comentários</string>
<string name="show_comments_summary">Desativar para ocultar comentários</string>
<string name="autoplay_title">Reprodução automática</string>
<plurals name="comments">
<item quantity="one">Comentário</item>
<item quantity="other">Comentários</item>
<item quantity="one">%s comentário</item>
<item quantity="other">%s comentários</item>
</plurals>
<string name="no_comments">Sem comentários</string>
<string name="error_unable_to_load_comments">Não foi possível carregar os comentários</string>
@ -496,8 +496,8 @@
<string name="downloads_storage_ask_summary_kitkat">Será-lhe solicitado para onde guardar cada transferência.
\nEscolha SAF se pretender transferir para um cartão SD externo</string>
<string name="downloads_storage_use_saf_title">Usar SAF</string>
<string name="downloads_storage_use_saf_summary">A estrutura de acesso ao armazenamento permite transferências para um cartão SD externo.
\nNota: alguns dispositivos não são compatíveis</string>
<string name="downloads_storage_use_saf_summary">O \'Storage Access Framework\' permite transferências para um cartão SD externo.
\nAlguns aparelhos não são compatíveis</string>
<string name="clear_playback_states_title">Eliminar as posições de reprodução</string>
<string name="clear_playback_states_summary">Elimina todas as posições de reprodução</string>
<string name="delete_playback_states_alert">Eliminar todas as posições de reprodução\?</string>
@ -518,7 +518,7 @@
<string name="seek_duration_title">Duração da busca de avanço/retrocesso rápido</string>
<string name="peertube_instance_url_title">Instâncias do PeerTube</string>
<string name="peertube_instance_url_summary">Defina as suas instâncias favoritas de PeerTube</string>
<string name="peertube_instance_url_help">Encontre as instâncias que lhe melhor convêm em %s</string>
<string name="peertube_instance_url_help">Encontre as instâncias que gosta em %s</string>
<string name="peertube_instance_add_title">Adicionar instância</string>
<string name="peertube_instance_add_help">Digite o URL da instância</string>
<string name="peertube_instance_add_fail">Falha ao validar a instância</string>
@ -531,8 +531,8 @@
<string name="recovering">recuperando</string>
<string name="error_download_resource_gone">Não é possível recuperar este descarregamento</string>
<string name="choose_instance_prompt">Escolha uma instância</string>
<string name="enable_lock_screen_video_thumbnail_title">Ativar miniatura do vídeo no ecrã de bloqueio</string>
<string name="enable_lock_screen_video_thumbnail_summary">Ao usar o reprodutor de fundo, uma miniatura de vídeo será exibida no ecrã de bloqueio</string>
<string name="enable_lock_screen_video_thumbnail_title">Miniatura do vídeo no ecrã de bloqueio</string>
<string name="enable_lock_screen_video_thumbnail_summary">Uma miniatura de vídeo é mostrada no ecrã de bloqueio quando utilizando o leitor de fundo</string>
<string name="clear_download_history">Limpar histórico de descarregamentos</string>
<string name="delete_downloaded_files">Apagar ficheiros descarregados</string>
<string name="deleted_downloads">%1$s descarregamentos apagados</string>
@ -541,4 +541,59 @@
<string name="systems_language">Predefinição do sistema</string>
<string name="subtitle_activity_recaptcha">Pressionar \"Aceitar\" quando terminar</string>
<string name="recaptcha_done_button">Aceitar</string>
<string name="feed_use_dedicated_fetch_method_help_text">Acha que o carregamento do feed é muito lento\? Se sim, tente ativar o carregamento rápido (pode alterá-lo nas configurações ou pressionando no botão abaixo).
\n
\nNewPipe oferece duas estratégias de carregamento de alimentação:
\n- Obter todo o canal de subscrição, que é lento, mas completo.
\n- Usando um endpoint de serviço dedicado, que é rápido, mas normalmente não completo.
\n
\nA diferença entre os dois é que o rápido geralmente carece de alguma informação, como a duração ou tipo do item (não consegue distinguir entre vídeos ao vivo e vídeos normais) e pode devolver menos itens.
\n
\nO YouTube é um exemplo de um serviço que oferece este método rápido com o seu feed RSS.
\n
\nAssim, a escolha resume-se ao que prefere: velocidade ou informação precisa.</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Desativar modo rápido</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Ativar o modo rápido</string>
<string name="feed_use_dedicated_fetch_method_summary">Disponível em alguns serviços, é geralmente muito mais rápido, mas pode devolver uma quantidade limitada de itens e muitas vezes informações incompletas (por exemplo, sem duração, tipo de item, sem estado ativo).</string>
<string name="feed_use_dedicated_fetch_method_title">Buscar do feed dedicado quando disponível</string>
<string name="feed_update_threshold_option_always_update">Sempre atualizar</string>
<string name="feed_update_threshold_summary">Tempo após a última atualização antes de uma assinatura ser considerada desatualizada - %s</string>
<string name="feed_update_threshold_title">Limite de atualização do feed</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_create_new_group_button_title">Novo</string>
<string name="feed_group_dialog_delete_message">Quer apagar este grupo\?</string>
<string name="feed_group_dialog_name_input">Nome</string>
<string name="feed_group_dialog_empty_name">O nome do grupo está vazio</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d selecionada</item>
<item quantity="other">%d selecionadas</item>
</plurals>
<string name="feed_group_dialog_empty_selection">Nenhuma assinatura selecionada</string>
<string name="feed_group_dialog_select_subscriptions">Selecione assinaturas</string>
<string name="feed_processing_message">Processando feed…</string>
<string name="feed_notification_loading">Carregando feed…</string>
<string name="feed_subscription_not_loaded_count">Não carregado: %d</string>
<string name="feed_oldest_subscription_update">Atualização da assinatura mais antiga: %s</string>
<string name="feed_groups_header_title">Grupos de feed</string>
<plurals name="days">
<item quantity="one">%d dia</item>
<item quantity="other">%d dias</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d hora</item>
<item quantity="other">%d horas</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d minuto</item>
<item quantity="other">%d minutos</item>
</plurals>
<plurals name="seconds">
<item quantity="one">%d segundo</item>
<item quantity="other">%d segundos</item>
</plurals>
<string name="new_seek_duration_toast">Devido às restrições do ExoPlayer, a duração da procura foi definida para %d segundos</string>
<string name="unmute">Ativar som</string>
<string name="mute">Silenciar</string>
<string name="help">Ajuda</string>
<string name="videos_string">Vídeos</string>
</resources>

View File

@ -556,4 +556,34 @@
<string name="new_seek_duration_toast">Из-за ограничений ExoPlayer точность перемотки составляет %d секунд</string>
<string name="mute">Отключить звук</string>
<string name="unmute">Включить звук</string>
<string name="help">Помощь</string>
<string name="feed_group_dialog_empty_name">Введите имя группы</string>
<plurals name="feed_group_dialog_selection_count">
<item quantity="one">%d выбрана</item>
<item quantity="few">%d выбрано</item>
<item quantity="many">%d выбрано</item>
</plurals>
<string name="feed_group_dialog_select_subscriptions">Выберите подписки</string>
<string name="feed_oldest_subscription_update">Последнее обновление: %s</string>
<plurals name="days">
<item quantity="one">%d день</item>
<item quantity="few">%d дня</item>
<item quantity="many">%d дней</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d час</item>
<item quantity="few">%d часа</item>
<item quantity="many">%d часов</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d минута</item>
<item quantity="few">%d минуты</item>
<item quantity="many">%d минут</item>
</plurals>
<string name="feed_group_dialog_delete_message">Удалить эту группу\?</string>
<string name="feed_group_dialog_name_input">Имя</string>
<string name="feed_subscription_not_loaded_count">Не загружено: %d</string>
<string name="feed_create_new_group_button_title">Создать</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Отключить быстрый режим</string>
<string name="feed_use_dedicated_fetch_method_enable_button">Включить быстрый режим</string>
</resources>

View File

@ -20,11 +20,11 @@
<string name="download_path_summary">Tu sú uložené stiahnuté video súbory</string>
<string name="download_path_dialog_title">Vyberte adresár pre ukladanie video súborov</string>
<string name="download_path_audio_title">Adresár pre stiahnuté audio</string>
<string name="download_path_audio_dialog_title">Vložte cestu kam sa budú ukladať zvukové súbory</string>
<string name="download_path_audio_dialog_title">Vyberte adresár pre ukladanie audio súborov</string>
<string name="download_path_audio_summary">Tu sú uložené stiahnuté audio súbory</string>
<string name="default_resolution_title">Štandardné rozlíšenie</string>
<string name="play_with_kodi_title">Prehrať cez Kodi</string>
<string name="kore_not_found">Aplikácia Kore nie je nainštalovaná. Chcete ju nainštalovať?</string>
<string name="kore_not_found">Nainštalovať chýbajúcu aplikáciu Kore\?</string>
<string name="show_play_with_kodi_title">Zobraziť možnosť \"Prehrať cez Kodi\"</string>
<string name="show_play_with_kodi_summary">Zobrazovať možnosť prehrať video cez multimediálne centrum Kodi</string>
<string name="play_audio">Zvuk</string>
@ -57,7 +57,7 @@
<string name="use_tor_summary">(Experimentálne) Vyžadovať preberanie cez Tor pre väčšie súkromie (streamovanie videa momentálne nie je podporované).</string>
<string name="err_dir_create">Nemožno vytvoriť adresár na preberanie \'%1$s\'</string>
<string name="info_dir_created">Adresár na preberanie bol vytvorený \'%1$s\'</string>
<string name="main_bg_subtitle">Začnite vyhľadaním obsahu</string>
<string name="main_bg_subtitle">Ťuknite na \"Vyhľadávanie\" pre začatie</string>
<string name="autoplay_by_calling_app_title">Automatické prehrávanie</string>
<string name="autoplay_by_calling_app_summary">Prehrá video pri zavolaní NewPipe inou aplikáciou</string>
<string name="content">Obsah</string>
@ -120,7 +120,7 @@
<string name="open_in_popup_mode">Spustiť v okne</string>
<string name="msg_popup_permission">Tieto práva sú potrebné pre
\nprehrávanie v mini okne</string>
<string name="popup_mode_share_menu_title">NewPipe v okne</string>
<string name="popup_mode_share_menu_title">Popup mód</string>
<string name="default_video_format_title">Preferovaný formát videa</string>
<string name="popup_playing_toast">Prehrávanie v mini okne</string>
<string name="disabled">Vypnuté</string>
@ -132,7 +132,7 @@
<string name="filter">Filter</string>
<string name="refresh">Obnoviť</string>
<string name="clear">Vyčistiť</string>
<string name="use_external_video_player_summary">Odoberie audio pri NIEKTORÝCH rozlíšeniach</string>
<string name="use_external_video_player_summary">Odoberie audio pri niektorých rozlíšeniach</string>
<string name="popup_remember_size_pos_title">Zapamätať si veľkosť a pozíciu mini okna</string>
<string name="popup_remember_size_pos_summary">Zapamätať si posledné nastavenie veľkosti a pozície mini okna</string>
<string name="player_gesture_controls_title">Ovládanie prehrávača gestami</string>
@ -540,7 +540,7 @@
<string name="error_download_resource_gone">Sťahovanie nemožno obnoviť</string>
<string name="choose_instance_prompt">Vyberte inštanciu</string>
<string name="enable_lock_screen_video_thumbnail_title">Náhľad videa na uzamknutej obrazovke</string>
<string name="enable_lock_screen_video_thumbnail_summary">Pri videu na pozadí sa na zamknutej obrazovke zobrazí náhľad</string>
<string name="enable_lock_screen_video_thumbnail_summary">Pri prehrávaní videa na pozadí sa na zamknutej obrazovke zobrazí náhľad</string>
<string name="clear_download_history">Vymazať históriu sťahovania</string>
<string name="delete_downloaded_files">Vymazať stiahnuté súbory</string>
<string name="deleted_downloads">%1$s odstránených</string>

View File

@ -18,7 +18,7 @@
<string name="share_dialog_title">แชร์ด้วย</string>
<string name="choose_browser">เลือกบราวเซอร์</string>
<string name="screen_rotation">หมุน</string>
<string name="use_external_video_player_title">ใช้แอปเล่นวีดีโอภายนอก</string>
<string name="use_external_video_player_title">Use external video player</string>
<string name="use_external_audio_player_title">ใช้แอปเล่นเสียงภายนอก</string>
<string name="popup_mode_share_menu_title">NewPipe โหมดป๊อปอัพ</string>
<string name="subscribe_button_title">ติดตาม</string>
@ -433,7 +433,7 @@
<string name="pause_downloads_on_mobile">หยุดชั่วคราวเมื่อเปลี่ยนเป็นข้อมูลมือถือ</string>
<string name="pause_downloads_on_mobile_desc">การดาวน์โหลดที่ไม่สามารถหยุดพักได้จะเริ่มต้นใหม่</string>
<string name="close">ปิด</string>
<string name="use_external_video_player_summary">บางความละเอียดอาจไม่มีเสียง</string>
<string name="use_external_video_player_summary">Removes audio at some resolutions</string>
<string name="metadata_cache_wipe_complete_notice">แคช metadate ถูกลบแล้ว</string>
<string name="resume_on_audio_focus_gain_title">เล่นต่อหลังจากการขัดจังหวะ</string>
<string name="enable_playback_resume_title">เล่นต่อ</string>

View File

@ -551,7 +551,7 @@
<plurals name="days">
<item quantity="other">%d 天</item>
</plurals>
<string name="feed_groups_header_title">Feed 群組</string>
<string name="feed_groups_header_title">頻道群組</string>
<string name="feed_oldest_subscription_update">最舊訂閱更新:%s</string>
<string name="feed_subscription_not_loaded_count">未載入:%d</string>
<string name="feed_notification_loading">正在載入 feed……</string>

View File

@ -44,7 +44,7 @@
<color name="black_border_color">#25FFFFFF</color>
<!-- Miscellaneous -->
<color name="drawer_header_font_color">#ddffffff</color>
<color name="drawer_header_font_color">#F2FFFFFF</color>
<color name="duration_background_color">#aa000000</color>
<color name="live_duration_background_color">#c8E53935</color>
<color name="playlist_stream_count_background_color">#e6000000</color>

View File

@ -1,5 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Menu Drawer Dimensions -->
<dimen name="drawer_header_content_min_height">120dp</dimen>
<dimen name="drawer_header_padding_top">16dp</dimen>
<dimen name="drawer_header_newpipe_icon_size">48dp</dimen>
<dimen name="drawer_header_newpipe_icon_title_space">12dp</dimen>
<dimen name="drawer_header_newpipe_title_min_width">120dp</dimen>
<dimen name="drawer_header_newpipe_title_max_width">220dp</dimen>
<dimen name="drawer_header_newpipe_title_min_text_size">18sp</dimen>
<dimen name="drawer_header_newpipe_title_max_text_size">32sp</dimen>
<dimen name="drawer_header_service_icon_size">16dp</dimen>
<dimen name="drawer_header_service_title_text_size">14sp</dimen>
<!-- Video Item Search View Dimensions-->
<!-- Text Size -->
<dimen name="channel_item_detail_title_text_size">16sp</dimen>

View File

@ -599,25 +599,21 @@
<item quantity="one">%d second</item>
<item quantity="other">%d seconds</item>
</plurals>
<plurals name="minutes">
<item quantity="one">%d minute</item>
<item quantity="other">%d minutes</item>
</plurals>
<plurals name="hours">
<item quantity="one">%d hour</item>
<item quantity="other">%d hours</item>
</plurals>
<plurals name="days">
<item quantity="one">%d day</item>
<item quantity="other">%d days</item>
</plurals>
<!-- Feed -->
<string name="fragment_feed_title">What\'s New</string>
<string name="feed_groups_header_title">Feed groups</string>
<string name="feed_groups_header_title">Channel groups</string>
<string name="feed_oldest_subscription_update">Oldest subscription update: %s</string>
<string name="feed_subscription_not_loaded_count">Not loaded: %d</string>
<string name="feed_notification_loading">Loading feed…</string>
@ -632,7 +628,6 @@
<string name="feed_group_dialog_name_input">Name</string>
<string name="feed_group_dialog_delete_message">Do you want to delete this group?</string>
<string name="feed_create_new_group_button_title">New</string>
<string name="settings_category_feed_title">Feed</string>
<string name="feed_update_threshold_title">Feed update threshold</string>
<string name="feed_update_threshold_summary">Time after last update before a subscription is considered outdated — %s</string>

View File

@ -330,9 +330,5 @@
<item name="android:windowAnimationStyle">@null</item>
</style>
<style name="NavViewTextStyle">
<item name="android:ellipsize">end</item>
</style>
<style name="VideoPlayerTheme" />
</resources>

View File

@ -0,0 +1 @@
Fixed database migration which prevented NewPipe from starting in some rare cases.