videoStreamsList = new ArrayList<>(ListHelper.getSortedStreamVideosList(context, info.getVideoStreams(), null, false));
+ int index = ListHelper.getDefaultResolutionIndex(context, videoStreamsList);
+
+ if (index == -1) {
+ Toast.makeText(context, R.string.video_streams_empty, Toast.LENGTH_SHORT).show();
+ return;
+ }
+
+ VideoStream videoStream = videoStreamsList.get(index);
+ playOnExternalPlayer(context, info.getName(), info.getUploaderName(), videoStream);
+ }
+
+ public static void playOnExternalPlayer(Context context, String name, String artist, Stream stream) {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setDataAndType(Uri.parse(stream.getUrl()), stream.getFormat().getMimeType());
+ intent.putExtra(Intent.EXTRA_TITLE, name);
+ intent.putExtra("title", name);
+ intent.putExtra("artist", artist);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ resolveActivityOrAskToInstall(context, intent);
+ }
+
+ public static void resolveActivityOrAskToInstall(Context context, Intent intent) {
+ if (intent.resolveActivity(context.getPackageManager()) != null) {
+ context.startActivity(intent);
+ } else {
+ if (context instanceof Activity) {
+ new AlertDialog.Builder(context)
+ .setMessage(R.string.no_player_found)
+ .setPositiveButton(R.string.install, (dialog, which) -> {
+ Intent i = new Intent();
+ i.setAction(Intent.ACTION_VIEW);
+ i.setData(Uri.parse(context.getString(R.string.fdroid_vlc_url)));
+ context.startActivity(i);
+ })
+ .setNegativeButton(R.string.cancel, (dialog, which) -> Log.i("NavigationHelper", "You unlocked a secret unicorn."))
+ .show();
+ //Log.e("NavigationHelper", "Either no Streaming player for audio was installed, or something important crashed:");
+ } else {
+ Toast.makeText(context, R.string.no_player_found_toast, Toast.LENGTH_LONG).show();
+ }
+ }
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Through FragmentManager
//////////////////////////////////////////////////////////////////////////*/
@@ -136,11 +245,21 @@ public class NavigationHelper {
.commit();
}
+ public static boolean tryGotoSearchFragment(FragmentManager fragmentManager) {
+ if (MainActivity.DEBUG) {
+ for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) {
+ Log.d("NavigationHelper", "tryGoToSearchFragment() [" + i + "] = [" + fragmentManager.getBackStackEntryAt(i) + "]");
+ }
+ }
+
+ return fragmentManager.popBackStackImmediate(SEARCH_FRAGMENT_TAG, 0);
+ }
+
public static void openSearchFragment(FragmentManager fragmentManager, int serviceId, String query) {
fragmentManager.beginTransaction()
.setCustomAnimations(R.animator.custom_fade_in, R.animator.custom_fade_out, R.animator.custom_fade_in, R.animator.custom_fade_out)
.replace(R.id.fragment_holder, SearchFragment.getInstance(serviceId, query))
- .addToBackStack(null)
+ .addToBackStack(SEARCH_FRAGMENT_TAG)
.commit();
}
@@ -287,19 +406,6 @@ public class NavigationHelper {
// Link handling
//////////////////////////////////////////////////////////////////////////*/
- public static boolean openByLink(Context context, String url) {
- Intent intentByLink;
- try {
- intentByLink = getIntentByLink(context, url);
- } catch (ExtractionException e) {
- return false;
- }
- intentByLink.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intentByLink.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
- context.startActivity(intentByLink);
- return true;
- }
-
private static Intent getOpenIntent(Context context, String url, int serviceId, StreamingService.LinkType type) {
Intent mIntent = new Intent(context, MainActivity.class);
mIntent.putExtra(Constants.KEY_SERVICE_ID, serviceId);
@@ -317,15 +423,14 @@ public class NavigationHelper {
throw new ExtractionException("Service not supported at the moment");
}
- int serviceId = service.getServiceId();
StreamingService.LinkType linkType = service.getLinkTypeByUrl(url);
if (linkType == StreamingService.LinkType.NONE) {
- throw new ExtractionException("Url not known to service. service=" + serviceId + " url=" + url);
+ throw new ExtractionException("Url not known to service. service=" + service + " url=" + url);
}
url = getCleanUrl(service, url, linkType);
- Intent rIntent = getOpenIntent(context, url, serviceId, linkType);
+ Intent rIntent = getOpenIntent(context, url, service.getServiceId(), linkType);
switch (linkType) {
case STREAM:
@@ -337,7 +442,7 @@ public class NavigationHelper {
return rIntent;
}
- private static String getCleanUrl(StreamingService service, String dirtyUrl, StreamingService.LinkType linkType) throws ExtractionException {
+ public static String getCleanUrl(StreamingService service, String dirtyUrl, StreamingService.LinkType linkType) throws ExtractionException {
switch (linkType) {
case STREAM:
return service.getStreamUrlIdHandler().cleanUrl(dirtyUrl);
@@ -351,7 +456,6 @@ public class NavigationHelper {
return null;
}
-
private static Uri openMarketUrl(String packageName) {
return Uri.parse("market://details")
.buildUpon()
diff --git a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java
index 7cf804401..a33348934 100644
--- a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java
@@ -20,7 +20,6 @@ import org.schabi.newpipe.R;
public class PermissionHelper {
public static final int PERMISSION_WRITE_STORAGE = 778;
public static final int PERMISSION_READ_STORAGE = 777;
- public static final int PERMISSION_SYSTEM_ALERT_WINDOW = 779;
public static boolean checkStoragePermissions(Activity activity) {
@@ -80,27 +79,25 @@ public class PermissionHelper {
* In order to be able to draw over other apps, the permission android.permission.SYSTEM_ALERT_WINDOW have to be granted.
*
* On < API 23 (MarshMallow) the permission was granted when the user installed the application (via AndroidManifest),
- * on > 23, however, it have to start a activity asking the user if he agree.
+ * on > 23, however, it have to start a activity asking the user if he agrees.
*
- * This method just return if canDraw over other apps, if it doesn't, try to get the permission,
- * it does not get the result of the startActivityForResult, if the user accept, the next time that he tries to open
- * it will return true.
+ * This method just return if the app has permission to draw over other apps, and if it doesn't, it will try to get the permission.
*
- * @param activity context to startActivityForResult
* @return returns {@link Settings#canDrawOverlays(Context)}
**/
@RequiresApi(api = Build.VERSION_CODES.M)
- public static boolean checkSystemAlertWindowPermission(Activity activity) {
- if (!Settings.canDrawOverlays(activity)) {
- Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + activity.getPackageName()));
- activity.startActivityForResult(i, PERMISSION_SYSTEM_ALERT_WINDOW);
+ public static boolean checkSystemAlertWindowPermission(Context context) {
+ if (!Settings.canDrawOverlays(context)) {
+ Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + context.getPackageName()));
+ i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(i);
return false;
}else return true;
}
- public static boolean isPopupEnabled(Activity activity) {
+ public static boolean isPopupEnabled(Context context) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M ||
- PermissionHelper.checkSystemAlertWindowPermission(activity);
+ PermissionHelper.checkSystemAlertWindowPermission(context);
}
public static void showPopupEnablementToast(Context context) {
diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java
new file mode 100644
index 000000000..ce1491ba4
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java
@@ -0,0 +1,67 @@
+package org.schabi.newpipe.util;
+
+import android.content.Context;
+import android.preference.PreferenceManager;
+import android.support.annotation.DrawableRes;
+
+import org.schabi.newpipe.BuildConfig;
+import org.schabi.newpipe.R;
+import org.schabi.newpipe.extractor.NewPipe;
+import org.schabi.newpipe.extractor.ServiceList;
+import org.schabi.newpipe.extractor.StreamingService;
+import org.schabi.newpipe.extractor.exceptions.ExtractionException;
+
+public class ServiceHelper {
+ private static final StreamingService DEFAULT_FALLBACK_SERVICE = ServiceList.YouTube.getService();
+
+ @DrawableRes
+ public static int getIcon(int serviceId) {
+ switch (serviceId) {
+ case 0:
+ return R.drawable.place_holder_youtube;
+ case 1:
+ return R.drawable.place_holder_circle;
+ default:
+ return R.drawable.service;
+ }
+ }
+
+ public static int getSelectedServiceId(Context context) {
+ if (BuildConfig.BUILD_TYPE.equals("release")) return DEFAULT_FALLBACK_SERVICE.getServiceId();
+
+ final String serviceName = PreferenceManager.getDefaultSharedPreferences(context)
+ .getString(context.getString(R.string.current_service_key), context.getString(R.string.default_service_value));
+
+ int serviceId;
+ try {
+ serviceId = NewPipe.getService(serviceName).getServiceId();
+ } catch (ExtractionException e) {
+ serviceId = DEFAULT_FALLBACK_SERVICE.getServiceId();
+ }
+
+ return serviceId;
+ }
+
+ public static void setSelectedServiceId(Context context, int serviceId) {
+ String serviceName;
+ try {
+ serviceName = NewPipe.getService(serviceId).getServiceInfo().name;
+ } catch (ExtractionException e) {
+ serviceName = DEFAULT_FALLBACK_SERVICE.getServiceInfo().name;
+ }
+
+ setSelectedServicePreferences(context, serviceName);
+ }
+
+ public static void setSelectedServiceId(Context context, String serviceName) {
+ int serviceId = NewPipe.getIdOfService(serviceName);
+ if (serviceId == -1) serviceName = DEFAULT_FALLBACK_SERVICE.getServiceInfo().name;
+
+ setSelectedServicePreferences(context, serviceName);
+ }
+
+ private static void setSelectedServicePreferences(Context context, String serviceName) {
+ PreferenceManager.getDefaultSharedPreferences(context).edit().
+ putString(context.getString(R.string.current_service_key), serviceName).apply();
+ }
+}
diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceIconMapper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceIconMapper.java
deleted file mode 100644
index 060013dd2..000000000
--- a/app/src/main/java/org/schabi/newpipe/util/ServiceIconMapper.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.schabi.newpipe.util;
-
-import org.schabi.newpipe.R;
-import org.schabi.newpipe.extractor.NewPipe;
-
-/**
- * Created by Chrsitian Schabesberger on 09.10.17.
- * ServiceIconMapper.java is part of NewPipe.
- *
- * NewPipe is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * NewPipe is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with NewPipe. If not, see .
- */
-
-public class ServiceIconMapper {
- public static int getIconResource(int service_id) {
- switch(service_id) {
- case 0:
- return R.drawable.youtube;
- case 1:
- return R.drawable.soud_cloud;
- default:
- return R.drawable.service;
- }
- }
-}
diff --git a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java
index 6fdf035f4..b0e00465a 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java
@@ -1,29 +1,38 @@
package org.schabi.newpipe.util;
import android.content.Context;
+import android.content.res.TypedArray;
import android.preference.PreferenceManager;
+import android.support.annotation.AttrRes;
+import android.support.annotation.StyleRes;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.extractor.NewPipe;
+import org.schabi.newpipe.extractor.StreamingService;
+import org.schabi.newpipe.extractor.exceptions.ExtractionException;
public class ThemeHelper {
/**
* Apply the selected theme (on NewPipe settings) in the context
+ * with the default style (see {@link #setTheme(Context, int)}).
*
* @param context context that the theme will be applied
*/
public static void setTheme(Context context) {
- String lightTheme = context.getResources().getString(R.string.light_theme_key);
- String darkTheme = context.getResources().getString(R.string.dark_theme_key);
- String blackTheme = context.getResources().getString(R.string.black_theme_key);
+ setTheme(context, -1);
+ }
- String selectedTheme = getSelectedTheme(context);
-
- if (selectedTheme.equals(lightTheme)) context.setTheme(R.style.LightTheme);
- else if (selectedTheme.equals(blackTheme)) context.setTheme(R.style.BlackTheme);
- else if (selectedTheme.equals(darkTheme)) context.setTheme(R.style.DarkTheme);
- // Fallback
- else context.setTheme(R.style.DarkTheme);
+ /**
+ * Apply the selected theme (on NewPipe settings) in the context,
+ * themed according with the styles defined for the service .
+ *
+ * @param context context that the theme will be applied
+ * @param serviceId the theme will be styled to the service with this id,
+ * pass -1 to get the default style
+ */
+ public static void setTheme(Context context, int serviceId) {
+ context.setTheme(getThemeForService(context, serviceId));
}
/**
@@ -35,9 +44,73 @@ public class ThemeHelper {
return getSelectedTheme(context).equals(context.getResources().getString(R.string.light_theme_key));
}
+ @StyleRes
+ public static int getThemeForService(Context context, int serviceId) {
+ String lightTheme = context.getResources().getString(R.string.light_theme_key);
+ String darkTheme = context.getResources().getString(R.string.dark_theme_key);
+ String blackTheme = context.getResources().getString(R.string.black_theme_key);
+
+ String selectedTheme = getSelectedTheme(context);
+
+ int defaultTheme = R.style.DarkTheme;
+ if (selectedTheme.equals(lightTheme)) defaultTheme = R.style.LightTheme;
+ else if (selectedTheme.equals(blackTheme)) defaultTheme = R.style.BlackTheme;
+ else if (selectedTheme.equals(darkTheme)) defaultTheme = R.style.DarkTheme;
+
+ if (serviceId <= -1) {
+ return defaultTheme;
+ }
+
+ final StreamingService service;
+ try {
+ service = NewPipe.getService(serviceId);
+ } catch (ExtractionException ignored) {
+ return defaultTheme;
+ }
+
+ String themeName = "DarkTheme";
+ if (selectedTheme.equals(lightTheme)) themeName = "LightTheme";
+ else if (selectedTheme.equals(blackTheme)) themeName = "BlackTheme";
+ else if (selectedTheme.equals(darkTheme)) themeName = "DarkTheme";
+
+ themeName += "." + service.getServiceInfo().name;
+ int resourceId = context.getResources().getIdentifier(themeName, "style", context.getPackageName());
+
+ if (resourceId > 0) {
+ return resourceId;
+ }
+
+ return defaultTheme;
+ }
+
public static String getSelectedTheme(Context context) {
String themeKey = context.getString(R.string.theme_key);
String defaultTheme = context.getResources().getString(R.string.default_theme_value);
return PreferenceManager.getDefaultSharedPreferences(context).getString(themeKey, defaultTheme);
}
+
+ @StyleRes
+ public static int getSettingsThemeStyle(Context context) {
+ String lightTheme = context.getResources().getString(R.string.light_theme_key);
+ String darkTheme = context.getResources().getString(R.string.dark_theme_key);
+ String blackTheme = context.getResources().getString(R.string.black_theme_key);
+
+ String selectedTheme = getSelectedTheme(context);
+
+ if (selectedTheme.equals(lightTheme)) return R.style.LightSettingsTheme;
+ else if (selectedTheme.equals(blackTheme)) return R.style.BlackSettingsTheme;
+ else if (selectedTheme.equals(darkTheme)) return R.style.DarkSettingsTheme;
+ // Fallback
+ else return R.style.DarkSettingsTheme;
+ }
+
+ /**
+ * Get a resource id from a resource styled according to the the context's theme.
+ */
+ public static int resolveResourceIdFromAttr(Context context, @AttrRes int attr) {
+ TypedArray a = context.getTheme().obtainStyledAttributes(new int[]{attr});
+ int attributeResourceId = a.getResourceId(0, 0);
+ a.recycle();
+ return attributeResourceId;
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/ZipHelper.java b/app/src/main/java/org/schabi/newpipe/util/ZipHelper.java
new file mode 100644
index 000000000..c3cf3f815
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/util/ZipHelper.java
@@ -0,0 +1,94 @@
+package org.schabi.newpipe.util;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+/**
+ * Created by Christian Schabesberger on 28.01.18.
+ * Copyright 2018 Christian Schabesberger
+ * ZipHelper.java is part of NewPipe
+ *
+ * License: GPL-3.0+
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+public class ZipHelper {
+
+ private static final int BUFFER_SIZE = 2048;
+
+ /**
+ * This function helps to create zip files.
+ * Caution this will override the original file.
+ * @param outZip The ZipOutputStream where the data should be stored in
+ * @param file The path of the file that should be added to zip.
+ * @param name The path of the file inside the zip.
+ * @throws Exception
+ */
+ public static void addFileToZip(ZipOutputStream outZip, String file, String name) throws Exception {
+ byte data[] = new byte[BUFFER_SIZE];
+ FileInputStream fi = new FileInputStream(file);
+ BufferedInputStream inputStream = new BufferedInputStream(fi, BUFFER_SIZE);
+ ZipEntry entry = new ZipEntry(name);
+ outZip.putNextEntry(entry);
+ int count;
+ while((count = inputStream.read(data, 0, BUFFER_SIZE)) != -1) {
+ outZip.write(data, 0, count);
+ }
+ inputStream.close();
+ }
+
+ /**
+ * This will extract data from Zipfiles.
+ * Caution this will override the original file.
+ * @param inZip The ZipOutputStream where the data is stored in
+ * @param file The path of the file on the disk where the data should be extracted to.
+ * @param name The path of the file inside the zip.
+ * @return will return true if the file was found within the zip file
+ * @throws Exception
+ */
+ public static boolean extractFileFromZip(ZipInputStream inZip, String file, String name) throws Exception {
+ byte data[] = new byte[BUFFER_SIZE];
+
+ boolean found = false;
+
+ ZipEntry ze;
+ while((ze = inZip.getNextEntry()) != null) {
+ if(ze.getName().equals(name)) {
+ found = true;
+ // delete old file first
+ File oldFile = new File(file);
+ if(oldFile.exists()) {
+ if(!oldFile.delete()) {
+ throw new Exception("Could not delete " + file);
+ }
+ }
+
+ FileOutputStream outFile = new FileOutputStream(file);
+ int count = 0;
+ while((count = inZip.read(data)) != -1) {
+ outFile.write(data, 0, count);
+ }
+
+ outFile.close();
+ inZip.closeEntry();
+ }
+ }
+ return true;
+ }
+}
diff --git a/app/src/main/res/anim/switch_service_in.xml b/app/src/main/res/anim/switch_service_in.xml
new file mode 100644
index 000000000..a49d1daba
--- /dev/null
+++ b/app/src/main/res/anim/switch_service_in.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/app/src/main/res/anim/switch_service_out.xml b/app/src/main/res/anim/switch_service_out.xml
new file mode 100644
index 000000000..635d1630e
--- /dev/null
+++ b/app/src/main/res/anim/switch_service_out.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable-hdpi/ic_play_arrow_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_play_arrow_black_24dp.png
new file mode 100644
index 000000000..e9c288c99
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_play_arrow_black_24dp.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 000000000..57c9fa546
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_play_arrow_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_play_arrow_black_24dp.png
new file mode 100644
index 000000000..d78c57bad
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_play_arrow_black_24dp.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 000000000..c61e948bb
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png differ
diff --git a/app/src/main/res/drawable-nodpi/place_holder_circle.png b/app/src/main/res/drawable-nodpi/place_holder_circle.png
new file mode 100644
index 000000000..704729e8f
Binary files /dev/null and b/app/src/main/res/drawable-nodpi/place_holder_circle.png differ
diff --git a/app/src/main/res/drawable-nodpi/place_holder_youtube.png b/app/src/main/res/drawable-nodpi/place_holder_youtube.png
new file mode 100644
index 000000000..c4113e005
Binary files /dev/null and b/app/src/main/res/drawable-nodpi/place_holder_youtube.png differ
diff --git a/app/src/main/res/drawable-nodpi/soud_cloud.png b/app/src/main/res/drawable-nodpi/soundcloud.png
similarity index 100%
rename from app/src/main/res/drawable-nodpi/soud_cloud.png
rename to app/src/main/res/drawable-nodpi/soundcloud.png
diff --git a/app/src/main/res/drawable-xhdpi/ic_play_arrow_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_play_arrow_black_24dp.png
new file mode 100644
index 000000000..f208795fc
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_play_arrow_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 000000000..a3c80e73d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_arrow_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_arrow_black_24dp.png
new file mode 100644
index 000000000..5345ee3c4
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_play_arrow_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 000000000..547ef30aa
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_black_24dp.png
new file mode 100644
index 000000000..d12d49562
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_black_24dp.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png
new file mode 100644
index 000000000..be5c062b5
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png differ
diff --git a/app/src/main/res/drawable/dark_checked_selector.xml b/app/src/main/res/drawable/dark_checked_selector.xml
new file mode 100644
index 000000000..59019470f
--- /dev/null
+++ b/app/src/main/res/drawable/dark_checked_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/light_checked_selector.xml b/app/src/main/res/drawable/light_checked_selector.xml
new file mode 100644
index 000000000..b782a3688
--- /dev/null
+++ b/app/src/main/res/drawable/light_checked_selector.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index b1dd3e20b..abbe69ff7 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -11,7 +11,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
- android:background="@color/dark_youtube_primary_color"
+ android:background="?attr/colorPrimary"
app:tabGravity="fill"/>
+
diff --git a/app/src/main/res/layout/preferred_player_dialog_view.xml b/app/src/main/res/layout/preferred_player_dialog_view.xml
new file mode 100644
index 000000000..83e1031a5
--- /dev/null
+++ b/app/src/main/res/layout/preferred_player_dialog_view.xml
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/drawer_items.xml b/app/src/main/res/menu/drawer_items.xml
index 2f82327c3..ae4598edd 100644
--- a/app/src/main/res/menu/drawer_items.xml
+++ b/app/src/main/res/menu/drawer_items.xml
@@ -1,5 +1,14 @@
\ No newline at end of file
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 6508052a7..24edb6043 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -176,13 +176,13 @@
صفر لا تقم با الإختيار (في بعض اللغات) لأنها ليست \"حالة خاصة\" للأندرويد
- - صفر
- - واحد
- - اثنان
- - قليل
- - كثير
- - أخرى
-
+ - صفر
+ - %s مشترك
+ - اثنان
+ - قليل
+ - كثير
+ - %s مشتركون
+
لاتوجد مشاهدات
لاتوجد فديوهات
@@ -226,13 +226,13 @@
التراخيص
واجهة أمامية لليوتوب مجانية مفتوحة المصدر و خفيفة الوزن لنظام التشغيل أندرويد.
ساهم
- إذا كان لديك أفكار؛ او ترجمة، او تغييرات على التصميم، او تنظيف وتحسين الكود البرمجي ، أو تغييرات ثقيلة على الكود البرمجي، مساعدتك دائما موضع ترحيب. وكلما تم ذلك كلما كان ذلك أفضل!
+ إذا كانت لديك أفكار؛ أو ترجمة، أو تغييرات تخص التصميم، أو تنظيف و تحسين الشفرة البرمجية ، أو تعديلات عميقة عليها، فتذكر أنّ مساعدتك دائما موضع ترحيب. وكلما أتممنا شيئا كلما كان ذلك أفضل !
عرض على GitHub
تبرع
يتم تطوير NewPipe من قبل المتطوعين الذين يقضون وقت فراغهم لتقديم أفضل تجربة لك. الآن حان الوقت لإعطاء مرة أخرى للتأكد من المطورين لدينا يمكن أن تجعل NewPipe أكثر و أفضل بينما نتمتع بكوب من جافا!
تبرع
الموقع
- للحصول على مزيد من المعلومات وآخر الأخبار حول NewPipe الرجاء زيارة موقعنا على الانترنت.
+ للحصول على مزيد من المعلومات و آخر الأخبار حول NewPipe الرجاء زيارة موقعنا على الانترنت.
تراخيص NewPipe
قراءة الترخيص
@@ -266,20 +266,20 @@
اضغط للإدراج بقائمة الانتظار
- صفر
- - واحد
+ - %s مشاهدة
- اثنان
- قليل
- كثير
- - أخرى
+ - %s مشاهدات
- صفر
- - واحد
+ - %s فيديو
- اثنان
- قليل
- كثير
- - أخرى
+ - %s فيديوهات
إعادة طلب كلمة التحقق
@@ -292,4 +292,18 @@
إدراج بقائمة الانتظار على خلفية
إدراج بقائمة الانتظار على المنبثقة
ابدأ هنا على خلفية المصدر
-
+المحتوى الإفتراضي حسب البلد
+ تغيير الإتجاه
+ الإنتقال إلى الخلفية
+ الإنتقال إلى نافذة منبثقة
+ التحول إلى الرئيسية
+
+ الخدمة
+ فتح الدرج
+ إغلاق الدرج
+ دائمًا
+ مرة واحدة فقط
+
+ العنوان خاطئ
+ \@string/preferred_player_settings_title
+
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 961a6fa47..b4c6c5845 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -172,7 +172,7 @@ otevření ve vyskakovacím okně
Zobrazovat návrhy při vyhledávání
Historie vyhledávání
Hledané výrazy lokálně uchovávat
- Historie
+ Historie sledování
Evidovat zhlédnutá videa
Přehrávat po přechodu do popředí
Pokračovat v přehrávání po přerušení (např. hovor)
@@ -298,4 +298,13 @@ otevření ve vyskakovacím okně
Daruj
Webová stránka
Pro další informace a poslední novinky o NewPipe navštivte naši stránku.
+ Země výchozího obsahu
+ Služba
+ Změna orientaci
+ Na pozadí
+ Do okna
+ Přepnout na hlavní
+
+ Otevřít Drawer
+ Zavřít Drawer
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 283dd1d3a..6c13ca985 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -285,9 +285,9 @@
Kiosk
Tipp anzeigen, wenn der Hintergrundwiedergabe- oder Pop-up-Button auf der Videodetailseite gedrückt gehalten wird
In der Warteschlange der Hintergrundwiedergabe
- Neu und brandheiß
+ Neu & Heiß
Halten zum Hinzufügen zur Warteschleife
-‚Gedrückt halten, um Tipp hinzuzufügen‘ anzeigen
+\"Gedrückt halten, um Tipp hinzuzufügen\" anzeigen
[Unbekannt]
In Warteschlange für Hintergrundwiedergabe
@@ -300,4 +300,32 @@
Website
Um mehr Informationen und die aktuellsten Nachrichten über NewPipe zu bekommen, besuche unsere Website.
NewPipe wird von Freiwilligen entwickelt, die ihre Freizeit damit verbringen, dir das beste Erlebnis zu bieten. Jetzt ist es an der Zeit, etwas zurückzugeben, um sicherzustellen, dass unsere Entwickler NewPipe noch besser machen können, während sie eine Tasse Java genießen!
-
+ Service
+ Kein Streamplayer gefunden (Du kannst VLC installieren, um ihn abzuspielen)
+ Standard-Land des Inhalts
+ Immer
+ Nur einmal
+
+ Ausrichtung umschalten
+ In den Hintergrund wechseln
+ Zu Popup wechseln
+ Zur Hauptseite wechseln
+
+ Externe Player unterstützen diese Art von Links nicht
+ Ungültige URL
+ Keine Video-Streams gefunden
+ Keine Audio-Streams gefunden
+
+ Navigationsleiste öffnen
+ Navigationsleiste schließen
+ Mit bevorzugtem Player öffnen
+ Bevorzugter Player
+
+ Video-Player
+ Hintergrund-Player
+ Popup-Player
+ Immer fragen
+
+ Informationen werden abgerufen…
+ Der angeforderte Inhalt wird geladen
+
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 35847fdb3..af9ca97b3 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -59,7 +59,7 @@
No se pudo descifrar la URL del vídeo
No se pudo analizar el sitio web
Mostrar vídeos siguientes y similares
- Idioma por defecto del contenido
+ Idioma del contenido por defecto
Vista previa del vídeo
Vista previa del vídeo
Me gusta
@@ -284,7 +284,7 @@ abrir en modo popup
Reproductor de fondo
Reproductor popup
- Remover
+ Quitar
Detalles
Ajustes de audio
[Desconocido]
@@ -294,9 +294,9 @@ abrir en modo popup
Comenzar a reproducir aquí
Comenzar aquí en segundo plano
Comenzar aquí en popup
-Desplegar consejo \"Mantener para poner en la fila\"
+Mostrar consejo \"Mantener para poner en la cola\"
Nuevo y popular
- Mantener para poner en la fila
+ Mantener para poner en la cola
Donar
NewPipe es desarrollado por voluntarios que emplean su tiempo libre en mejorar tu experiencia. ¡ Ahora puedes devolver el favor para asegurar que los desarrolladores puedan crear un NewPipe aún mejor mientras saborean una taza de Java !
Donar
@@ -308,4 +308,27 @@ abrir en modo popup
Cambiar a popup
Cambiar a principal
-
+ Servicio
+ Abrir cajón
+ Cerrar cajón
+ No se ha encontrado ningún reproductor de streaming (puede instalar VLC para reproducirlo)
+ Siempre
+ Sólo una vez
+
+ Los reproductores externos no soportan este tipo de enlaces
+ URL no válida
+ No se encontraron transmisiones de vídeo
+ No se encontraron transmisiones de audio
+
+ \@string/preferred_player_settings_title
+ Abrir con el reproductor preferido
+ Reproductor preferido
+
+ Reproductor de vídeo
+ Reproductor de fondo
+ Reproductor de popup
+ Preguntar siempre
+
+ Obteniendo información…
+ El contenido solicitado se está cargando
+
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 11f0ec40c..29ee0a755 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -139,7 +139,7 @@
Hasi
Pausatu
- Ikusi
+ Jo
Ezabatu
Egiaztaketa-batura
@@ -179,7 +179,7 @@
NewPipe Lizentzia
Ideiak, itzulpenak, diseinu aldaketak, kode garbiketak, kode aldaketa sakonak badituzu, laguntza beti da ongi etorria. Eginaz hobetzen da!
Irakurri lizentzia
- Parte hartzea
+ Hartu parte
Harpidetu
Harpidetuta
Kanaletik harpidetza kenduta
@@ -244,4 +244,77 @@
Historiala hutsik dago
Historiala garbitu da
Elementua ezabatuta
+Erakutsi \"Mantendu eransteko\" aholkua
+ Erakutsi aholkua bigarren planoko eta laster-leihoko botoia sakatzean bideoaren xehetasunen orrian
+ Lehenetsitako edukiaren herrialdea
+ Zerbitzua
+ Bigarren planoko erreproduzigailuaren ilaran
+ Laster-leiho erreproduzigailuaren ilaran
+ Jo denak
+
+ [Ezezaguna]
+
+ Txandakatu orientazioa
+ Aldatu bigarren planora
+ Aldatu laster-leihora
+ Aldatu nagusira
+
+ Huts egin du jario hau erreproduzitzean
+ Erreproduzigailuaren errore berreskuraezina gertatu da
+ Erreproduzigailuaren erroretik berreskuratzen
+
+ Dohaintza
+ NewPipe bere denbora librea zuri esperientziarik onena ekartzeko ematen duten boluntarioek garatzen dute. Orain zerbait atzera emateko unea da, garatzaileek NewPipe hobetu ahal izan dezaten Javako kafe bat hartzen duten bitartean!
+ Egin dohaintza
+ Webgunea
+ NewPipe aplikazioari buruzko informazio gehiago eta azken berriak jasotzeko bisitatu gure webgunea.
+ Elementu hau bilaketen historialetik ezabatu nahi duzu?
+
+ Orri nagusiko edukia
+ Orri hutsa
+ Kioskoaren orria
+ Harpidetza orria
+ Jario-orria
+ Kanal-orria
+ Hautatu kanal bat
+ Ez zara inolako kanalera harpidetu oraindik
+ Hautatu kiosko bat
+
+ Kioskoa
+ Joerak
+ Lehen 50ak
+ Berria eta arrakastatsua
+ Bigarren planoko erreproduzigailua
+ Laster-leiho erreproduzigailua
+ Kendu
+ Xehetasunak
+ Audio ezarpenak
+ Mantendu ilaran jartzeko
+ Jarri ilaran bigarren planoan
+ Jarri ilaran laster-leihoan
+ Hasi hemen erreproduzitzen
+ Hasi hemen bigarren planoan
+ Hasi hemen laster-leihoan
+
+ "Ireki tiradera "
+ Itxi tiradera
+ Ez da jarioen erreproduzigailurik aurkitu (VLC instalatu dezakezu)
+ Beti
+ Behin besterik ez
+
+ Kanpo erreproduzigailuek ez dituzte mota honetako estekak onartzen
+ URL baliogabea
+ Ez da bideo jariorik aurkitu
+ Ez da audio jariorik aurkitu
+
+ Ireki gogoko erreproduzigailuarekin
+ Gogoko erreproduzigailua
+
+ Bideo erreproduzigailua
+ Bigarren planoko erreproduzigailua
+ Laster-leiho erreproduzigailua
+ Galdetu beti
+
+ Informazioa eskuratzen…
+ Eskatutako edukia kargatzen ari da
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index f2fb59a5f..e7a459c07 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -5,8 +5,8 @@
Résolution par défaut
Vouliez-vous dire : %1$s ?
Télécharger
- Chemin de téléchargement
- Entrer le chemin de téléchargement des vidéos
+ Chemin de téléchargement vidéo
+ Entrez le chemin de téléchargement des vidéos
Chemin de stockage des vidéos téléchargées
Installer
L’application Kore est introuvable. L\'installer ?
@@ -29,7 +29,7 @@
Télécharger
Vidéo suivante
Afficher les vidéos suivantes et similaires
- URL non pris en charge
+ Lien non pris en charge
Vidéo et audio
Autre
@@ -37,7 +37,7 @@
Miniature d’aperçu vidéo
Je n’aime pas
J’aime
- Langue par défaut du contenu
+ Langue du contenu par défaut
Miniature de l’avatar de l’utilisateur
Utiliser un lecteur vidéo externe
Utiliser un lecteur audio externe
@@ -53,7 +53,7 @@
Apparence
Erreur réseau
- Chemin de téléchargement
+ Chemin de téléchargement audio
Chemin de stockage des fichiers audio téléchargés
Entrez le chemin de téléchargement des fichiers audio
@@ -70,7 +70,7 @@
Direct
Impossible de charger toutes les miniatures
- Erreur lors du décryptage du lien
+ Impossible de déchiffrer la signature du lien
Impossible d\'analyser complètement le site web
Il s\'agit d\'un direct, non supporté pour le moment.
Désolé, une erreur inattendue s\'est produite.
@@ -109,15 +109,15 @@
OK
Nom du fichier
- Discussions
+ Threads
Erreur
Serveur non supporté
Fichier déjà existant
- URL malformée ou internet indisponible
+ Lien malformé ou internet indisponible
Téléchargement NewPipe
Appuyer pour plus de détails
Veuillez patienter…
- Copié dans le presse-papier
+ Copié dans le presse-papiers
Sélectionner un dossier de téléchargement disponible
Impossible de charger l\'image
@@ -136,7 +136,7 @@
Ouvrir en mode fenêtré
Mode fenêtré NewPipe
- Lire en mode fenêtré
+ Lecture en mode fenêtré
Oui
Plus tard
Désactivé
@@ -153,7 +153,7 @@
Arrière-plan
Fenêtre
- Résolution par défaut de la fenêtre
+ Résolution de la fenêtre par défaut
Afficher des résolutions plus élevées
Certains appareils uniquement supportent la lecture 2K/4K
Format vidéo par défaut
@@ -212,7 +212,7 @@
Caractère de remplacement
Historique de recherche
- Sauvegarder les recherches sur l\'appareil
+ Conserver les recherches sur l\'appareil
Historique
Historique
Recherché
@@ -268,17 +268,17 @@
Top 50
Nouveau & populaire
Mis en file d\'attente du lecteur en arrière-plan
- Mis en file d\'attente du lecteur fenêtré
+ Mis en file d\'attente du lecteur en fenêtré
Tout lire
Échec de la lecture de ce flux
Une erreur irrécupérable du lecteur s\'est produite
Encore aucune chaîne souscrite
Lecteur en arrière-plan
- Lecteur fenêtré
+ Lecteur en fenêtré
Retirer
Détails
- Réglages audio
+ Paramètres audio
Afficher l\'aide \"Appui long pour mettre en file d\'attente\"
Afficher l\'aide en appuyant sur les boutons \"Arrière-plan\" et \"Fenêtre\" sur la page de détails d\'une vidéo
[Inconnu]
@@ -291,7 +291,7 @@
Kiosque
Appui long pour mettre en file d\'attente
Mettre en file d\'attente en arrière-plan
- Mettre en file d\'attente du lecteur fenêtré
+ Mettre en file d\'attente en fenêtré
Démarrer ici
Démarrer ici en arrière-plan
Démarrer ici en fenêtré
@@ -301,9 +301,31 @@
Pour obtenir plus d\'informations et les dernières nouvelles à propos de NewPipe, visitez notre site Internet.
Donner en retour
Pays du contenu par défaut
- Orientation
+ Rotation
Basculer en arrière-plan
Basculer en fenêtré
Basculer en normal
+ Service
+ Ouvrir le menu
+ Fermer le menu
+ Aucun lecteur de flux trouvé (vous pouvez installer VLC pour le lire)
+ Toujours
+ Une seule fois
+
+ Les lecteurs externes ne supportent pas ces types de liens
+ Lien non valide
+ Aucun flux vidéo trouvé
+ Aucun flux audio trouvé
+
+ Ouvrir avec le lecteur préféré
+ Lecteur préféré
+
+ Lecteur vidéo
+ Lecteur en arrière-plan
+ Lecteur en fenêtré
+ Toujours demander
+
+ Obtention des infos…
+ Le contenu demandé est en chargement
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index c498db814..354c413a9 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -313,4 +313,27 @@
Cambia in visualizzazione a comparsa
Cambia al menù principale
-
+ Servizio
+ "Apri il menù "
+ Chiudi il menù
+ Nessun riproduttore multimediale trovato (puoi installare VLC per riprodurlo)
+ Sempre
+ Solo una volta
+
+ I riproduttori esterni non supportano questa tipologia di collegamenti
+ URL invalido
+ Nessun flusso video trovato
+ Nessun flusso audio trovato
+
+ Riproduttore preferito
+ Apri con il riproduttore preferito
+ Riproduttore preferito
+
+ Riproduttore video
+ Riproduttore di fondo
+ Riproduttore a comparsa
+ Chiedi sempre
+
+ Raccogliendo informazioni…
+ Il contenuto richiesto sta caricando
+
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 40cd7809b..8d28fa00e 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -1,17 +1,17 @@
%1$s に公開
- ストリームのプレイヤーが見つかりません。VLC を入手しますか。
+ 動画プレイヤーが見つかりません。VLC を入手しますか?
入手
取り消し
- ブラウザーで開く
+ ブラウザで開く
共有
保存
検索
設定
%1$s の間違いではありませんか
共有
- ブラウザーを選択
+ ブラウザを選択
回転
動画を保存する場所
動画を保存する場所
@@ -35,8 +35,8 @@
動画 プレビュー サムネイル
動画 プレビュー サムネイル
アップローダー サムネイル
- 不適切
- 好ましい
+ 低評価
+ 高評価
外部プレイヤーを使用する
外部プレイヤーを使用する
バックグラウンドで再生中
@@ -59,7 +59,7 @@
保存場所 \'%1$s\' を作成できません
保存場所 \'%1$s\' を作成しました
- 異常
+ エラー
全てのサムネイルを読み込むことができません
動画のURL署名を復号できませんでした
Webサイトを解析できませんでした
@@ -273,4 +273,9 @@
削除
詳細
音声の設定
+ 画面を回転
+ バックグラウンド再生に変更
+ ポップアップ再生に変更
+ メイン再生に変更
+
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index e51e71e46..2a2d6dfbb 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -126,12 +126,15 @@
Senas įtaisytas media grotuvas
- - %s prenumeratorius
- - %s prenumeratoriai
+ - % prenumeratorius
+ - % prenumeratoriai
+ - % prenumeratorių
- - Vaizdo įrašai
+ - % vaizdo įrašas
+ - % vaizdo įrašai
+ - % vaizdo įrašų
Pradėti
@@ -208,7 +211,9 @@
Nėra prenumeratorių
Nėra peržiūrų
- - %a peržiūra
+ - % peržiūra
+ - % peržiūros
+ - % peržiūrų
Nėra vaizdo įrašų
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index b10255a93..95c4d63e2 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -296,4 +296,32 @@
Bidra
Nettside
Mer informasjon og siste nytt om NewPipe er å finne på vår nettside.
-
+ Forvalgt innholdsland
+ Tjeneste
+ Veksle skjermretning
+ Bytt til bakgrunnsmodus
+ Bytt til oppsprettsmodus
+ Bytt til hovedmodus
+
+ Åpne skuff
+ Lukk skuff
+ Ingen strømmespiller installert (du kan installere VLC for å spille den)
+ Alltid
+ Kun én gang
+
+ Eksterne avspillere kan ikke spille lenker av disse typene
+ Ugyldig nettadresse
+ Fant ingen videostrømmer
+ Fant ingen lydstrømmer
+
+ Åpne med foretrukket avspiller
+ Foretrukket avpsiller
+
+ Videoavspiller
+ Bakgrunnsavspiller
+ Oppsprettsavspiller
+ Spør alltid
+
+ Henter informasjon…
+ Forespurt innhold innlastes
+
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index e3f320df5..9b06d8888 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -303,4 +303,33 @@ te openen in pop-upmodus
Teruggeven
Website
Bezoek onze website voor meer informatie en het laatste nieuws over NewPipe.
-
+ Standaardinhoudsland
+ Dienst
+ Oriëntatie wijzigen
+ Verplaatsen naar achtergrond
+ Verplaatsen naar pop-up
+ Verplaatsen naar normaal
+
+ Menu openen
+ Menu sluiten
+ Geen speler met streamondersteuning gevonden (je kan VLC installeren om het af te spelen)
+ Altijd
+ Eenmalig
+
+ Externe spelers ondersteunen deze soorten koppelingen niet
+ Ongeldige URL
+ Geen videostreams gevonden
+ Geen audiostreams gevonden
+
+ Voorkeursspeler
+ Openen met voorkeursspeler
+ Voorkeursspeler
+
+ Videospeler
+ Achtergrondspeler
+ Pop-upspeler
+ Altijd vragen
+
+ Info ophalen…
+ De gevraagde inhoud is aan het laden
+
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index c04d557e8..4ed07fbb1 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -42,7 +42,7 @@
Jasny
Pobrane
- Następne video
+ Następne wideo
Pokaż następne i podobne filmy
URL nie obsługiwany
Preferowany język zawartości
@@ -296,4 +296,27 @@
Zacznij Odtwarzanie Tutaj
Zacznij Odwarzanie Tutaj — w Tle
Zacznij Odtwarzanie Tutaj — w Okienku
+Nie znaleziono odtwarzacza strumieniowego (żeby odtworzyć możesz zainstalować VLC)
+ Domyślny kraj zawartości
+ Usługa
+ Zawsze
+ Tylko raz
+
+ Przełącz orientację
+ Odtwarzaj w tle
+ Zewnętrzne odtwarzacze nie obsługują linków tego typu
+ Nieprawidłowy URL
+ Nie znaleziono strumieni wideo
+ Nie znaleziono strumieni audio
+
+ Preferowany odtwarzacz
+ Otwórz za pomocą preferowanego odtwarzacza
+ Preferowany odtwarzacz
+
+ Odtwarzacz wideo
+ Odtwarzacz w tle
+ Pytaj za każdym razem
+
+ Informacje…
+ Ładuję żądaną zawartość
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 86add704f..b207ae3ac 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -284,4 +284,30 @@ abrir em modo popup
Retribuir
Site oficial
Para obter mais informações e as últimas notícias sobre o NewPipe visite nosso Site.
-
+ Nenhum reprodudor de stream encontrado (você pode instalar VLC para reproduzir isto)
+ País do conteúdo padrão
+ Serviço
+ Sempre
+ Apenas esta vez
+
+ Alterar a orientação
+ Alterar para plano de fundo
+ Alterar para Popup
+ Aletar para principal
+
+ Reprodutores externos não suportam estes tipos de links
+ URL inválida
+ Nenhum stream de vídeo encontrado
+ Nenhum stream de áudio encontrado
+
+ Abrir com reprodutor padrão
+ Reprodutor padrão
+
+ Reprodutor de vídeo
+ Reprodutor em plano de fundo
+ Reprodutor popup
+ Sempre perguntar
+
+ Obtendo informações…
+ O conteúdo solicitado está carregando
+
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index e3a29073a..a7dce00ca 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -76,7 +76,7 @@
Apăsați căutare pentru a începe
Redă automat
Redă automat un videoclip atunci când NewPipe este deschis din altă aplicație
- în direct
+ În direct
Descărcări
Descărcări
Raport de erori
@@ -168,7 +168,7 @@ pentru a deschide în mod pop-up
Arată sugestii
Arată sugestii în timpul căutării
- Pop-up
+ Popup
Filtrează
Reîmprospătare
Șterge
@@ -192,7 +192,7 @@ pentru a deschide în mod pop-up
Memorează videourile văzute
Reia la câștigarea focalizării
Continuă redarea după întreruperi (ex. după apeluri)
- Player
+ "Player "
Comportament
Istoric
Playlist
@@ -273,4 +273,7 @@ pentru a deschide în mod pop-up
Trenduri
Top 50
Tendințe
-
+Serviciu
+ Adăugaţi în playlist fundal
+ Adăugaţi în playlist pop-up
+
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 93d3628f1..43f07e947 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -270,15 +270,15 @@
Ana sayfanın içeriği
Boş Sayfa
- Büfe Sayfası
+ Köşk Sayfası
Abonelik Sayfası
Besleme Sayfası
Kanal Sayfası
Kanal seç
Henüz abone olunan kanal yok
- Büfe seç
+ Köşk seç
- Büfe
+ Köşk
Eğilimler
En Üst 50
Yeni ve sıcak
@@ -291,11 +291,39 @@
Arka Planda Kuyruğa Al
Açılır Pencerede Kuyruğa Al
Burayı Oynatmaya Başla
- Arka Planda Burayı Başlat
- Açılır Pencerede Burayı Başlat
+ Burayı Arka Planda Başlat
+ Burayı Açılır Pencerede Başlat
Bağış yapın
NewPipe, size en iyi deneyimi sunmak için boş zamanını harcayan gönüllüler tarafından geliştirilmektedir. Geliştiricilerimizin bir fincan kahvenin tadını çıkarırken NewPipe\'ı daha da çok iyileştirebilmelerinden emin olmak için karşılığını vermenin tam zamanı!
Karşılığını ver
Web sitesi
NewPipe hakkında daha çok bilgiyi ve son haberleri almak için web sitemize uğrayın.
-
+ Öntanımlı içerik ülkesi
+ Hizmet
+ Yönelimi Değiştir
+ Arka Plana Geç
+ Açılır Pencereye Geç
+ Ana Görünüme Geç
+
+ Çekmeceyi Aç
+ Çekmeceyi Kapat
+ Akış oynatıcı bulunamadı (oynatmak için VLC\'yi kurabilirsiniz)
+ Her Zaman
+ Yalnızca Bir Kez
+
+ Harici oynatıcılar bu türdeki bağlantıları desteklemiyor
+ Geçersiz URL
+ Video akışı bulunamadı
+ Ses akışı bulunamadı
+
+ Yeğlenen oynatıcıyla aç
+ Yeğlenen oynatıcı
+
+ Video oynatıcı
+ Arka plan oynatıcı
+ Açılır pencere oynatıcı
+ Her zaman sor
+
+ Bilgi alınıyor…
+ İstenen içerik yükleniyor
+
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 3f9865c47..8d95ff204 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -86,7 +86,7 @@
錯誤回報
全部
頻道
- 是
+ 是的
稍後
已停用
篩選器
@@ -240,4 +240,24 @@
已清除歷史紀錄
項目已刪除
確定要刪除此項搜尋紀錄嗎?
-
+沒有找到串流播放器(你可以安裝 VLC播放器 來播放)
+ 顯示鎖定到附加指引上
+ 預設內容國家
+ 服務
+ 在背景播放器上等候
+ 在懸浮視窗播放器上等候
+ 全部播放
+ 總是
+ 僅一次
+
+ [未知]
+
+ 切換方向
+ 切換到背景
+ 切換到懸浮視窗
+ 切換到主介面
+
+ 無法播放此串流
+ 發生無法復原的播放器錯誤
+ 從播放器錯誤中恢復
+
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 86b9644ae..61bc5e520 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -1,5 +1,6 @@
+
@@ -22,10 +23,14 @@
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index b77a2d229..21f19fc7b 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,13 +1,13 @@
+ #CD201F
#EEEEEE
- #e53935
- #d32f2f
- #000000
+ #e53935
#32000000
#48868686
+ #2a868686
#1fa6a6a6
#5a000000
#ffffff
@@ -16,11 +16,10 @@
#222222
- #CD322E
- #BC211D
- #FFFFFF
+ #ff5252
#0affffff
#48ffffff
+ #2affffff
#1f717171
#82000000
#424242
@@ -29,6 +28,7 @@
#000
+ @color/dark_settings_accent_color
#1effffff
#23454545
diff --git a/app/src/main/res/values/colors_services.xml b/app/src/main/res/values/colors_services.xml
new file mode 100644
index 000000000..36a292453
--- /dev/null
+++ b/app/src/main/res/values/colors_services.xml
@@ -0,0 +1,21 @@
+
+
+
+ #e53935
+ #d32f2f
+ #000000
+
+ #CD322E
+ #BC211D
+ #FFFFFF
+
+
+ #f57c00
+ #ef6c00
+ #000000
+
+ #f57c00
+ #ef6c00
+ #FFFFFF
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
deleted file mode 100644
index 1633e193a..000000000
--- a/app/src/main/res/values/ic_launcher_background.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- #CD201F
-
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index f0c496aa2..372b917e0 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -1,7 +1,12 @@
- current_service
+
+ - @string/youtube
+ - @string/soundcloud
+
+ service
+ @string/youtube
download_path
@@ -46,12 +51,6 @@
- 144p
-
- - @string/youtube
- - @string/soundcloud
-
- service
- @string/youtube
video_mp4
video_webm
@@ -131,6 +130,8 @@
main_page_selected_channel_name
main_page_selected_channel_url
main_page_selectd_kiosk_id
+ import_data
+ export_data
file_rename
@@ -149,6 +150,29 @@
@string/charset_most_special_characters_value
+
+ preferred_player_key
+ @string/always_ask_player_key
+ preferred_player_last_selected
+
+ video_player
+ background_player
+ popup_player
+ always_ask_player
+
+
+ - @string/video_player
+ - @string/background_player
+ - @string/popup_player
+ - @string/always_ask_player
+
+
+ - @string/video_player_key
+ - @string/background_player_key
+ - @string/popup_player_key
+ - @string/always_ask_player_key
+
+
- af
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6a6014a29..5d05d088d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5,6 +5,7 @@
%1$s views
Published on %1$s
No stream player found. Do you want to install VLC?
+ No stream player found (you can install VLC to play it)
Install
Cancel
https://f-droid.org/repository/browse/?fdfilter=vlc&fdid=org.videolan.vlc
@@ -119,6 +120,8 @@
Best resolution
Undo
Play All
+ Always
+ Just Once
newpipe
NewPipe Notification
@@ -131,6 +134,10 @@
Switch to Popup
Switch to Main
+ Import database
+ Export database
+ Will override your current history and subscriptions
+ Export history, subscriptions and playlists.
Error
Network error
@@ -148,6 +155,10 @@
Failed to play this stream
Unrecoverable player error occurred
Recovering from player error
+ External players don\'t support these types of links
+ Invalid URL
+ No video streams found
+ No audio streams found
Sorry, that should not have happened.
@@ -310,6 +321,11 @@
Select a channel
No channel subscribed yet
Select a kiosk
+ Export complete
+ Import complete
+ No valid Zip file
+ WARNING: Could not import all files.
+ This will override your current setup.
Kiosk
@@ -336,4 +352,17 @@
Close Drawer
YouTube
SoundCloud
+
+
+ @string/preferred_player_settings_title
+ Open with preferred player
+ Preferred player
+
+ Video player
+ Background player
+ Popup player
+ Always ask
+
+ Getting info…
+ "The requested content is loading"
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index c0c16e30f..ee526ca41 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,6 +1,15 @@
-
+
+
+
+
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/app/src/main/res/values/styles_misc.xml b/app/src/main/res/values/styles_misc.xml
new file mode 100644
index 000000000..4d177228d
--- /dev/null
+++ b/app/src/main/res/values/styles_misc.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles_services.xml b/app/src/main/res/values/styles_services.xml
new file mode 100644
index 000000000..6ed8c29e9
--- /dev/null
+++ b/app/src/main/res/values/styles_services.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index 22269eef6..20099d5c0 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -37,4 +37,14 @@
android:key="@string/main_page_content_key"
android:title="@string/main_page_content"
android:summary="%s"/>
+
+
+
+
diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml
index 6685f1a25..ceacfb142 100644
--- a/app/src/main/res/xml/video_audio_settings.xml
+++ b/app/src/main/res/xml/video_audio_settings.xml
@@ -1,7 +1,6 @@
+
+