merge unitTesting

This commit is contained in:
Christian Schabesberger 2016-01-06 15:13:55 +01:00
commit ab0ce55411
66 changed files with 1971 additions and 1113 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@
/app/app.iml
/.idea
/*.iml
gradle.properties

View File

@ -1,11 +1,11 @@
#Contributing
#Contribution
This document contains guidelines on making contributions to NewPipe.
## Programming
* Follow the [Google Style Guidelines](https://google.github.io/styleguide/javaguide.html)
* Make a new feature on a seperate branch, not on the master branch
* Make a new feature on a separate branch, not on the master branch
* Make a [pull request](https://github.com/theScrabi/NewPipe/pulls) if you're done with your changes
* When submitting changes, you agree that your code will be GPLv3 licensed
@ -16,7 +16,7 @@ This document contains guidelines on making contributions to NewPipe.
compatibility with all git tools
* [This guide](http://chris.beams.io/posts/git-commit/) goes more in depth on what makes a good commit message
## Translating
## Translation
* NewPipe can be translated on [weblate](https://hosted.weblate.org/projects/newpipe/strings/)
@ -30,4 +30,4 @@ This document contains guidelines on making contributions to NewPipe.
## Communication
* For the time being, [Slack](http://invite.chschtsch.ml/) is being used for project communication
* Feel free to post suggestions, changes ideas etc!
* Feel free to post suggestions, changes, ideas etc!

View File

@ -36,6 +36,7 @@ NewPipe does not use any Google framework libraries, or the YouTube API. It only
* Open a video in Kodi
* Show Next/Related videos
* Search YouTube in a specific language
* Orbot/Tor support (no streaming yet)
### Coming Features

View File

@ -8,8 +8,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 15
targetSdkVersion 23
versionCode 9
versionName "0.7.0"
versionCode 11
versionName "0.7.2"
}
buildTypes {
release {
@ -35,4 +35,5 @@ dependencies {
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'org.jsoup:jsoup:1.8.3'
compile 'org.mozilla:rhino:1.7.7'
compile 'info.guardianproject.netcipher:netcipher:1.2'
}

View File

@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:logo="@mipmap/ic_launcher"
@ -29,43 +30,46 @@
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".VideoItemListActivity" />
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" />
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="youtube.com"
android:scheme="http"
android:pathPattern="/?*#*/*watch"/>
<data
android:host="youtube.com"
android:scheme="https"
android:pathPattern="/?*#*/*watch"/>
<data
android:host="www.youtube.com"
android:scheme="http"
android:pathPattern="/?*#*/*watch"/>
<data
android:host="www.youtube.com"
android:scheme="https"
android:pathPattern="/?*#*/*watch"/>
<data
android:host="m.youtube.com"
android:scheme="http"
android:pathPattern="/?*#*/*watch"/>
<data
android:host="m.youtube.com"
android:scheme="https"
android:pathPattern="/?*#*/*watch"/>
<data
android:host="youtu.be"
android:scheme="https"
android:pathPrefix="/"/>
<data
android:host="youtu.be"
android:scheme="http"
android:pathPrefix="/"/>
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="youtube.com" />
<data android:host="m.youtube.com" />
<data android:host="www.youtube.com" />
<data android:pathPrefix="/v/" />
<data android:pathPrefix="/watch" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" />
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="youtu.be" />
<data android:pathPrefix="/" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" />
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="vnd.youtube" />
<data android:scheme="vnd.youtube.launch" />
</intent-filter>
</activity>
<activity android:name=".PlayVideoActivity"
@ -74,15 +78,26 @@
android:parentActivityName=".VideoItemDetailActivity"
tools:ignore="UnusedAttribute">
</activity>
<!--TODO: make label a translatable string -->
<service
android:name=".BackgroundPlayer"
android:label="NewPipe Background Player"
android:exported="false" >
</service>
android:label="@string/background_player_name"
android:exported="false" />
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings" >
android:label="@string/settings_activity_title" >
</activity>
<activity
android:name=".PanicResponderActivity"
android:launchMode="singleInstance"
android:noHistory="true"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="info.guardianproject.panic.action.TRIGGER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".ExitActivity"
android:theme="@android:style/Theme.NoDisplay" />
</application>
</manifest>

View File

@ -99,8 +99,8 @@ class ActionBarHandler {
defaultPreferences = PreferenceManager.getDefaultSharedPreferences(activity);
String[] itemArray = new String[videoStreams.length];
String defaultResolution = defaultPreferences
.getString(activity.getString(R.string.defaultResolutionPreference),
activity.getString(R.string.defaultResolutionListItem));
.getString(activity.getString(R.string.default_resolution_key),
activity.getString(R.string.default_resolution_value));
int defaultResolutionPos = 0;
for(int i = 0; i < videoStreams.length; i++) {
@ -124,7 +124,7 @@ class ActionBarHandler {
// set audioStream
audioStream = null;
String preferedFormat = defaultPreferences
.getString(activity.getString(R.string.defaultAudioFormatPreference), "webm");
.getString(activity.getString(R.string.default_audio_format_key), "webm");
if(preferedFormat.equals("webm")) {
for(VideoInfo.AudioStream s : audioStreams) {
if(s.format == MediaFormat.WEBMA.id) {
@ -158,7 +158,7 @@ class ActionBarHandler {
MenuItem castItem = menu.findItem(R.id.action_play_with_kodi);
castItem.setVisible(defaultPreferences
.getBoolean(activity.getString(R.string.showPlayWithKodiPreference), false));
.getBoolean(activity.getString(R.string.show_play_with_kodi_key), false));
}
public boolean onItemSelected(MenuItem item) {
@ -170,7 +170,7 @@ class ActionBarHandler {
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, websiteUrl);
intent.setType("text/plain");
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.shareDialogTitle)));
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.share_dialog_title)));
return true;
}
case R.id.menu_item_openInBrowser: {
@ -210,7 +210,7 @@ class ActionBarHandler {
// ----------- THE MAGIC MOMENT ---------------
if(!videoTitle.isEmpty()) {
if (PreferenceManager.getDefaultSharedPreferences(activity)
.getBoolean(activity.getString(R.string.useExternalVideoPlayer), false)) {
.getBoolean(activity.getString(R.string.use_external_video_player_key), false)) {
// External Player
Intent intent = new Intent();
@ -226,13 +226,13 @@ class ActionBarHandler {
} catch (Exception e) {
e.printStackTrace();
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(R.string.noPlayerFound)
.setPositiveButton(R.string.installStreamPlayer, new DialogInterface.OnClickListener() {
builder.setMessage(R.string.no_player_found)
.setPositiveButton(R.string.install, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(activity.getString(R.string.fdroidVLCurl)));
intent.setData(Uri.parse(activity.getString(R.string.fdroid_vlc_url)));
activity.startActivity(intent);
}
})
@ -284,7 +284,7 @@ class ActionBarHandler {
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(websiteUrl));
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.chooseBrowser)));
activity.startActivity(Intent.createChooser(intent, activity.getString(R.string.choose_browser)));
}
}
@ -298,13 +298,13 @@ class ActionBarHandler {
} catch (Exception e) {
e.printStackTrace();
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(R.string.koreNotFound)
.setPositiveButton(R.string.installeKore, new DialogInterface.OnClickListener() {
builder.setMessage(R.string.kore_not_found)
.setPositiveButton(R.string.install, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(activity.getString(R.string.fdroidKoreUrl)));
intent.setData(Uri.parse(activity.getString(R.string.fdroid_kore_url)));
activity.startActivity(intent);
}
})
@ -322,7 +322,7 @@ class ActionBarHandler {
public void playAudio() {
boolean externalAudioPlayer = PreferenceManager.getDefaultSharedPreferences(activity)
.getBoolean(activity.getString(R.string.useExternalAudioPlayer), false);
.getBoolean(activity.getString(R.string.use_external_audio_player_key), false);
Intent intent;
if (!externalAudioPlayer && android.os.Build.VERSION.SDK_INT >= 18) {
@ -356,13 +356,13 @@ class ActionBarHandler {
} catch (Exception e) {
e.printStackTrace();
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage(R.string.noPlayerFound)
.setPositiveButton(R.string.installStreamPlayer, new DialogInterface.OnClickListener() {
builder.setMessage(R.string.no_player_found)
.setPositiveButton(R.string.install, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(activity.getString(R.string.fdroidVLCurl)));
intent.setData(Uri.parse(activity.getString(R.string.fdroid_vlc_url)));
activity.startActivity(intent);
}
})

View File

@ -0,0 +1,71 @@
package org.schabi.newpipe;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import info.guardianproject.netcipher.NetCipher;
import info.guardianproject.netcipher.proxy.OrbotHelper;
/**
* Copyright (C) Hans-Christoph Steiner 2016 <hans@eds.org>
* App.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 <http://www.gnu.org/licenses/>.
*/
public class App extends Application {
private static boolean useTor;
@Override
public void onCreate() {
super.onCreate();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(prefs.getBoolean(getString(R.string.use_tor_key), false)) {
OrbotHelper.requestStartTor(this);
configureTor(true);
} else {
configureTor(false);
}
// DO NOT REMOVE THIS FUNCTION!!!
// Otherwise downloadPathPreference has invalid value.
SettingsActivity.initSettings(this);
}
/**
* Set the proxy settings based on whether Tor should be enabled or not.
*/
static void configureTor(boolean enabled) {
useTor = enabled;
if (useTor) {
NetCipher.useTor();
} else {
NetCipher.setProxy(null);
}
}
static void checkStartTor(Context context) {
if (useTor) {
OrbotHelper.requestStartTor(context);
}
}
static boolean isUsingTor() {
return useTor;
}
}

View File

@ -17,6 +17,7 @@ import android.os.IBinder;
import android.os.PowerManager;
import android.support.v7.app.NotificationCompat;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
import java.io.IOException;
@ -74,7 +75,7 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, R.string.backgroundPlayerStartPlayingToast,
Toast.makeText(this, R.string.background_player_playing_toast,
Toast.LENGTH_SHORT).show();
String source = intent.getDataString();
@ -113,9 +114,9 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
private int noteID = TAG.hashCode();
private BackgroundPlayer owner;
private NotificationManager noteMgr;
private NotificationCompat.Builder noteBuilder;
private WifiManager.WifiLock wifiLock;
private Bitmap videoThumbnail = null;
private NotificationCompat.Builder noteBuilder;
public PlayerThread(String src, String title, BackgroundPlayer owner) {
this.source = src;
@ -124,10 +125,9 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
@Override
public void run() {
Resources res = getApplicationContext().getResources();
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);//cpu lock
try {
mediaPlayer.setDataSource(source);
@ -135,9 +135,6 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
//so calling the blocking prepare() method should be ok
mediaPlayer.prepare();
//alternatively:
//mediaPlayer.setOnPreparedListener(this);
//mediaPlayer.prepareAsync(); //prepare async to not block main thread
} catch (IOException ioe) {
ioe.printStackTrace();
Log.e(TAG, "video source:" + source);
@ -177,63 +174,7 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
filter.addAction(ACTION_STOP);
registerReceiver(broadcastReceiver, filter);
PendingIntent playPI = PendingIntent.getBroadcast(owner, noteID,
new Intent(ACTION_PLAYPAUSE), PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action playButton = new NotificationCompat.Action.Builder
(R.drawable.ic_play_arrow_white_48dp, "Play", playPI).build();
/*
NotificationCompat.Action pauseButton = new NotificationCompat.Action.Builder
(R.drawable.ic_pause_white_24dp, "Pause", playPI).build();
*/
PendingIntent stopPI = PendingIntent.getBroadcast(owner, noteID,
new Intent(ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT);
noteBuilder = new NotificationCompat.Builder(owner);
noteBuilder
.setContentTitle(title)
//really? Id like to put something more helpful here.
//.setContentText("NewPipe is playing in the background")
.setContentText(channelName)
//.setAutoCancel(!mediaPlayer.isPlaying())
.setOngoing(true)
.setDeleteIntent(stopPI)
//doesn't fit with Notification.MediaStyle
//.setProgress(vidLength, 0, false)
.setSmallIcon(R.drawable.ic_play_circle_filled_white_24dp)
.setLargeIcon(videoThumbnail)
.setTicker(
String.format(res.getString(
R.string.backgroundPlayerTickerText), title))
.addAction(playButton);
//.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
//.setLargeIcon(cover)
if(android.os.Build.VERSION.SDK_INT >= 16)
noteBuilder.setPriority(Notification.PRIORITY_LOW);
if(android.os.Build.VERSION.SDK_INT >= 21)
noteBuilder.setCategory(Notification.CATEGORY_TRANSPORT);
noteBuilder.setStyle(new NotificationCompat.MediaStyle()
//.setMediaSession(mMediaSession.getSessionToken())
.setShowActionsInCompactView(new int[]{0})
.setShowCancelButton(true)
.setCancelButtonIntent(stopPI));
if(videoThumbnail != null) {
noteBuilder.setLargeIcon(videoThumbnail);
}
Notification note = noteBuilder.build();
Intent openDetailView = new Intent(getApplicationContext(),
VideoItemDetailActivity.class);
openDetailView.putExtra(VideoItemDetailFragment.STREAMING_SERVICE, serviceId);
openDetailView.putExtra(VideoItemDetailFragment.VIDEO_URL, webUrl);
openDetailView.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
note.contentIntent = PendingIntent.getActivity(getApplicationContext(),
noteID, openDetailView,
PendingIntent.FLAG_UPDATE_CURRENT);
Notification note = buildNotification();
startForeground(noteID, note);
@ -252,9 +193,9 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
Log.d(TAG, "sleep failure");
}
}*/
}
/**Handles button presses from the notification. */
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@ -265,7 +206,7 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
mediaPlayer.pause();
}
else {
//reacquire CPU lock after releasing it on pause
//reacquire CPU lock after auto-releasing it on pause
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mediaPlayer.start();
}
@ -279,8 +220,9 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
};
private void afterPlayCleanup() {
//noteBuilder.setProgress(0, 0, false);
//remove progress bar
//noteBuilder.setProgress(0, 0, false);
//remove notification
noteMgr.cancel(noteID);
unregisterReceiver(broadcastReceiver);
@ -289,7 +231,7 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
//release wifilock
wifiLock.release();
//remove foreground status of service; make us killable
//remove foreground status of service; make BackgroundPlayer killable
stopForeground(true);
stopSelf();
@ -306,5 +248,110 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
afterPlayCleanup();
}
}
private Notification buildNotification() {
Notification note;
Resources res = getApplicationContext().getResources();
noteBuilder = new NotificationCompat.Builder(owner);
PendingIntent playPI = PendingIntent.getBroadcast(owner, noteID,
new Intent(ACTION_PLAYPAUSE), PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent stopPI = PendingIntent.getBroadcast(owner, noteID,
new Intent(ACTION_STOP), PendingIntent.FLAG_UPDATE_CURRENT);
/*
NotificationCompat.Action pauseButton = new NotificationCompat.Action.Builder
(R.drawable.ic_pause_white_24dp, "Pause", playPI).build();
*/
//build intent to return to video, on tapping notification
Intent openDetailView = new Intent(getApplicationContext(),
VideoItemDetailActivity.class);
openDetailView.putExtra(VideoItemDetailFragment.STREAMING_SERVICE, serviceId);
openDetailView.putExtra(VideoItemDetailFragment.VIDEO_URL, webUrl);
openDetailView.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
noteBuilder
.setOngoing(true)
.setDeleteIntent(stopPI)
//doesn't fit with Notification.MediaStyle
//.setProgress(vidLength, 0, false)
.setSmallIcon(R.drawable.ic_play_circle_filled_white_24dp)
.setTicker(
String.format(res.getString(
R.string.background_player_time_text), title))
.setContentIntent(PendingIntent.getActivity(getApplicationContext(),
noteID, openDetailView,
PendingIntent.FLAG_UPDATE_CURRENT));
if (android.os.Build.VERSION.SDK_INT < 21) {
NotificationCompat.Action playButton = new NotificationCompat.Action.Builder
(R.drawable.ic_play_arrow_white_48dp,
res.getString(R.string.play_btn_text), playPI).build();
noteBuilder
.setContentTitle(title)
//really? Id like to put something more helpful here.
//was more of a placeholder than anything else. -medavox
//.setContentText("NewPipe is playing in the background")
.setContentText(channelName)
//.setAutoCancel(!mediaPlayer.isPlaying())
.setDeleteIntent(stopPI)
//doesn't fit with Notification.MediaStyle
//.setProgress(vidLength, 0, false)
.setLargeIcon(videoThumbnail)
.addAction(playButton);
//.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
//.setLargeIcon(cover)
//is wrapping this in an SDK version check really necessary,
// if we're using NotificationCompat?
// the compat libraries should handle this, right? -medavox
if (android.os.Build.VERSION.SDK_INT >= 16)
noteBuilder.setPriority(Notification.PRIORITY_LOW);
noteBuilder.setStyle(new NotificationCompat.MediaStyle()
//.setMediaSession(mMediaSession.getSessionToken())
.setShowActionsInCompactView(new int[]{0})
.setShowCancelButton(true)
.setCancelButtonIntent(stopPI));
if (videoThumbnail != null) {
noteBuilder.setLargeIcon(videoThumbnail);
}
note = noteBuilder.build();
} else {
RemoteViews view =
new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification);
view.setImageViewBitmap(R.id.backgroundCover, videoThumbnail);
view.setTextViewText(R.id.backgroundSongName, title);
view.setTextViewText(R.id.backgroundArtist, channelName);
view.setOnClickPendingIntent(R.id.backgroundStop, stopPI);
view.setOnClickPendingIntent(R.id.backgroundPlayPause, playPI);
//possibly found the expandedView problem,
//but can't test it as I don't have a 5.0 device. -medavox
RemoteViews expandedView =
new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification_expanded);
expandedView.setImageViewBitmap(R.id.backgroundCover, videoThumbnail);
expandedView.setTextViewText(R.id.backgroundSongName, title);
expandedView.setTextViewText(R.id.backgroundArtist, channelName);
expandedView.setOnClickPendingIntent(R.id.backgroundStop, stopPI);
expandedView.setOnClickPendingIntent(R.id.backgroundPlayPause, playPI);
noteBuilder.setCategory(Notification.CATEGORY_TRANSPORT);
//Make notification appear on lockscreen
noteBuilder.setVisibility(Notification.VISIBILITY_PUBLIC);
note = noteBuilder.build();
note.contentView = view;
//todo: This never shows up. I was not able to figure out why:
note.bigContentView = expandedView;
}
return note;
}
}
}

View File

@ -52,49 +52,58 @@ public class DownloadDialog extends DialogFragment {
arguments = getArguments();
super.onCreateDialog(savedInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.downloadDialogTitle)
.setItems(R.array.downloadOptions, new DialogInterface.OnClickListener() {
builder.setTitle(R.string.download_dialog_title)
.setItems(R.array.download_options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Context context = getActivity();
SharedPreferences defaultPreferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String suffix = "";
String title = arguments.getString(TITLE);
String url = "";
String downloadFolder = Environment.DIRECTORY_DOWNLOADS;
switch(which) {
case 0: // Video
suffix = arguments.getString(FILE_SUFFIX_VIDEO);
url = arguments.getString(VIDEO_URL);
downloadFolder = Environment.DIRECTORY_MOVIES;
break;
case 1:
suffix = arguments.getString(FILE_SUFFIX_AUDIO);
url = arguments.getString(AUDIO_URL);
downloadFolder = Environment.DIRECTORY_MUSIC;
break;
default:
Log.d(TAG, "lolz");
}
//to avoid hard-coded string like "/storage/emulated/0/NewPipe"
final File dir = new File(defaultPreferences.getString(
"download_path_preference",
Environment.getExternalStorageDirectory().getAbsolutePath() + "/NewPipe"));
//to avoid hard-coded string like "/storage/emulated/0/Movies"
String downloadPath = prefs.getString(getString(R.string.download_path_key),
Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + downloadFolder);
final File dir = new File(downloadPath);
if(!dir.exists()) {
boolean mkdir = dir.mkdir(); //attempt to create directory
//attempt to create directory
boolean mkdir = dir.mkdir();
if(!mkdir && !dir.isDirectory()) {
Log.e(TAG, "Cant' create directory named " + dir.toString());
//TODO notify user "download directory should be changed" ?
}
}
DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
request.setDestinationUri(Uri.fromFile(new File(
defaultPreferences.getString("download_path_preference", "/storage/emulated/0/NewPipe")
+ "/" + title + suffix)));
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
try {
dm.enqueue(request);
} catch (Exception e) {
e.printStackTrace();
String saveFilePath = dir + "/" + title + suffix;
if (App.isUsingTor()) {
// if using Tor, do not use DownloadManager because the proxy cannot be set
Downloader.downloadFile(getContext(), url, saveFilePath);
} else {
DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
request.setDestinationUri(Uri.fromFile(new File(saveFilePath)));
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
try {
dm.enqueue(request);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});

View File

@ -1,12 +1,30 @@
package org.schabi.newpipe;
import android.app.NotificationManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.UnknownHostException;
import javax.net.ssl.HttpsURLConnection;
import info.guardianproject.netcipher.NetCipher;
/**
* Created by Christian Schabesberger on 14.08.15.
*
@ -28,7 +46,7 @@ import java.net.UnknownHostException;
*/
public class Downloader {
public static final String TAG = "Downloader";
private static final String USER_AGENT = "Mozilla/5.0";
/**Download the text file at the supplied URL as in download(String),
@ -40,7 +58,7 @@ public class Downloader {
String ret = "";
try {
URL url = new URL(siteUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestProperty("Accept-Language", language);
ret = dl(con);
}
@ -49,8 +67,9 @@ public class Downloader {
}
return ret;
}
/**Common functionality between download(String url) and download(String url, String language)*/
private static String dl(HttpURLConnection con) throws IOException {
private static String dl(HttpsURLConnection con) throws IOException {
StringBuilder response = new StringBuilder();
try {
@ -84,7 +103,7 @@ public class Downloader {
try {
URL url = new URL(siteUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
HttpsURLConnection con = NetCipher.getHttpsURLConnection(url);
ret = dl(con);
}
catch(Exception e) {
@ -93,4 +112,92 @@ public class Downloader {
return ret;
}
/**
* Downloads a file from a URL in the background using an {@link AsyncTask}.
*
* @param fileURL HTTP URL of the file to be downloaded
* @param saveFilePath path of the directory to save the file
* @throws IOException
*/
public static void downloadFile(final Context context, final String fileURL, final String saveFilePath) {
new AsyncTask<Void, Integer, Void>() {
private NotificationManager nm;
private NotificationCompat.Builder builder;
private int notifyId = 0x1234;
private int fileSize = 0xffffffff;
@Override
protected void onPreExecute() {
super.onPreExecute();
nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Drawable icon = context.getResources().getDrawable(R.mipmap.ic_launcher);
builder = new NotificationCompat.Builder(context)
.setSmallIcon(android.R.drawable.stat_sys_download)
.setLargeIcon(((BitmapDrawable) icon).getBitmap())
.setContentTitle(saveFilePath.substring(saveFilePath.lastIndexOf('/') + 1))
.setContentText(saveFilePath)
.setProgress(fileSize, 0, false);
nm.notify(notifyId, builder.build());
}
@Override
protected Void doInBackground(Void... voids) {
HttpsURLConnection con = null;
try {
con = NetCipher.getHttpsURLConnection(fileURL);
int responseCode = con.getResponseCode();
// always check HTTP response code first
if (responseCode == HttpURLConnection.HTTP_OK) {
fileSize = con.getContentLength();
InputStream inputStream = new BufferedInputStream(con.getInputStream());
FileOutputStream outputStream = new FileOutputStream(saveFilePath);
int bufferSize = 8192;
int downloaded = 0;
int bytesRead = -1;
byte[] buffer = new byte[bufferSize];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
downloaded += bytesRead;
if (downloaded % 50000 < bufferSize) {
publishProgress(downloaded);
}
}
outputStream.close();
inputStream.close();
publishProgress(bufferSize);
} else {
Log.i(TAG, "No file to download. Server replied HTTP code: " + responseCode);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (con != null) {
con.disconnect();
con = null;
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progress) {
builder.setProgress(fileSize, progress[0], false);
nm.notify(notifyId, builder.build());
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
nm.cancel(notifyId);
}
}.execute();
}
}

View File

@ -0,0 +1,54 @@
package org.schabi.newpipe;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
/**
* Copyright (C) Hans-Christoph Steiner 2016 <hans@eds.org>
* ExitActivity.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 <http://www.gnu.org/licenses/>.
*/
public class ExitActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21) {
finishAndRemoveTask();
} else {
finish();
}
System.exit(0);
}
public static void exitAndRemoveFromRecentApps(Activity activity) {
Intent intent = new Intent(activity, ExitActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
| Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NO_ANIMATION);
activity.startActivity(intent);
}
}

View File

@ -0,0 +1,93 @@
package org.schabi.newpipe;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.preference.PreferenceManager;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* Created by chschtsch on 12/29/15.
*
* Copyright (C) Gregory Arkhipov 2015
* Localization.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 <http://www.gnu.org/licenses/>.
*/
public class Localization {
public static Locale getPreferredLocale(Context context) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
String languageCode = sp.getString(String.valueOf(R.string.search_language_key),
context.getString(R.string.default_language_value));
if(languageCode.length() == 2) {
return new Locale(languageCode);
}
else if(languageCode.contains("_")) {
String country = languageCode
.substring(languageCode.indexOf("_"), languageCode.length());
return new Locale(languageCode.substring(0, 2), country);
}
return Locale.getDefault();
}
public static String localizeViewCount(long viewCount, Context context) {
Locale locale = getPreferredLocale(context);
Resources res = context.getResources();
String viewsString = res.getString(R.string.view_count_text);
NumberFormat nf = NumberFormat.getInstance(locale);
String formattedViewCount = nf.format(viewCount);
return String.format(viewsString, formattedViewCount);
}
public static String localizeNumber(long number, Context context) {
Locale locale = getPreferredLocale(context);
NumberFormat nf = NumberFormat.getInstance(locale);
return nf.format(number);
}
private static String formatDate(String date, Context context) {
Locale locale = getPreferredLocale(context);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date datum = null;
try {
datum = formatter.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
return df.format(datum);
}
public static String localizeDate(String date, Context context) {
Resources res = context.getResources();
String dateString = res.getString(R.string.upload_date_text);
String formattedDate = formatDate(date, context);
return String.format(dateString, formattedDate);
}
}

View File

@ -0,0 +1,50 @@
package org.schabi.newpipe;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
/**
* Copyright (C) Hans-Christoph Steiner 2016 <hans@eds.org>
* PanicResponderActivity.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 <http://www.gnu.org/licenses/>.
*/
public class PanicResponderActivity extends Activity {
public static final String PANIC_TRIGGER_ACTION = "info.guardianproject.panic.action.TRIGGER";
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent != null && PANIC_TRIGGER_ACTION.equals(intent.getAction())) {
// TODO explicitly clear the search results once they are restored when the app restarts
// or if the app reloads the current video after being killed, that should be cleared also
ExitActivity.exitAndRemoveFromRecentApps(this);
}
if (Build.VERSION.SDK_INT >= 21) {
finishAndRemoveTask();
} else {
finish();
}
}
}

View File

@ -187,6 +187,18 @@ public class PlayVideoActivity extends AppCompatActivity {
videoView.pause();
}
@Override
public void onResume() {
super.onResume();
App.checkStartTor(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
prefs = getPreferences(Context.MODE_PRIVATE);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
@ -199,7 +211,7 @@ public class PlayVideoActivity extends AppCompatActivity {
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, videoUrl);
intent.setType("text/plain");
startActivity(Intent.createChooser(intent, getString(R.string.shareDialogTitle)));
startActivity(Intent.createChooser(intent, getString(R.string.share_dialog_title)));
break;
case R.id.menu_item_screen_rotation:
toggleOrientation();

View File

@ -1,10 +1,15 @@
package org.schabi.newpipe;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Environment;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
@ -17,6 +22,8 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import info.guardianproject.netcipher.proxy.OrbotHelper;
/**
* Created by Christian Schabesberger on 31.08.15.
*
@ -37,8 +44,9 @@ import android.view.ViewGroup;
* along with NewPipe. If not, see <http://www.gnu.org/licenses/>.
*/
public class SettingsActivity extends PreferenceActivity {
public class SettingsActivity extends PreferenceActivity {
private static final int REQUEST_INSTALL_ORBOT = 0x1234;
private AppCompatDelegate mDelegate = null;
@Override
@ -55,12 +63,100 @@ public class SettingsActivity extends PreferenceActivity {
}
public static class SettingsFragment extends PreferenceFragment {
public static class SettingsFragment extends PreferenceFragment{
SharedPreferences.OnSharedPreferenceChangeListener prefListener;
// get keys
String DEFAULT_RESOLUTION_PREFERENCE;
String DEFAULT_AUDIO_FORMAT_PREFERENCE;
String SEARCH_LANGUAGE_PREFERENCE;
String DOWNLOAD_PATH_PREFERENCE;
String USE_TOR_KEY;
private ListPreference defaultResolutionPreference;
private ListPreference defaultAudioFormatPreference;
private ListPreference searchLanguagePreference;
private EditTextPreference downloadPathPreference;
private CheckBoxPreference useTorCheckBox;
private SharedPreferences defaultPreferences;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings_screen);
addPreferencesFromResource(R.xml.settings);
final Activity activity = getActivity();
defaultPreferences = PreferenceManager.getDefaultSharedPreferences(activity);
// get keys
DEFAULT_RESOLUTION_PREFERENCE =getString(R.string.default_resolution_key);
DEFAULT_AUDIO_FORMAT_PREFERENCE =getString(R.string.default_audio_format_key);
SEARCH_LANGUAGE_PREFERENCE =getString(R.string.search_language_key);
DOWNLOAD_PATH_PREFERENCE = getString(R.string.download_path_key);
USE_TOR_KEY = getString(R.string.use_tor_key);
// get pref objects
defaultResolutionPreference =
(ListPreference) findPreference(DEFAULT_RESOLUTION_PREFERENCE);
defaultAudioFormatPreference =
(ListPreference) findPreference(DEFAULT_AUDIO_FORMAT_PREFERENCE);
searchLanguagePreference =
(ListPreference) findPreference(SEARCH_LANGUAGE_PREFERENCE);
downloadPathPreference =
(EditTextPreference) findPreference(DOWNLOAD_PATH_PREFERENCE);
useTorCheckBox = (CheckBoxPreference) findPreference(USE_TOR_KEY);
prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
Activity a = getActivity();
updateSummary();
if (defaultPreferences.getBoolean(USE_TOR_KEY, false)) {
if (OrbotHelper.isOrbotInstalled(a)) {
App.configureTor(true);
OrbotHelper.requestStartTor(a);
} else {
Intent intent = OrbotHelper.getOrbotInstallIntent(a);
a.startActivityForResult(intent, REQUEST_INSTALL_ORBOT);
}
} else {
App.configureTor(false);
}
}
};
defaultPreferences.registerOnSharedPreferenceChangeListener(prefListener);
updateSummary();
}
// This is used to show the status of some preference in the description
private void updateSummary() {
defaultResolutionPreference.setSummary(
defaultPreferences.getString(DEFAULT_RESOLUTION_PREFERENCE,
getString(R.string.default_resolution_value)));
defaultAudioFormatPreference.setSummary(
defaultPreferences.getString(DEFAULT_AUDIO_FORMAT_PREFERENCE,
getString(R.string.default_audio_format_value)));
searchLanguagePreference.setSummary(
defaultPreferences.getString(SEARCH_LANGUAGE_PREFERENCE,
getString(R.string.default_language_value)));
downloadPathPreference.setSummary(
defaultPreferences.getString(DOWNLOAD_PATH_PREFERENCE,
getString(R.string.download_path_summary)));
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// try to start tor regardless of resultCode since clicking back after
// installing the app does not necessarily return RESULT_OK
App.configureTor(requestCode == REQUEST_INSTALL_ORBOT
&& OrbotHelper.requestStartTor(this));
}
@Override
@ -150,13 +246,13 @@ public class SettingsActivity extends PreferenceActivity {
}
public static void initSettings(Context context) {
PreferenceManager.setDefaultValues(context, R.xml.settings_screen, false);
PreferenceManager.setDefaultValues(context, R.xml.settings, false);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
if(sp.getString(context.getString(R.string.downloadPathPreference), "").isEmpty()){
if(sp.getString(context.getString(R.string.download_path_key), "").isEmpty()){
SharedPreferences.Editor spEditor = sp.edit();
String newPipeDownloadStorage =
Environment.getExternalStorageDirectory().getAbsolutePath() + "/NewPipe";
spEditor.putString(context.getString(R.string.downloadPathPreference)
spEditor.putString(context.getString(R.string.download_path_key)
, newPipeDownloadStorage);
spEditor.apply();
}

View File

@ -1,5 +1,6 @@
package org.schabi.newpipe;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -33,7 +34,7 @@ class VideoInfoItemViewCreator {
this.inflater = inflater;
}
public View getViewFromVideoInfoItem(View convertView, ViewGroup parent, VideoPreviewInfo info) {
public View getViewFromVideoInfoItem(View convertView, ViewGroup parent, VideoPreviewInfo info, Context context) {
ViewHolder holder;
if(convertView == null) {
convertView = inflater.inflate(R.layout.video_item, parent, false);
@ -59,8 +60,7 @@ class VideoInfoItemViewCreator {
if(!info.upload_date.isEmpty()) {
holder.itemUploadDateView.setText(info.upload_date);
} else {
//tweak if necessary: This is a hack to prevent having white space in the layout :P
holder.itemUploadDateView.setText(String.format("%d", info.view_count));
holder.itemUploadDateView.setText(Localization.localizeViewCount(info.view_count, context));
}
return convertView;

View File

@ -80,7 +80,7 @@ public class VideoItemDetailActivity extends AppCompatActivity {
}
}
if(currentStreamingService == -1) {
Toast.makeText(this, R.string.urlNotSupportedText, Toast.LENGTH_LONG)
Toast.makeText(this, R.string.url_not_supported_toast, Toast.LENGTH_LONG)
.show();
}
//arguments.putString(VideoItemDetailFragment.VIDEO_URL,
@ -89,7 +89,7 @@ public class VideoItemDetailActivity extends AppCompatActivity {
arguments.putBoolean(VideoItemDetailFragment.AUTO_PLAY,
PreferenceManager.getDefaultSharedPreferences(this)
.getBoolean(getString(R.string.autoPlayThroughIntent), false));
.getBoolean(getString(R.string.autoplay_through_intent_key), false));
} else {
videoUrl = getIntent().getStringExtra(VideoItemDetailFragment.VIDEO_URL);
currentStreamingService = getIntent().getIntExtra(VideoItemDetailFragment.STREAMING_SERVICE, -1);
@ -113,6 +113,12 @@ public class VideoItemDetailActivity extends AppCompatActivity {
.commit();
}
@Override
public void onResume() {
super.onResume();
App.checkStartTor(this);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString(VideoItemDetailFragment.VIDEO_URL, videoUrl);

View File

@ -1,9 +1,7 @@
package org.schabi.newpipe;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@ -35,13 +33,7 @@ import android.view.MenuItem;
import android.widget.Toast;
import java.net.URL;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Vector;
import org.schabi.newpipe.services.VideoExtractor;
@ -235,7 +227,7 @@ public class VideoItemDetailFragment extends Fragment {
switch (info.errorCode) {
case VideoInfo.NO_ERROR: {
View nextVideoView = videoItemViewCreator
.getViewFromVideoInfoItem(null, nextVideoFrame, info.nextVideo);
.getViewFromVideoInfoItem(null, nextVideoFrame, info.nextVideo, getContext());
nextVideoFrame.addView(nextVideoView);
@ -253,31 +245,20 @@ public class VideoItemDetailFragment extends Fragment {
uploaderView.setText(info.uploader);
actionBarHandler.setChannelName(info.uploader);
Locale locale = getPreferredLocale();
NumberFormat nf = NumberFormat.getInstance(locale);
String localisedViewCount = nf.format(info.view_count);
viewCountView.setText(
String.format(
res.getString(R.string.viewCountText), localisedViewCount));
String localizedViewCount = Localization.localizeViewCount(info.view_count, getContext());
viewCountView.setText(localizedViewCount);
thumbsUpView.setText(nf.format(info.like_count));
thumbsDownView.setText(nf.format(info.dislike_count));
String localizedLikeCount = Localization.localizeNumber(info.like_count, getContext());
thumbsUpView.setText(localizedLikeCount);
@SuppressLint("SimpleDateFormat")
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date datum = null;
try {
datum = formatter.parse(info.upload_date);
} catch (ParseException e) {
e.printStackTrace();
}
String localizedDislikeCount = Localization.localizeNumber(info.dislike_count, getContext());
thumbsDownView.setText(localizedDislikeCount);
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
String localizedDate = Localization.localizeDate(info.upload_date, getContext());
uploadDateView.setText(localizedDate);
String localisedDate = df.format(datum);
uploadDateView.setText(
String.format(res.getString(R.string.uploadDateText), localisedDate));
descriptionView.setText(Html.fromHtml(info.description));
descriptionView.setMovementMethod(LinkMovementMethod.getInstance());
actionBarHandler.setServiceId(streamingServiceId);
@ -306,7 +287,7 @@ public class VideoItemDetailFragment extends Fragment {
VideoItemDetailFragment.ARG_ITEM_ID, currentVideoInfo.nextVideo.id); */
detailIntent.putExtra(
VideoItemDetailFragment.VIDEO_URL, currentVideoInfo.nextVideo.webpage_url);
//todo: make id dynamic the following line is crap
detailIntent.putExtra(VideoItemDetailFragment.STREAMING_SERVICE, streamingServiceId);
startActivity(detailIntent);
}
@ -315,13 +296,13 @@ public class VideoItemDetailFragment extends Fragment {
break;
case VideoInfo.ERROR_BLOCKED_BY_GEMA:
thumbnailView.setImageBitmap(BitmapFactory.decodeResource(
getResources(), R.drawable.gruese_die_gema_unangebracht));
getResources(), R.drawable.gruese_die_gema));
backgroundButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(activity.getString(R.string.c3sUrl)));
intent.setData(Uri.parse(activity.getString(R.string.c3s_url)));
activity.startActivity(intent);
}
});
@ -364,7 +345,7 @@ public class VideoItemDetailFragment extends Fragment {
super.onCreate(savedInstanceState);
activity = (AppCompatActivity) getActivity();
showNextVideoItem = PreferenceManager.getDefaultSharedPreferences(getActivity())
.getBoolean(activity.getString(R.string.showNextVideo), true);
.getBoolean(activity.getString(R.string.show_next_video_key), true);
}
@ -458,30 +439,6 @@ public class VideoItemDetailFragment extends Fragment {
}
}
/**Returns the java.util.Locale object which corresponds to the locale set in NewPipe's preferences.
* Currently not affected by the device's locale.*/
private Locale getPreferredLocale() {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
String languageKey = getContext().getString(R.string.searchLanguage);
//i know the following line defaults languageCode to "en", but java is picky about uninitialised values
// Schabi: well lint tels me the value is redundant. I'll suppress it for now.
@SuppressWarnings("UnusedAssignment")
String languageCode = "en";
languageCode = sp.getString(languageKey, "en");
if(languageCode.length() == 2) {
return new Locale(languageCode);
}
else if(languageCode.contains("_")) {
String country = languageCode
.substring(languageCode.indexOf("_"), languageCode.length());
return new Locale(languageCode.substring(0, 2), country);
}
return Locale.getDefault();
}
private boolean checkIfLandscape() {
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

View File

@ -3,6 +3,7 @@ package org.schabi.newpipe;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NavUtils;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
@ -171,7 +172,13 @@ public class VideoItemListActivity extends AppCompatActivity
}
}
SettingsActivity.initSettings(this);
PreferenceManager.setDefaultValues(this, R.xml.settings, false);
}
@Override
public void onResume() {
super.onResume();
App.checkStartTor(this);
}
/**

View File

@ -66,6 +66,9 @@ public class VideoItemListFragment extends ListFragment {
private View footer;
// used to suppress request for loading a new page while another page is already loading.
private boolean loadingNextPage = true;
private class ResultRunnable implements Runnable {
private final SearchEngine.Result result;
private final int requestId;
@ -76,6 +79,9 @@ public class VideoItemListFragment extends ListFragment {
@Override
public void run() {
updateListOnResult(result, requestId);
if (android.os.Build.VERSION.SDK_INT >= 19) {
getListView().removeFooterView(footer);
}
}
}
@ -84,7 +90,7 @@ public class VideoItemListFragment extends ListFragment {
private final String query;
private final int page;
final Handler h = new Handler();
private volatile boolean run = true;
private volatile boolean runs = true;
private final int requestId;
public SearchRunnable(SearchEngine engine, String query, int page, int requestId) {
this.engine = engine;
@ -93,17 +99,18 @@ public class VideoItemListFragment extends ListFragment {
this.requestId = requestId;
}
void terminate() {
run = false;
runs = false;
}
@Override
public void run() {
try {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
String searchLanguageKey = getContext().getString(R.string.searchLanguage);
String searchLanguage = sp.getString(searchLanguageKey, "en");
String searchLanguageKey = getContext().getString(R.string.search_language_key);
String searchLanguage = sp.getString(searchLanguageKey,
getString(R.string.default_language_value));
SearchEngine.Result result = engine.search(query, page, searchLanguage);
Log.i(TAG, "language code passed:\""+searchLanguage+"\"");
if(run) {
if(runs) {
h.post(new ResultRunnable(result, requestId));
}
} catch(Exception e) {
@ -111,19 +118,11 @@ public class VideoItemListFragment extends ListFragment {
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity(), "Network Error", Toast.LENGTH_SHORT).show();
Toast.makeText(getActivity(), getString(R.string.network_error),
Toast.LENGTH_SHORT).show();
}
});
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (android.os.Build.VERSION.SDK_INT >= 19) {
getListView().removeFooterView(footer);
}
}
});
}
}
@ -203,8 +202,9 @@ public class VideoItemListFragment extends ListFragment {
}
private void nextPage() {
loadingNextPage = true;
lastPage++;
Log.d(TAG, getString(R.string.searchPage) + Integer.toString(lastPage));
Log.d(TAG, getString(R.string.search_page) + Integer.toString(lastPage));
startSearch(query, lastPage);
}
@ -228,7 +228,7 @@ public class VideoItemListFragment extends ListFragment {
Toast.makeText(getActivity(), result.errorMessage, Toast.LENGTH_LONG).show();
} else {
if (!result.suggestion.isEmpty()) {
Toast.makeText(getActivity(), getString(R.string.didYouMean) + result.suggestion + " ?",
Toast.makeText(getActivity(), getString(R.string.did_you_mean) + result.suggestion + " ?",
Toast.LENGTH_LONG).show();
}
updateList(result.resultList);
@ -248,6 +248,8 @@ public class VideoItemListFragment extends ListFragment {
Log.w(TAG, "Trying to set value while activity doesn't exist anymore.");
} catch(Exception e) {
e.printStackTrace();
} finally {
loadingNextPage = false;
}
}
@ -297,7 +299,8 @@ public class VideoItemListFragment extends ListFragment {
super.onViewCreated(view, savedInstanceState);
list = getListView();
videoListAdapter = new VideoListAdapter(getActivity(), this);
footer = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.paginate_footer, null, false);
footer = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
.inflate(R.layout.paginate_footer, null, false);
setListAdapter(videoListAdapter);
@ -318,13 +321,15 @@ public class VideoItemListFragment extends ListFragment {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (mode != PRESENT_VIDEOS_MODE
&& list.getChildAt(0) != null
&& list.getLastVisiblePosition() == list.getAdapter().getCount() - 1
&& list.getChildAt(list.getChildCount() - 1).getBottom() <= list.getHeight()) {
long time = System.currentTimeMillis();
if ((time - lastScrollDate) > 200) {
if ((time - lastScrollDate) > 200
&& !loadingNextPage) {
lastScrollDate = time;
getListView().addFooterView(footer);
nextPage();

View File

@ -96,10 +96,10 @@ class VideoListAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = viewCreator.getViewFromVideoInfoItem(convertView, parent, videoList.get(position));
convertView = viewCreator.getViewFromVideoInfoItem(convertView, parent, videoList.get(position), context);
if(listView.isItemChecked(position)) {
convertView.setBackgroundColor(ContextCompat.getColor(context,R.color.primaryColorYoutube));
convertView.setBackgroundColor(ContextCompat.getColor(context,R.color.light_youtube_primary_color));
} else {
convertView.setBackgroundColor(0);
}

View File

@ -106,7 +106,7 @@ public abstract class VideoExtractor {
return videoInfo;
}
//todo: add licence field
public abstract int getErrorCode();
public abstract String getErrorMessage();

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

View File

@ -11,7 +11,7 @@
android:id="@+id/videoitem_detail">
<ImageView android:id="@+id/detailThumbnailView"
android:contentDescription="@string/detailThumbnailViewDescription"
android:contentDescription="@string/detail_thumbnail_view_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
@ -51,7 +51,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:backgroundTint="@color/primaryColorYoutube"
app:backgroundTint="@color/light_youtube_primary_color"
android:src="@drawable/ic_play_arrow_black"
android:layout_margin="@dimen/video_item_detail_play_fab_margin"/>
@ -69,7 +69,7 @@
android:layout_height="wrap_content"
android:padding="@dimen/video_item_detail_info_text_padding"
android:layout_below="@id/detailVideoThumbnailWindowLayout"
android:background="@color/background_gray">
android:background="@color/light_background_color">
<TextView android:id="@+id/detailVideoTitleView"
android:layout_width="wrap_content"
@ -82,7 +82,7 @@
tools:ignore="RtlHardcoded" />
<ImageView android:id="@+id/detailUploaderThumbnailView"
android:contentDescription="@string/detailUploaderThumbnailViewDescription"
android:contentDescription="@string/detail_uploader_thumbnail_view_description"
android:layout_width="@dimen/video_item_detail_uploader_image_size"
android:layout_height="@dimen/video_item_detail_uploader_image_size"
android:layout_below="@id/detailVideoTitleView"
@ -123,7 +123,7 @@
tools:ignore="RtlHardcoded" />
<ImageView android:id="@+id/detailThumbsDownImgView"
android:contentDescription="@string/detailThumbsDownImgViewDescription"
android:contentDescription="@string/detail_dislikes_img_view_description"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detailViewCountView"
@ -144,7 +144,7 @@
tools:ignore="RtlHardcoded" />
<ImageView android:id="@+id/detailThumbsUpImgView"
android:contentDescription="@string/detailThumbsUpImgViewDescription"
android:contentDescription="@string/detail_likes_img_view_description"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detailViewCountView"
@ -186,7 +186,7 @@
android:layout_centerHorizontal="true"
android:textSize="@dimen/video_item_detail_next_text_size"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/nextVideoTitle"
android:text="@string/next_video_title"
android:textAllCaps="true" />
<RelativeLayout android:id="@+id/detailNextVidButtonAndContentLayout"
@ -210,7 +210,7 @@
android:layout_height="wrap_content"
android:layout_below="@id/detailNextVidButtonAndContentLayout"
android:textSize="@dimen/video_item_detail_similar_text_size"
android:text="@string/showSimilarVideosButtonText"/>
android:text="@string/similar_videos_btn_text"/>
</RelativeLayout>
</RelativeLayout>

View File

@ -11,7 +11,7 @@
android:id="@+id/videoitem_detail">
<ImageView android:id="@+id/detailThumbnailView"
android:contentDescription="@string/detailThumbnailViewDescription"
android:contentDescription="@string/detail_thumbnail_view_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
@ -44,7 +44,7 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminate="true"
android:indeterminateTint="@color/primaryColorYoutube"
android:indeterminateTint="@color/light_youtube_primary_color"
android:indeterminateTintMode="src_in"/>
<android.support.design.widget.FloatingActionButton
@ -53,7 +53,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:backgroundTint="@color/primaryColorYoutube"
app:backgroundTint="@color/light_youtube_primary_color"
android:src="@drawable/ic_play_arrow_black"
android:layout_margin="@dimen/video_item_detail_play_fab_margin"/>
@ -71,7 +71,7 @@
android:layout_height="wrap_content"
android:padding="@dimen/video_item_detail_info_text_padding"
android:layout_below="@id/detailVideoThumbnailWindowLayout"
android:background="@color/background_gray">
android:background="@color/light_background_color">
<TextView android:id="@+id/detailVideoTitleView"
android:layout_width="wrap_content"
@ -84,7 +84,7 @@
tools:ignore="RtlHardcoded" />
<ImageView android:id="@+id/detailUploaderThumbnailView"
android:contentDescription="@string/detailUploaderThumbnailViewDescription"
android:contentDescription="@string/detail_uploader_thumbnail_view_description"
android:layout_width="@dimen/video_item_detail_uploader_image_size"
android:layout_height="@dimen/video_item_detail_uploader_image_size"
android:layout_below="@id/detailVideoTitleView"
@ -125,7 +125,7 @@
tools:ignore="RtlHardcoded" />
<ImageView android:id="@+id/detailThumbsDownImgView"
android:contentDescription="@string/detailThumbsDownImgViewDescription"
android:contentDescription="@string/detail_dislikes_img_view_description"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detailViewCountView"
@ -146,7 +146,7 @@
tools:ignore="RtlHardcoded" />
<ImageView android:id="@+id/detailThumbsUpImgView"
android:contentDescription="@string/detailThumbsUpImgViewDescription"
android:contentDescription="@string/detail_likes_img_view_description"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detailViewCountView"
@ -188,7 +188,7 @@
android:layout_centerHorizontal="true"
android:textSize="@dimen/video_item_detail_next_text_size"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/nextVideoTitle"
android:text="@string/next_video_title"
android:textAllCaps="true" />
<RelativeLayout android:id="@+id/detailNextVidButtonAndContentLayout"
@ -212,7 +212,7 @@
android:layout_height="wrap_content"
android:layout_below="@id/detailNextVidButtonAndContentLayout"
android:textSize="@dimen/video_item_detail_similar_text_size"
android:text="@string/showSimilarVideosButtonText"/>
android:text="@string/similar_videos_btn_text"/>
</RelativeLayout>
</RelativeLayout>

View File

@ -28,7 +28,7 @@
android:background="?attr/selectableItemBackground">
<ImageView android:id="@+id/detailThumbnailView"
android:contentDescription="@string/detailThumbnailViewDescription"
android:contentDescription="@string/detail_thumbnail_view_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
@ -51,7 +51,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:backgroundTint="@color/primaryColorYoutube"
app:backgroundTint="@color/light_youtube_primary_color"
android:src="@drawable/ic_play_arrow_black"
android:layout_margin="@dimen/video_item_detail_play_fab_margin"/>
@ -69,7 +69,7 @@
android:layout_height="wrap_content"
android:padding="@dimen/video_item_detail_info_text_padding"
android:layout_below="@id/detailVideoThumbnailWindowLayout"
android:background="@color/background_gray">
android:background="@color/light_background_color">
<TextView android:id="@+id/detailVideoTitleView"
android:layout_width="wrap_content"
@ -81,7 +81,7 @@
android:textAppearance="?android:attr/textAppearanceLarge"/>
<ImageView android:id="@+id/detailUploaderThumbnailView"
android:contentDescription="@string/detailUploaderThumbnailViewDescription"
android:contentDescription="@string/detail_uploader_thumbnail_view_description"
android:layout_width="@dimen/video_item_detail_uploader_image_size"
android:layout_height="@dimen/video_item_detail_uploader_image_size"
android:layout_below="@id/detailVideoTitleView"
@ -118,12 +118,13 @@
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView android:id="@+id/detailThumbsDownImgView"
android:contentDescription="@string/detailThumbsDownImgViewDescription"
android:contentDescription="@string/detail_dislikes_img_view_description"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detailViewCountView"
android:layout_toLeftOf="@id/detailThumbsDownCountView"
android:layout_toStartOf="@id/detailThumbsDownCountView"
android:layout_marginLeft="@dimen/video_item_detail_like_margin"
android:src="@drawable/thumbs_down" />
<TextView android:id="@+id/detailThumbsUpCountView"
@ -136,7 +137,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"/>
<ImageView android:id="@+id/detailThumbsUpImgView"
android:contentDescription="@string/detailThumbsUpImgViewDescription"
android:contentDescription="@string/detail_likes_img_view_description"
android:layout_width="@dimen/video_item_detail_like_image_width"
android:layout_height="@dimen/video_item_detail_like_image_height"
android:layout_below="@id/detailViewCountView"
@ -175,7 +176,7 @@
android:layout_centerHorizontal="true"
android:textSize="@dimen/video_item_detail_next_text_size"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/nextVideoTitle"
android:text="@string/next_video_title"
android:textAllCaps="true" />
<RelativeLayout android:id="@+id/detailNextVidButtonAndContentLayout"
@ -199,7 +200,7 @@
android:layout_height="wrap_content"
android:layout_below="@id/detailNextVidButtonAndContentLayout"
android:textSize="@dimen/video_item_detail_similar_text_size"
android:text="@string/showSimilarVideosButtonText"/>
android:text="@string/similar_videos_btn_text"/>
</RelativeLayout>
</RelativeLayout>

View File

@ -8,7 +8,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Loading"
android:text="@string/loading"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ProgressBar

View File

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:background="@color/background_notification_color"
tools:targetApi="jelly_bean">
<ImageView
android:id="@+id/backgroundCover"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@drawable/dummy_thumbnail"
android:scaleType="centerCrop"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/backgroundSongName"
style="@android:style/TextAppearance.StatusBar.EventContent.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:text="title" />
<TextView
android:id="@+id/backgroundArtist"
style="@android:style/TextAppearance.StatusBar.EventContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:text="artist" />
</LinearLayout>
<ImageButton
android:id="@+id/backgroundPlayPause"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="5dp"
android:background="#00ffffff"
android:clickable="true"
android:scaleType="fitXY"
android:src="@drawable/ic_play_arrow_white_48dp" />
<ImageButton
android:id="@+id/backgroundStop"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="5dp"
android:background="#00ffffff"
android:clickable="true"
android:scaleType="fitXY"
android:src="@drawable/ic_close_white_24dp" />
</LinearLayout>

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:background="@color/background_notification_color"
tools:targetApi="jelly_bean" >
<ImageView
android:id="@+id/backgroundCover"
android:layout_width="128dp"
android:layout_height="128dp"
android:layout_marginRight="8dp"
android:src="@drawable/dummy_thumbnail"
android:scaleType="centerCrop"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/backgroundButtons"
android:layout_toRightOf="@+id/backgroundCover"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/backgroundSongName"
style="@android:style/TextAppearance.StatusBar.EventContent.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="40dp"
android:ellipsize="marquee"
android:singleLine="true"
android:text="title" />
<TextView
android:id="@+id/backgroundArtist"
style="@android:style/TextAppearance.StatusBar.EventContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:text="artist" />
</LinearLayout>
<ImageButton
android:id="@+id/backgroundStop"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_margin="5dp"
android:background="#00ffffff"
android:clickable="true"
android:scaleType="fitXY"
android:src="@drawable/ic_close_white_24dp" />
<LinearLayout
android:id="@+id/backgroundButtons"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_alignBottom="@id/backgroundCover"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/backgroundCover"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/backgroundPlayPause"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_weight="1"
android:background="#00ffffff"
android:clickable="true"
android:scaleType="centerInside"
android:src="@drawable/ic_play_arrow_white_48dp" />
</LinearLayout>
</RelativeLayout>

View File

@ -32,7 +32,7 @@
tools:ignore="RtlHardcoded">
<ImageView android:id="@+id/itemThumbnailView"
android:contentDescription="@string/itemThumbnailViewDescription"
android:contentDescription="@string/list_thumbnail_view_description"
android:layout_width="@dimen/video_item_search_thumbnail_image_width"
android:layout_height="@dimen/video_item_search_thumbnail_image_height"
android:scaleType="centerCrop"
@ -56,8 +56,8 @@
android:paddingLeft="@dimen/video_item_search_duration_horizontal_padding"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="@dimen/video_item_search_duration_text_size"
android:background="@color/durationBackground"
android:textColor="@color/durationText"/>
android:background="@color/duration_dackground_color"
android:textColor="@color/duration_text_color"/>
</RelativeLayout>

View File

@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_item_screen_rotation"
android:title="@string/screenRotation"
android:title="@string/screen_rotation"
app:showAsAction="always"
android:icon="@drawable/ic_screen_rotation_white"/>
</menu>

View File

@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_item_play_audio"
android:title="@string/playAudio"
android:title="@string/play_audio"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_headset_black" />
@ -18,7 +18,7 @@
android:icon="@drawable/ic_share_black"/>
<item android:id="@+id/action_play_with_kodi"
android:title="@string/playWithKodiTitle"
android:title="@string/play_with_kodi_title"
app:showAsAction="ifRoom"
android:icon="@drawable/ic_cast_black"/>

View File

@ -1,53 +1,59 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="viewCountText">%1$s Aufrufe</string>
<string name="uploadDateText">Hochgeladen am %1$s</string>
<string name="noPlayerFound">Keinen Streamplayer gefunden. Vielleicht möchtest du einen installieren.</string>
<string name="installStreamPlayer">Jetzt installieren</string>
<string name="view_count_text">%1$s Aufrufe</string>
<string name="upload_date_text">Hochgeladen am %1$s</string>
<string name="no_player_found">Keinen Streamplayer gefunden. Vielleicht möchtest du einen installieren.</string>
<string name="install">Jetzt installieren</string>
<string name="cancel">Abbrechen</string>
<string name="open_in_browser">In Browser öffnen</string>
<string name="share">Teilen</string>
<string name="download">Download</string>
<string name="search">Suchen</string>
<string name="settings">Einstellungen</string>
<string name="didYouMean">Meintest du: </string>
<string name="searchPage">Suchseite: </string>
<string name="shareDialogTitle">Teilen mit:</string>
<string name="chooseBrowser">Browser:</string>
<string name="screenRotation">Rotation</string>
<string name="title_activity_settings">Einstellungen</string>
<string name="did_you_mean">Meintest du: </string>
<string name="search_page">Suchseite: </string>
<string name="share_dialog_title">Teilen mit:</string>
<string name="choose_browser">Browser:</string>
<string name="screen_rotation">Rotation</string>
<string name="settings_activity_title">Einstellungen</string>
<string name="useExternalPlayerTitle">Externen Player benutzen</string>
<string name="downloadLocation">Downloadverzeichnis</string>
<string name="downloadLocationSummary">Verzeichnis in dem heruntergeladene Videos gespeichert werden.</string>
<string name="downloadLocationDialogTitle">Download Verzeichnis eingeben</string>
<string name="autoPlayThroughIntentTitle">Automatisches Abspielen durch Intent</string>
<string name="autoPlayThroughIntentSummary">Startet ein Video automatisch wenn es von einer anderen App aufgerufen wurde.</string>
<string name="defaultResolutionPreferenceTitle">Standard Auflösung</string>
<string name="playWithKodiTitle">Mit Kodi abspielen</string>
<string name="koreNotFound">Kore app wurde nicht gefunden. Kore wird benötigt, um Videos mit Kodi wieder zu geben.</string>
<string name="download_path_title">Downloadverzeichnis</string>
<string name="download_path_summary">Verzeichnis in dem heruntergeladene Videos gespeichert werden.</string>
<string name="download_path_dialog_title">Download Verzeichnis eingeben</string>
<string name="autoplay_through_intent_title">Automatisches Abspielen durch Intent</string>
<string name="autoplay_through_intent_summary">Startet ein Video automatisch wenn es von einer anderen App aufgerufen wurde.</string>
<string name="default_resolution_title">Standard Auflösung</string>
<string name="play_with_kodi_title">Mit Kodi abspielen</string>
<string name="kore_not_found">Kore app wurde nicht gefunden. Kore wird benötigt, um Videos mit Kodi wieder zu geben.</string>
<string name="installeKore">Kore installieren</string>
<string name="showPlayWithKodiTitle">Zeige \"Mit Kodi abspielen\" Option</string>
<string name="showPlayWithKodiSummary">Zeigt eine Option an, über die man Videos mit dem Kodi Mediacenter abspielen kann.</string>
<string name="playAudio">Audio</string>
<string name="defaultAudioFormatTitle">Bevorzugtes Audio Format</string>
<string name="webMAudioDescription">WebM - freies Format</string>
<string name="m4aAudioDescription">m4a - bessere Qualität</string>
<string name="downloadDialogTitle">Herunterladen</string>
<string name="show_play_with_kodi_title">Zeige \"Mit Kodi abspielen\" Option</string>
<string name="show_play_with_kodi_summary">Zeigt eine Option an, über die man Videos mit dem Kodi Mediacenter abspielen kann.</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Bevorzugtes Audio Format</string>
<string name="webm_description">WebM &#8212; freies Format</string>
<string name="m4a_description">m4a &#8212; bessere Qualität</string>
<string name="download_dialog_title">Herunterladen</string>
<string-array name="downloadOptions">
<item>Video</item>
<item>Audio</item>
</string-array>
<string name="nextVideoTitle">Nächstes Video</string>
<string name="showNextAndSimilarTitle">Zeige nächstes und ähnliche Videos</string>
<string name="urlNotSupportedText">URL wird nicht unterstützt.</string>
<string name="showSimilarVideosButtonText">Ähnliche Videos</string>
<string name="settingsCategoryVideoAudioTitle">VIDEO &amp; AUDIO</string>
<string name="settingsCategoryVideoInfoTittle">INFO</string>
<string name="settingsCategoryEtcTitle">ETC</string>
<string name="searchLanguageTitle">Bevorzugte Sprache</string>
<string name="itemThumbnailViewDescription">Video-Vorschau-Bild</string>
<string name="detailThumbnailViewDescription">Video-Vorschau-Bild</string>
<string name="detailUploaderThumbnailViewDescription">Nutzerbild</string>
<string name="detailThumbsDownImgViewDescription">gefällt nicht</string>
<string name="detailThumbsUpImgViewDescription">gefällt</string>
<string name="next_video_title">Nächstes Video</string>
<string name="show_next_and_similar_title">Zeige nächstes und ähnliche Videos</string>
<string name="url_not_supported_toast">URL wird nicht unterstützt.</string>
<string name="similar_videos_btn_text">Ähnliche Videos</string>
<string name="settings_category_video_audio_title">Video &amp; Audio</string>
<string name="search_language_title">Bevorzugte Sprache des Inhalts</string>
<string name="list_thumbnail_view_description">Video-Vorschau-Bild</string>
<string name="detail_thumbnail_view_description">Video-Vorschau-Bild</string>
<string name="detail_uploader_thumbnail_view_description">Nutzerbild</string>
<string name="detail_dislikes_img_view_description">Gefällt nicht</string>
<string name="detail_likes_img_view_description">Gefällt</string>
<string name="loading">Lade</string>
<string name="use_external_video_player_title">Benutze externen Videoabspieler</string>
<string name="use_external_audio_player_title">Benutze externen Audioabspieler</string>
<string name="background_player_playing_toast">Spiele im Hintergrund ab</string>
<string name="play_btn_text">Abspielen</string>
<string name="use_tor_title">Benutze TOR</string>
<string name="use_tor_summary">Erzwinge das Herunterladen durch TOR für verbesserte Privatsphäre (Videostream noch nicht unterstützt)</string>
</resources>

View File

@ -1,39 +1,39 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="viewCountText">%1$s visitas</string>
<string name="uploadDateText">Subido el %1$s</string>
<string name="noPlayerFound">No se ha encontrado ningún reproductor de vídeo. Quizás quieras instalar alguno.</string>
<string name="installStreamPlayer">Instalarlo</string>
<string name="view_count_text">%1$s visitas</string>
<string name="upload_date_text">Subido el %1$s</string>
<string name="no_player_found">No se ha encontrado ningún reproductor de vídeo. Quizás quieras instalar alguno.</string>
<string name="install">Instalarlo</string>
<string name="cancel">Cancelar</string>
<string name="open_in_browser">Abrir en el navegador</string>
<string name="share">Compartir</string>
<string name="download">Descargar</string>
<string name="search">Buscar</string>
<string name="settings">Ajustes</string>
<string name="didYouMean">"¿Querías decir?: "</string>
<string name="searchPage">Buscar página: </string>
<string name="shareDialogTitle">Compartir con:</string>
<string name="chooseBrowser">Selecciona navegador:</string>
<string name="screenRotation">rotación</string>
<string name="title_activity_settings">Ajustes</string>
<string name="did_you_mean">"¿Querías decir?: "</string>
<string name="search_page">Buscar página: </string>
<string name="share_dialog_title">Compartir con:</string>
<string name="choose_browser">Selecciona navegador:</string>
<string name="screen_rotation">rotación</string>
<string name="settings_activity_title">Ajustes</string>
<string name="useExternalPlayerTitle">Usar reproductor externo</string>
<string name="downloadLocation">Descargar en&#8230;</string>
<string name="downloadLocationSummary">Ruta donde guardar los vídeos descargados.</string>
<string name="downloadLocationDialogTitle">Localización del directorio de descargas</string>
<string name="autoPlayThroughIntentTitle">Reproducción automática</string>
<string name="autoPlayThroughIntentSummary">Reproducir los vídeos automaticamente cuando se llama desde otra aplicación.</string>
<string name="defaultResolutionPreferenceTitle">Resolución por defecto</string>
<string name="playWithKodiTitle">Reproducir con Kodi</string>
<string name="koreNotFound">Aplicación Kore no encontrada. Kore es necesario para reproducir vídeos con Kodi media center.</string>
<string name="download_path_title">Descargar en&#8230;</string>
<string name="download_path_summary">Ruta donde guardar los vídeos descargados.</string>
<string name="download_path_dialog_title">Localización del directorio de descargas</string>
<string name="autoplay_through_intent_title">Reproducción automática</string>
<string name="autoplay_through_intent_summary">Reproducir los vídeos automaticamente cuando se llama desde otra aplicación.</string>
<string name="default_resolution_title">Resolución por defecto</string>
<string name="play_with_kodi_title">Reproducir con Kodi</string>
<string name="kore_not_found">Aplicación Kore no encontrada. Kore es necesario para reproducir vídeos con Kodi media center.</string>
<string name="installeKore">Instalar Kore</string>
<string name="showPlayWithKodiTitle">Mostrar la opción \"Reproducir con Kodi\"</string>
<string name="showPlayWithKodiSummary">Muestra una opción para reproducir el vídeo con Kodi media center.</string>
<string name="playAudio">Audio</string>
<string name="defaultAudioFormatTitle">Formato de audio por defecto</string>
<string name="webMAudioDescription">WebM - formato libre</string>
<string name="m4aAudioDescription">m4a - mejor calidad</string>
<string name="downloadDialogTitle">Descargar</string>
<string name="nextVideoTitle">Siguiente vídeo</string>
<string name="urlNotSupportedText">URL no soportada.</string>
<string name="showSimilarVideosButtonText">Vídeos similares</string>
<string name="show_play_with_kodi_title">Mostrar la opción \"Reproducir con Kodi\"</string>
<string name="show_play_with_kodi_summary">Muestra una opción para reproducir el vídeo con Kodi media center.</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Formato de audio por defecto</string>
<string name="webm_description">WebM &#8212; formato libre</string>
<string name="m4a_description">m4a &#8212; mejor calidad</string>
<string name="download_dialog_title">Descargar</string>
<string name="next_video_title">Siguiente vídeo</string>
<string name="url_not_supported_toast">URL no soportada.</string>
<string name="similar_videos_btn_text">Vídeos similares</string>
</resources>

View File

@ -0,0 +1,54 @@
<?xml version='1.0' encoding='utf-8'?>
<resources><string name="view_count_text">%1$s ikustaldi</string>
<string name="upload_date_text">Argitaratze-data: %1$s</string>
<string name="install">Instalatu</string>
<string name="cancel">Utzi</string>
<string name="open_in_browser">Nabigatzailean ireki</string>
<string name="share">Partekatu</string>
<string name="loading">Kargatzen</string>
<string name="download">Deskargatu</string>
<string name="search">Bilatu</string>
<string name="settings">Ezarpenak</string>
<string name="share_dialog_title">Partekatu honekin:</string>
<string name="choose_browser">Nabigatzailea aukeratu:</string>
<string name="screen_rotation">biratzea</string>
<string name="settings_activity_title">Ezarpenak</string>
<string name="download_path_title">Deskargatzeko kokapena</string>
<string name="download_path_summary">Deskargatutako bideoak gordetzeko lekua.</string>
<string name="download_path_dialog_title">Sar ezazu deskargatzeko lekua</string>
<string name="default_resolution_title">Lehenetsitako bereizmena</string>
<string name="play_with_kodi_title">Kodirekin erreproduzitu</string>
<string name="kore_not_found">Kore aplikazioa ez da aurkitu. Kore beharrezkoa da Kodi multimedia zentroarekin bideoak erreproduzitzeko.</string>
<string name="installeKore">Kore instalatu</string>
<string name="show_play_with_kodi_title">\"Kodirekin erreproduzitu\" aukera erakutsi</string>
<string name="show_play_with_kodi_summary">Kodi multimedia zentroarekin bideoa erreproduzitzeko aukera erakusten du.</string>
<string name="play_audio">Audioa</string>
<string name="default_audio_format_title">Audio formatu lehenetsia</string>
<string name="webm_description">WebM &#8212; formatu askea</string>
<string name="m4a_description">m4a &#8212; kalitate hobea</string>
<string name="download_dialog_title">Deskargatu</string>
<string name="next_video_title">Hurrengo bideoa</string>
<string name="show_next_and_similar_title">Hurrengo bideoa eta antzekoak erakutsi</string>
<string name="url_not_supported_toast">URLa ez da onartzen.</string>
<string name="similar_videos_btn_text">Antzeko bideoak</string>
<string name="search_language_title">Edukiaren hizkuntz lehenetsia</string>
<string name="settings_category_video_audio_title">Bideoa eta Audioa</string>
<string name="play_btn_text">Erreproduzitu</string>
<string name="list_thumbnail_view_description">Bideoaren aurreikuspen argazkitxoa</string>
<string name="detail_thumbnail_view_description">Bideoaren aurreikuspen argazkitxoa</string>
<string name="detail_uploader_thumbnail_view_description">Igotzailearen argazkitxoa</string>
<string name="detail_dislikes_img_view_description">Ez dute gustoko</string>
<string name="detail_likes_img_view_description">Gustoko dute</string>
<string name="use_tor_title">Tor erabili</string>
<string name="use_tor_summary">Trafikoa Tor bidez deskargatzea behartzen du pribatutasuna hobetzeko (jario bideoak ez daude oraindik onartuta)</string>
<string name="background_player_name">NewPipe atzeko planoko erreproduzitzailea</string>
<string name="no_player_found">Jario erreproduzitzailerik ez da aurkitu. Agian bat instalatu nahi dezakezu.</string>
<string name="did_you_mean">"Hau esan nahi al zenuen: "</string>
<string name="search_page">"Orrialdea bilatu: "</string>
<string name="use_external_video_player_title">Kanpoko bideo erreproduzitzailea erabili</string>
<string name="use_external_audio_player_title">Kanpoko audio erreproduzitzailea erabili</string>
<string name="autoplay_through_intent_title">Intent bidez automatikoki erreproduzitu</string>
<string name="autoplay_through_intent_summary">Bideoa automatikoki hasten du beste aplikazio batetik deitu denean.</string>
<string name="background_player_playing_toast">Atzeko planoan erreproduzitzen</string>
</resources>

View File

@ -1,42 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="viewCountText">%1$s نماها</string>
<string name="uploadDateText">بارگذاری‌شده در: %1$s</string>
<string name="noPlayerFound">هیچ پخش‌کننده‌ی جریانی یافت نشد. ممکن است بخواهید یکی نصب کنید.</string>
<string name="installStreamPlayer">نصب کنید</string>
<string name="view_count_text">%1$s نماها</string>
<string name="upload_date_text">بارگذاری‌شده در: %1$s</string>
<string name="no_player_found">هیچ پخش‌کننده‌ی جریانی یافت نشد. ممکن است بخواهید یکی نصب کنید.</string>
<string name="install">نصب کنید</string>
<string name="cancel">انصراف</string>
<string name="open_in_browser">بازکردن در مرورگر</string>
<string name="share">هم‌رسانی</string>
<string name="download">بارگیری</string>
<string name="search">جستجو</string>
<string name="settings">تنظیمات</string>
<string name="didYouMean">منظورتان این است: </string>
<string name="searchPage">صفحه‌ی جستجو: </string>
<string name="shareDialogTitle">هم‌رسانی با:</string>
<string name="chooseBrowser">مرورگر را برگزینید:</string>
<string name="screenRotation">چرخش</string>
<string name="title_activity_settings">تنظیمات</string>
<string name="did_you_mean">منظورتان این است: </string>
<string name="search_page">صفحه‌ی جستجو: </string>
<string name="share_dialog_title">هم‌رسانی با:</string>
<string name="choose_browser">مرورگر را برگزینید:</string>
<string name="screen_rotation">چرخش</string>
<string name="settings_activity_title">تنظیمات</string>
<string name="useExternalPlayerTitle">استفاده از پخش‌کننده‌ی خارجی</string>
<string name="downloadLocation">محل بارگیری</string>
<string name="downloadLocationSummary">مسیری که ویدئوهای دریافت شده در آن ذخیره می‌شوند.</string>
<string name="downloadLocationDialogTitle">مسیر دریافت را وارد کنید</string>
<string name="autoPlayThroughIntentTitle">پخش خودکار از Intent</string>
<string name="autoPlayThroughIntentSummary">ویدئو هنگامی که از برنامه‌ی دیگری فراخوانده شد خودکار پخش می‌شود.</string>
<string name="defaultResolutionPreferenceTitle">وضوح پیش‌فرض</string>
<string name="playWithKodiTitle">پخش با Kodi</string>
<string name="koreNotFound">برنامه‌ی Kore نصب نیست. برای پخش کردن ویدئوها با مرکز رسانه‌ی Kodi، به Kore نیاز دارید.</string>
<string name="download_path_title">محل بارگیری</string>
<string name="download_path_summary">مسیری که ویدئوهای دریافت شده در آن ذخیره می‌شوند.</string>
<string name="download_path_dialog_title">مسیر دریافت را وارد کنید</string>
<string name="autoplay_through_intent_title">پخش خودکار از Intent</string>
<string name="autoplay_through_intent_summary">ویدئو هنگامی که از برنامه‌ی دیگری فراخوانده شد خودکار پخش می‌شود.</string>
<string name="default_resolution_title">وضوح پیش‌فرض</string>
<string name="play_with_kodi_title">پخش با Kodi</string>
<string name="kore_not_found">برنامه‌ی Kore نصب نیست. برای پخش کردن ویدئوها با مرکز رسانه‌ی Kodi، به Kore نیاز دارید.</string>
<string name="installeKore">نصب Kore</string>
<string name="showPlayWithKodiTitle">نمایش گزینه‌ی «پخش با Kodi»</string>
<string name="showPlayWithKodiSummary">گزینه‌ای برای پخش کردن ویدئو با مرکز رسانه‌ی Kodi نشان می‌دهد.</string>
<string name="playAudio">صدا</string>
<string name="defaultAudioFormatTitle">قالب پیش‌فرض صدا</string>
<string name="webMAudioDescription">WebM - قالبی آزاد</string>
<string name="m4aAudioDescription">m4a - کیفیت بهتر</string>
<string name="downloadDialogTitle">دریافت</string>
<string name="show_play_with_kodi_title">نمایش گزینه‌ی «پخش با Kodi»</string>
<string name="show_play_with_kodi_summary">گزینه‌ای برای پخش کردن ویدئو با مرکز رسانه‌ی Kodi نشان می‌دهد.</string>
<string name="play_audio">صدا</string>
<string name="default_audio_format_title">قالب پیش‌فرض صدا</string>
<string name="webm_description">WebM &#8212; قالبی آزاد</string>
<string name="m4a_description">m4a &#8212; کیفیت بهتر</string>
<string name="download_dialog_title">دریافت</string>
<string-array name="downloadOptions">
<item>ویدئو</item>
<item>صدا</item>
</string-array>
<string name="nextVideoTitle">ویدئوی بعدی</string>
<string name="urlNotSupportedText">پیوند پشتیبانی نمی‌شود.</string>
<string name="next_video_title">ویدئوی بعدی</string>
<string name="url_not_supported_toast">پیوند پشتیبانی نمی‌شود.</string>
</resources>

View File

@ -1,52 +1,58 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="autoPlayThroughIntentSummary">Démarrer automatiquement la vidéo si elle a été appelée depuis une autre application.</string>
<string name="autoplay_through_intent_summary">Démarrer automatiquement la vidéo si elle a été appelée depuis une autre application.</string>
<string name="cancel">Annuler</string>
<string name="chooseBrowser">Choisir un navigateur :</string>
<string name="defaultResolutionPreferenceTitle">Résolution par défaut</string>
<string name="didYouMean">"S\'agirait-il de : "</string>
<string name="choose_browser">Choisir un navigateur :</string>
<string name="default_resolution_title">Résolution par défaut</string>
<string name="did_you_mean">"S\'agirait-il de : "</string>
<string name="download">Télécharger</string>
<string name="downloadLocation">Emplacement des téléchargements</string>
<string name="downloadLocationDialogTitle">Entrez l\'emplacement du téléchargement</string>
<string name="downloadLocationSummary">Emplacement des vidéos téléchargées.</string>
<string name="installStreamPlayer">Installer</string>
<string name="download_path_title">Emplacement des téléchargements</string>
<string name="download_path_dialog_title">Entrez l\'emplacement du téléchargement</string>
<string name="download_path_summary">Emplacement des vidéos téléchargées.</string>
<string name="install">Installer</string>
<string name="installeKore">Installer Kore</string>
<string name="koreNotFound">L\'application Kore est introuvable. Kore est nécessaire afin de lire des vidéos dans Kodi media center.</string>
<string name="noPlayerFound">Aucun lecteur de streaming détecté. Vous devriez en installer un.</string>
<string name="kore_not_found">L\'application Kore est introuvable. Kore est nécessaire afin de lire des vidéos dans Kodi media center.</string>
<string name="no_player_found">Aucun lecteur de streaming détecté. Vous devriez en installer un.</string>
<string name="open_in_browser">Ouvrir dans le navigateur</string>
<string name="autoPlayThroughIntentTitle">Lecture automatique via Intent</string>
<string name="playWithKodiTitle">Lire avec Kodi</string>
<string name="screenRotation">rotation</string>
<string name="autoplay_through_intent_title">Lecture automatique via Intent</string>
<string name="play_with_kodi_title">Lire avec Kodi</string>
<string name="screen_rotation">rotation</string>
<string name="search">Rechercher</string>
<string name="searchPage">"Rechercher dans la page : "</string>
<string name="search_page">"Rechercher dans la page : "</string>
<string name="settings">Paramètres</string>
<string name="share">Partager</string>
<string name="shareDialogTitle">Partager avec :</string>
<string name="showPlayWithKodiSummary">Afficher une option pour lire la vidéo avec Kodi media center.</string>
<string name="showPlayWithKodiTitle">Afficher l\'option \"Lire avec Kodi\"</string>
<string name="title_activity_settings">Paramètres</string>
<string name="uploadDateText">Mise en ligne le %1$s</string>
<string name="share_dialog_title">Partager avec :</string>
<string name="show_play_with_kodi_summary">Afficher une option pour lire la vidéo avec Kodi media center.</string>
<string name="show_play_with_kodi_title">Afficher l\'option \"Lire avec Kodi\"</string>
<string name="settings_activity_title">Paramètres</string>
<string name="upload_date_text">Mise en ligne le %1$s</string>
<string name="useExternalPlayerTitle">Utiliser un lecteur externe</string>
<string name="viewCountText">%1$s vues</string>
<string name="playAudio">Audio</string>
<string name="defaultAudioFormatTitle">Format audio par défaut</string>
<string name="webMAudioDescription">WebM- format libre</string>
<string name="m4aAudioDescription">m4a - meilleur qualité</string>
<string name="downloadDialogTitle">Télécharger</string>
<string name="nextVideoTitle">Vidéo suivante</string>
<string name="showNextAndSimilarTitle">Afficher les vidéos suivantes et similaires</string>
<string name="urlNotSupportedText">URL non supportée.</string>
<string name="showSimilarVideosButtonText">Vidéos similaires</string>
<string name="settingsCategoryVideoAudioTitle">VIDÉO &amp; AUDIO</string>
<string name="settingsCategoryVideoInfoTittle">INFORMATION</string>
<string name="settingsCategoryEtcTitle">DIVERS</string>
<string name="view_count_text">%1$s vues</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Format audio par défaut</string>
<string name="webm_description">WebM &#8212; format libre</string>
<string name="m4a_description">m4a &#8212; meilleur qualité</string>
<string name="download_dialog_title">Télécharger</string>
<string name="next_video_title">Vidéo suivante</string>
<string name="show_next_and_similar_title">Afficher les vidéos suivantes et similaires</string>
<string name="url_not_supported_toast">URL non supportée.</string>
<string name="similar_videos_btn_text">Vidéos similaires</string>
<string name="settings_category_video_audio_title">Vidéo &amp; Audio</string>
<string name="settings_category_other_title">Divers</string>
<string name="itemThumbnailViewDescription">Miniature d\'aperçu vidéo</string>
<string name="detailThumbnailViewDescription">Miniature d\'aperçu vidéo</string>
<string name="detailThumbsDownImgViewDescription">Je n\'aime pas</string>
<string name="detailThumbsUpImgViewDescription">J\'aime</string>
<string name="searchLanguageTitle">Langue du contenu</string>
<string name="detailUploaderThumbnailViewDescription">Avatar de l\'utilisateur</string>
<string name="useExternalVideoPlayerTitle">Utiliser un lecteur vidéo externe</string>
<string name="useExternalAudioPlayerTitle">Utiliser un lecteur audio externe</string>
</resources>
<string name="list_thumbnail_view_description">Miniature d\'aperçu vidéo</string>
<string name="detail_thumbnail_view_description">Miniature d\'aperçu vidéo</string>
<string name="detail_dislikes_img_view_description">Je n\'aime pas</string>
<string name="detail_likes_img_view_description">J\'aime</string>
<string name="search_language_title">Langue du contenu</string>
<string name="detail_uploader_thumbnail_view_description">Avatar de l\'utilisateur</string>
<string name="use_external_video_player_title">Utiliser un lecteur vidéo externe</string>
<string name="use_external_audio_player_title">Utiliser un lecteur audio externe</string>
<string name="background_player_playing_toast">Lecture en arrière-plan</string>
<string name="background_player_name">Lecteur en arrière-plan NewPipe</string>
<string name="loading">Chargement</string>
<string name="play_btn_text">Lecture</string>
<string name="use_tor_title">Utiliser Tor</string>
<string name="use_tor_summary">Forcer le trafic de téléchargement via Tor pour plus de confidentialité (vidéos streaming non supporté)</string>
</resources>

View File

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='utf-8'?>
<resources><string name="view_count_text">%1$s צפיות</string>
<string name="upload_date_text">הועלה בתאריך %1$s</string>
<string name="share">שתף</string>
<string name="search">חפש</string>
<string name="next_video_title">הבא</string>
<string name="download">הורדה</string>
<string name="settings">הגדרות</string>
<string name="settings_activity_title">הגדרות</string>
</resources>

View File

@ -1,43 +1,43 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="viewCountText">%1$s megtekintés</string>
<string name="uploadDateText">Feltöltve: %1$s</string>
<string name="noPlayerFound">Nem található lejátszó. Telepítsen egyet!</string>
<string name="installStreamPlayer">Telepítsen egyet</string>
<string name="view_count_text">%1$s megtekintés</string>
<string name="upload_date_text">Feltöltve: %1$s</string>
<string name="no_player_found">Nem található lejátszó. Telepítsen egyet!</string>
<string name="install">Telepítsen egyet</string>
<string name="cancel">Mégse</string>
<string name="open_in_browser">Megnyitás böngészőben</string>
<string name="share">Megosztás</string>
<string name="download">Letöltés</string>
<string name="search">Keresés</string>
<string name="settings">Beállítások</string>
<string name="didYouMean">Erre gondolt: </string>
<string name="searchPage">Keresési lap: </string>
<string name="shareDialogTitle">Megosztás ezzel:</string>
<string name="chooseBrowser">Válasszon böngészőt:</string>
<string name="screenRotation">forgatás</string>
<string name="title_activity_settings">Beállítások</string>
<string name="did_you_mean">Erre gondolt: </string>
<string name="search_page">Keresési lap: </string>
<string name="share_dialog_title">Megosztás ezzel:</string>
<string name="choose_browser">Válasszon böngészőt:</string>
<string name="screen_rotation">forgatás</string>
<string name="settings_activity_title">Beállítások</string>
<string name="useExternalPlayerTitle">Külső lejátszó használata</string>
<string name="downloadLocation">Letöltések helye</string>
<string name="downloadLocationSummary">Útvonal a letöltött videók tárolásához</string>
<string name="downloadLocationDialogTitle">Adja meg a letöltési útvonalat</string>
<string name="autoPlayThroughIntentTitle">Automatikus lejátszás Intent-en keresztül</string>
<string name="autoPlayThroughIntentSummary">Automatikusan elindítja a videót, ha az külső alkalmazásból volt hívva</string>
<string name="defaultResolutionPreferenceTitle">Alapértelmezett felbontás</string>
<string name="playWithKodiTitle">Lejátszás Kodi-val</string>
<string name="koreNotFound">A Kore alkalmazás nem található. A Kore szükséges a videók Kodi médiaközponttal való lejátszásához.</string>
<string name="download_path_title">Letöltések helye</string>
<string name="download_path_summary">Útvonal a letöltött videók tárolásához</string>
<string name="download_path_dialog_title">Adja meg a letöltési útvonalat</string>
<string name="autoplay_through_intent_title">Automatikus lejátszás Intent-en keresztül</string>
<string name="autoplay_through_intent_summary">Automatikusan elindítja a videót, ha az külső alkalmazásból volt hívva</string>
<string name="default_resolution_title">Alapértelmezett felbontás</string>
<string name="play_with_kodi_title">Lejátszás Kodi-val</string>
<string name="kore_not_found">A Kore alkalmazás nem található. A Kore szükséges a videók Kodi médiaközponttal való lejátszásához.</string>
<string name="installeKore">Kore telepítése</string>
<string name="showPlayWithKodiTitle">\"Lejátszás Kodi-val\" opció mutatása</string>
<string name="showPlayWithKodiSummary">Mutat egy opciót a videók Kodi médiaközponttal való lejátszására</string>
<string name="playAudio">Hang</string>
<string name="defaultAudioFormatTitle">Alapértelmezett hang formátum</string>
<string name="webMAudioDescription">WebM - szabad formátum</string>
<string name="m4aAudioDescription">m4a - jobb minőség</string>
<string name="downloadDialogTitle">Letöltés</string>
<string name="show_play_with_kodi_title">\"Lejátszás Kodi-val\" opció mutatása</string>
<string name="show_play_with_kodi_summary">Mutat egy opciót a videók Kodi médiaközponttal való lejátszására</string>
<string name="play_audio">Hang</string>
<string name="default_audio_format_title">Alapértelmezett hang formátum</string>
<string name="webm_description">WebM &#8212; szabad formátum</string>
<string name="m4a_description">m4a &#8212; jobb minőség</string>
<string name="download_dialog_title">Letöltés</string>
<string-array name="downloadOptions">
<item>Videó</item>
<item>Hang</item>
</string-array>
<string name="nextVideoTitle">Következő videó</string>
<string name="urlNotSupportedText">A webcím nem támogatott.</string>
<string name="showSimilarVideosButtonText">Hasonló videók</string>
</resources>
<string name="next_video_title">Következő videó</string>
<string name="url_not_supported_toast">A webcím nem támogatott.</string>
<string name="similar_videos_btn_text">Hasonló videók</string>
</resources>

1
app/src/main/res/values-id Symbolic link
View File

@ -0,0 +1 @@
values-in

View File

@ -0,0 +1,3 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
</resources>

View File

@ -1,49 +1,49 @@
<?xml version='1.0' encoding='utf-8'?>
<resources><string name="viewCountText">%1$s visite</string>
<string name="uploadDateText">Caricato in %1$s</string>
<string name="noPlayerFound">Nessun riproduttore trovato. Dovresti installarne uno.</string>
<string name="installStreamPlayer">Installa</string>
<resources><string name="view_count_text">%1$s visite</string>
<string name="upload_date_text">Caricato in %1$s</string>
<string name="no_player_found">Nessun riproduttore trovato. Dovresti installarne uno.</string>
<string name="install">Installa</string>
<string name="cancel">Cancella</string>
<string name="open_in_browser">Apri nel browser</string>
<string name="share">Condividi</string>
<string name="download">Scarica</string>
<string name="search">Cerca</string>
<string name="settings">Impostazioni</string>
<string name="didYouMean">"Intendevi: "</string>
<string name="searchPage">"Cerca pagina: "</string>
<string name="shareDialogTitle">Condividi con:</string>
<string name="chooseBrowser">Scegli browser:</string>
<string name="screenRotation">rotazione</string>
<string name="title_activity_settings">Impostazioni</string>
<string name="did_you_mean">"Intendevi: "</string>
<string name="search_page">"Cerca pagina: "</string>
<string name="share_dialog_title">Condividi con:</string>
<string name="choose_browser">Scegli browser:</string>
<string name="screen_rotation">rotazione</string>
<string name="settings_activity_title">Impostazioni</string>
<string name="useExternalPlayerTitle">Usa un riproduttore video esterno</string>
<string name="downloadLocation">Cartella di download</string>
<string name="downloadLocationSummary">Percorso dove memorizzare i video scaricati.</string>
<string name="downloadLocationDialogTitle">Inserisci il percorso di download</string>
<string name="autoPlayThroughIntentTitle">Auto riproduzione attraverso internet</string>
<string name="autoPlayThroughIntentSummary">Avvia automaticamente un video quando è stato chiamato da un\'altra applicazione.</string>
<string name="defaultResolutionPreferenceTitle">Risoluzione predefinita</string>
<string name="playWithKodiTitle">Riproduci con Kodi</string>
<string name="koreNotFound">Kore app non trovata. Kore è richiesto per riprodurre video con Kodi media center.</string>
<string name="download_path_title">Cartella di download</string>
<string name="download_path_summary">Percorso dove memorizzare i video scaricati.</string>
<string name="download_path_dialog_title">Inserisci il percorso di download</string>
<string name="autoplay_through_intent_title">Auto riproduzione attraverso internet</string>
<string name="autoplay_through_intent_summary">Avvia automaticamente un video quando è stato chiamato da un\'altra applicazione.</string>
<string name="default_resolution_title">Risoluzione predefinita</string>
<string name="play_with_kodi_title">Riproduci con Kodi</string>
<string name="kore_not_found">Kore app non trovata. Kore è richiesto per riprodurre video con Kodi media center.</string>
<string name="installeKore">Installa Kore</string>
<string name="showPlayWithKodiTitle">Mostra l\'opzione \"Riproduci con Kodi\"</string>
<string name="showPlayWithKodiSummary">Mostra un opzione per riprodurre un video attraverso Kodi media center.</string>
<string name="playAudio">Audio</string>
<string name="defaultAudioFormatTitle">Formato audio predefinito</string>
<string name="webMAudioDescription">WedM - formato libero</string>
<string name="m4aAudioDescription">m4a - qualità migliore</string>
<string name="downloadDialogTitle">Scarica</string>
<string name="nextVideoTitle">Prossimo video</string>
<string name="showNextAndSimilarTitle">Mostra i video successivi e simili</string>
<string name="urlNotSupportedText">URL non supportato.</string>
<string name="showSimilarVideosButtonText">Video simili</string>
<string name="searchLanguageTitle">Lingua preferita dei contenuti</string>
<string name="settingsCategoryVideoAudioTitle">VIDEO &amp; AUDIO</string>
<string name="show_play_with_kodi_title">Mostra l\'opzione \"Riproduci con Kodi\"</string>
<string name="show_play_with_kodi_summary">Mostra un opzione per riprodurre un video attraverso Kodi media center.</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Formato audio predefinito</string>
<string name="webm_description">WedM &#8212; formato libero</string>
<string name="m4a_description">m4a &#8212; qualità migliore</string>
<string name="download_dialog_title">Scarica</string>
<string name="next_video_title">Prossimo video</string>
<string name="show_next_and_similar_title">Mostra i video successivi e simili</string>
<string name="url_not_supported_toast">URL non supportato.</string>
<string name="similar_videos_btn_text">Video simili</string>
<string name="search_language_title">Lingua preferita dei contenuti</string>
<string name="settings_category_video_audio_title">VIDEO &amp; AUDIO</string>
<string name="settingsCategoryVideoInfoTittle">INFO</string>
<string name="settingsCategoryEtcTitle">ETC</string>
<string name="itemThumbnailViewDescription">Anteprima video</string>
<string name="detailThumbnailViewDescription">Anteprima video</string>
<string name="detailUploaderThumbnailViewDescription">Miniatura caricata</string>
<string name="detailThumbsDownImgViewDescription">Non mi piace</string>
<string name="detailThumbsUpImgViewDescription">Mi piace</string>
<string name="list_thumbnail_view_description">Anteprima video</string>
<string name="detail_thumbnail_view_description">Anteprima video</string>
<string name="detail_uploader_thumbnail_view_description">Miniatura caricata</string>
<string name="detail_dislikes_img_view_description">Non mi piace</string>
<string name="detail_likes_img_view_description">Mi piace</string>
</resources>

1
app/src/main/res/values-iw Symbolic link
View File

@ -0,0 +1 @@
values-he

View File

@ -1,53 +1,57 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="uploadDateText">"アップロード: "%1$s</string>
<string name="noPlayerFound">StreamPlayer が見つかりませんでした。インストールが必要になるかもしれません。</string>
<string name="installStreamPlayer">インストール</string>
<string name="upload_date_text">"アップロード: "%1$s</string>
<string name="no_player_found">StreamPlayer が見つかりませんでした。インストールが必要になるかもしれません。</string>
<string name="install">インストール</string>
<string name="cancel">取り消し</string>
<string name="open_in_browser">ブラウザーで開く</string>
<string name="share">共有</string>
<string name="download">ダウンロード</string>
<string name="search">検索</string>
<string name="settings">設定</string>
<string name="didYouMean">"この意味ですか: "</string>
<string name="searchPage">"検索ページ: "</string>
<string name="shareDialogTitle">…共有:</string>
<string name="chooseBrowser">ブラウザーを選択:</string>
<string name="screenRotation">回転</string>
<string name="title_activity_settings">設定</string>
<string name="did_you_mean">"この意味ですか: "</string>
<string name="search_page">"検索ページ: "</string>
<string name="share_dialog_title">…共有:</string>
<string name="choose_browser">ブラウザーを選択:</string>
<string name="screen_rotation">回転</string>
<string name="settings_activity_title">設定</string>
<string name="useExternalPlayerTitle">外部プレーヤーを使用する</string>
<string name="downloadLocation">ダウンロードする場所</string>
<string name="downloadLocationSummary">ダウンロードした動画を保存する場所のパス。</string>
<string name="downloadLocationDialogTitle">ダウンロードのパスを入力してください。</string>
<string name="autoPlayThroughIntentTitle">インテントで自動再生</string>
<string name="autoPlayThroughIntentSummary">他のアプリケーションから呼び出されたとき、自動的に動画再生を開始します。</string>
<string name="defaultResolutionPreferenceTitle">基本の解像度</string>
<string name="playWithKodiTitle">Kodi で再生</string>
<string name="koreNotFound">Kore アプリが見つかりません。 Kodi メディアセンターで動画を再生するには、 Kore が必要です。</string>
<string name="download_path_title">ダウンロードする場所</string>
<string name="download_path_summary">ダウンロードした動画を保存する場所のパス。</string>
<string name="download_path_dialog_title">ダウンロードのパスを入力してください。</string>
<string name="autoplay_through_intent_title">インテントで自動再生</string>
<string name="autoplay_through_intent_summary">他のアプリケーションから呼び出されたとき、自動的に動画再生を開始します。</string>
<string name="default_resolution_title">基本の解像度</string>
<string name="play_with_kodi_title">Kodi で再生</string>
<string name="kore_not_found">Kore アプリが見つかりません。 Kodi メディアセンターで動画を再生するには、 Kore が必要です。</string>
<string name="installeKore">Kore をインストール</string>
<string name="showPlayWithKodiTitle">\"Kodi で再生\" 設定を表示</string>
<string name="showPlayWithKodiSummary">Kodi メディアセンター経由で動画を再生するための設定を表示します.</string>
<string name="playAudio">オーディオ</string>
<string name="defaultAudioFormatTitle">基本のオーディオフォーマット</string>
<string name="webMAudioDescription">.WebM - フリーフォーマット</string>
<string name="m4aAudioDescription">.m4a - より良い品質</string>
<string name="downloadDialogTitle">ダウンロード</string>
<string name="nextVideoTitle">次の動画</string>
<string name="showNextAndSimilarTitle">次の同様の動画を表示します。</string>
<string name="urlNotSupportedText">URL は使用できません。</string>
<string name="showSimilarVideosButtonText">同様の動画</string>
<string name="searchLanguageTitle">優先される言語</string>
<string name="settingsCategoryVideoAudioTitle">動画とオーディオ</string>
<string name="settingsCategoryVideoInfoTittle">情報</string>
<string name="settingsCategoryEtcTitle">その他</string>
<string name="viewCountText">%1$s ビュー</string>
<string name="itemThumbnailViewDescription">ビデオ プレビュー サムネイル</string>
<string name="detailThumbnailViewDescription">ビデオ プレビュー サムネイル</string>
<string name="detailUploaderThumbnailViewDescription">アップローダー サムネイル</string>
<string name="detailThumbsDownImgViewDescription">残念だね</string>
<string name="detailThumbsUpImgViewDescription">いいね</string>
<string name="useExternalVideoPlayerTitle">外部ビデオ プレイヤーを使用する</string>
<string name="useExternalAudioPlayerTitle">外部オーディオ プレイヤーを使用する</string>
<string name="backgroundPlayerStartPlayingToast">バックグラウンドで再生しています</string>
<string name="show_play_with_kodi_title">\"Kodi で再生\" 設定を表示</string>
<string name="show_play_with_kodi_summary">Kodi メディアセンター経由で動画を再生するための設定を表示します.</string>
<string name="play_audio">オーディオ</string>
<string name="default_audio_format_title">基本のオーディオフォーマット</string>
<string name="webm_description">WebM &#8212; フリーフォーマット</string>
<string name="m4a_description">m4a &#8212; より良い品質</string>
<string name="download_dialog_title">ダウンロード</string>
<string name="next_video_title">次の動画</string>
<string name="show_next_and_similar_title">次の同様の動画を表示します。</string>
<string name="url_not_supported_toast">URL は使用できません。</string>
<string name="similar_videos_btn_text">同様の動画</string>
<string name="search_language_title">優先される言語</string>
<string name="settings_category_video_audio_title">動画とオーディオ</string>
<string name="view_count_text">%1$s ビュー</string>
<string name="list_thumbnail_view_description">ビデオ プレビュー サムネイル</string>
<string name="detail_thumbnail_view_description">ビデオ プレビュー サムネイル</string>
<string name="detail_uploader_thumbnail_view_description">アップローダー サムネイル</string>
<string name="detail_dislikes_img_view_description">残念だね</string>
<string name="detail_likes_img_view_description">いいね</string>
<string name="use_external_video_player_title">外部ビデオ プレイヤーを使用する</string>
<string name="use_external_audio_player_title">外部オーディオ プレイヤーを使用する</string>
<string name="background_player_playing_toast">バックグラウンドで再生しています</string>
</resources>
<string name="background_player_name">NewPipe バックグラウンド プレーヤー</string>
<string name="loading">読み込み中</string>
<string name="play_btn_text">再生</string>
<string name="use_tor_title">Tor を使用する</string>
<string name="use_tor_summary">強制的に Tor を経由したプライバシーを高めたトラフィックでダウンロードします (ビデオのストリーミングはまだサポートされていません)</string>
</resources>

View File

@ -1,49 +1,49 @@
<?xml version='1.0' encoding='utf-8'?>
<resources><string name="viewCountText">시청 횟수 %1$s</string>
<string name="uploadDateText">%1$s에 업로드됨</string>
<string name="noPlayerFound">스트리밍 플레이어가 발견되지 않았습니다. 플레이어를 설치하시기 바랍니다.</string>
<string name="installStreamPlayer">설치</string>
<resources><string name="view_count_text">시청 횟수 %1$s</string>
<string name="upload_date_text">%1$s에 업로드됨</string>
<string name="no_player_found">스트리밍 플레이어가 발견되지 않았습니다. 플레이어를 설치하시기 바랍니다.</string>
<string name="install">설치</string>
<string name="cancel">취소</string>
<string name="open_in_browser">브라우저에서 열기</string>
<string name="share">공유</string>
<string name="download">다운로드</string>
<string name="search">검색</string>
<string name="settings">설정</string>
<string name="didYouMean">"혹시 이것을 검색하셨습니까? "</string>
<string name="searchPage">"검색 페이지: "</string>
<string name="shareDialogTitle">다음으로 공유:</string>
<string name="chooseBrowser">브라우저 선택:</string>
<string name="screenRotation">회전</string>
<string name="title_activity_settings">설정</string>
<string name="did_you_mean">"혹시 이것을 검색하셨습니까? "</string>
<string name="search_page">"검색 페이지: "</string>
<string name="share_dialog_title">다음으로 공유:</string>
<string name="choose_browser">브라우저 선택:</string>
<string name="screen_rotation">회전</string>
<string name="settings_activity_title">설정</string>
<string name="useExternalPlayerTitle">외부 플레이어 사용</string>
<string name="downloadLocation">다운로드 위치</string>
<string name="downloadLocationSummary">다운로드된 비디오가 저장될 경로를 선택하세요.</string>
<string name="downloadLocationDialogTitle">다운로드 경로 입력</string>
<string name="autoPlayThroughIntentTitle">인텐트로 경유할 경우 자동 재생</string>
<string name="autoPlayThroughIntentSummary">다른 앱으로부터 호출되었을 경우에 비디오를 자동으로 재생합니다.</string>
<string name="defaultResolutionPreferenceTitle">기본 해상도</string>
<string name="playWithKodiTitle">Kodi로 재생</string>
<string name="koreNotFound">Kore 앱이 발견되지 않았습니다. Kodi media center로 비디오를 재생하려면 Kore가 필요합니다.</string>
<string name="download_path_title">다운로드 위치</string>
<string name="download_path_summary">다운로드된 비디오가 저장될 경로를 선택하세요.</string>
<string name="download_path_dialog_title">다운로드 경로 입력</string>
<string name="autoplay_through_intent_title">인텐트로 경유할 경우 자동 재생</string>
<string name="autoplay_through_intent_summary">다른 앱으로부터 호출되었을 경우에 비디오를 자동으로 재생합니다.</string>
<string name="default_resolution_title">기본 해상도</string>
<string name="play_with_kodi_title">Kodi로 재생</string>
<string name="kore_not_found">Kore 앱이 발견되지 않았습니다. Kodi media center로 비디오를 재생하려면 Kore가 필요합니다.</string>
<string name="installeKore">Kore 설치</string>
<string name="showPlayWithKodiTitle">\"Kodi로 재생\" 옵션 표시</string>
<string name="showPlayWithKodiSummary">비디오를 Kodi media center를 사용해 재생하는 옵션을 표시합니다.</string>
<string name="playAudio">오디오</string>
<string name="defaultAudioFormatTitle">기본 오디오 포맷</string>
<string name="webMAudioDescription">WebM - 무료 자유 포맷입니다</string>
<string name="m4aAudioDescription">m4a - 보다 나은 품질</string>
<string name="downloadDialogTitle">다운로드</string>
<string name="nextVideoTitle">다음 비디오</string>
<string name="showNextAndSimilarTitle">다음 및 유사한 비디오 표시</string>
<string name="urlNotSupportedText">지원하지 않는 URL 입니다.</string>
<string name="showSimilarVideosButtonText">유사한 비디오</string>
<string name="searchLanguageTitle">선호하는 컨텐츠 언어</string>
<string name="settingsCategoryVideoAudioTitle">비디오 &amp; 오디오</string>
<string name="show_play_with_kodi_title">\"Kodi로 재생\" 옵션 표시</string>
<string name="show_play_with_kodi_summary">비디오를 Kodi media center를 사용해 재생하는 옵션을 표시합니다.</string>
<string name="play_audio">오디오</string>
<string name="default_audio_format_title">기본 오디오 포맷</string>
<string name="webm_description">WebM &#8212; 무료 자유 포맷입니다</string>
<string name="m4a_description">m4a &#8212; 보다 나은 품질</string>
<string name="download_dialog_title">다운로드</string>
<string name="next_video_title">다음 비디오</string>
<string name="show_next_and_similar_title">다음 및 유사한 비디오 표시</string>
<string name="url_not_supported_toast">지원하지 않는 URL 입니다.</string>
<string name="similar_videos_btn_text">유사한 비디오</string>
<string name="search_language_title">선호하는 컨텐츠 언어</string>
<string name="settings_category_video_audio_title">비디오 &amp; 오디오</string>
<string name="settingsCategoryVideoInfoTittle">정보</string>
<string name="settingsCategoryEtcTitle">기타</string>
<string name="itemThumbnailViewDescription">비디오 미리보기 썸네일</string>
<string name="detailThumbnailViewDescription">비디오 미리보기 썸네일</string>
<string name="detailUploaderThumbnailViewDescription">업로더 썸네일</string>
<string name="detailThumbsDownImgViewDescription">싫어요</string>
<string name="detailThumbsUpImgViewDescription">좋아요</string>
<string name="list_thumbnail_view_description">비디오 미리보기 썸네일</string>
<string name="detail_thumbnail_view_description">비디오 미리보기 썸네일</string>
<string name="detail_uploader_thumbnail_view_description">업로더 썸네일</string>
<string name="detail_dislikes_img_view_description">싫어요</string>
<string name="detail_likes_img_view_description">좋아요</string>
</resources>

View File

@ -1,51 +1,49 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="viewCountText">%1$s keer bekeken</string>
<string name="uploadDateText">Geüpload op %1$s</string>
<string name="noPlayerFound">Geen speler met streaming ondersteuning gevonden. Misschien wil je er een installeren.</string>
<string name="installStreamPlayer">Installeer speler</string>
<string name="view_count_text">%1$s keer bekeken</string>
<string name="upload_date_text">Geüpload op %1$s</string>
<string name="no_player_found">Geen speler met streaming ondersteuning gevonden. Misschien wil je er een installeren.</string>
<string name="install">Installeer speler</string>
<string name="cancel">Annuleer</string>
<string name="open_in_browser">Open in browser</string>
<string name="share">Deel</string>
<string name="download">Download</string>
<string name="search">Zoek</string>
<string name="settings">Instellingen</string>
<string name="didYouMean">Bedoelde je: </string>
<string name="searchPage">Zoekpagina: </string>
<string name="shareDialogTitle">Deel met:</string>
<string name="chooseBrowser">Kies browser:</string>
<string name="screenRotation">rotatie</string>
<string name="title_activity_settings">Instellingen</string>
<string name="did_you_mean">Bedoelde je: </string>
<string name="search_page">Zoekpagina: </string>
<string name="share_dialog_title">Deel met:</string>
<string name="choose_browser">Kies browser:</string>
<string name="screen_rotation">rotatie</string>
<string name="settings_activity_title">Instellingen</string>
<string name="useExternalPlayerTitle">Gebruik externe speler</string>
<string name="downloadLocation">Downloadlocatie</string>
<string name="downloadLocationSummary">Locatie om gedownloadde videos in op te slaan.</string>
<string name="downloadLocationDialogTitle">Voer downloadlocatie is</string>
<string name="autoPlayThroughIntentTitle">Speel automatisch via Intent</string>
<string name="autoPlayThroughIntentSummary">Speel een video automatisch af indien geopend vanuit een andere app.</string>
<string name="defaultResolutionPreferenceTitle">Standaardresolutie</string>
<string name="playWithKodiTitle">Speel af met Kodi</string>
<string name="koreNotFound">Kore app niet gevonden. Kore is nodig om videos op Kodi af te spelen.</string>
<string name="download_path_title">Downloadlocatie</string>
<string name="download_path_summary">Locatie om gedownloadde videos in op te slaan.</string>
<string name="download_path_dialog_title">Voer downloadlocatie is</string>
<string name="autoplay_through_intent_title">Speel automatisch via Intent</string>
<string name="autoplay_through_intent_summary">Speel een video automatisch af indien geopend vanuit een andere app.</string>
<string name="default_resolution_title">Standaardresolutie</string>
<string name="play_with_kodi_title">Speel af met Kodi</string>
<string name="kore_not_found">Kore app niet gevonden. Kore is nodig om videos op Kodi af te spelen.</string>
<string name="installeKore">Installeer Kore</string>
<string name="showPlayWithKodiTitle">Toon \"Speel af met Kodi\" optie</string>
<string name="showPlayWithKodiSummary">Toont een optie om een video op een Kodi media center af te spelen.</string>
<string name="playAudio">Audio</string>
<string name="defaultAudioFormatTitle">Standaard audio formaat</string>
<string name="webMAudioDescription">Webam - open formaat</string>
<string name="m4aAudioDescription">m4a - betere kwaliteit</string>
<string name="downloadDialogTitle">Download</string>
<string name="nextVideoTitle">Volgende video</string>
<string name="urlNotSupportedText">URL wordt niet ondersteund.</string>
<string name="showSimilarVideosButtonText">Vergelijkbare videos</string>
<string name="showNextAndSimilarTitle">Laat volgende en vergelijkbare videos zien</string>
<string name="searchLanguageTitle">Voorkeurs content taal</string>
<string name="useExternalVideoPlayerTitle">Gebruik externe videospeler</string>
<string name="useExternalAudioPlayerTitle">Gebruik externe audiospeler</string>
<string name="settingsCategoryVideoAudioTitle">VIDEO &amp; GELUID</string>
<string name="settingsCategoryVideoInfoTittle">INFO</string>
<string name="settingsCategoryEtcTitle">ETC.</string>
<string name="show_play_with_kodi_title">Toon \"Speel af met Kodi\" optie</string>
<string name="show_play_with_kodi_summary">Toont een optie om een video op een Kodi media center af te spelen.</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Standaard audio formaat</string>
<string name="webm_description">WebM &#8212; open formaat</string>
<string name="m4a_description">m4a &#8212; betere kwaliteit</string>
<string name="download_dialog_title">Download</string>
<string name="next_video_title">Volgende video</string>
<string name="url_not_supported_toast">URL wordt niet ondersteund.</string>
<string name="similar_videos_btn_text">Vergelijkbare videos</string>
<string name="show_next_and_similar_title">Laat volgende en vergelijkbare videos zien</string>
<string name="search_language_title">Voorkeurs content taal</string>
<string name="use_external_video_player_title">Gebruik externe videospeler</string>
<string name="use_external_audio_player_title">Gebruik externe audiospeler</string>
<string name="settings_category_video_audio_title">Video &amp; Geluid</string>
<string name="itemThumbnailViewDescription">Videovoorbeeld thumbnail</string>
<string name="detailThumbnailViewDescription">Videovoorbeeld thumbnail</string>
<string name="detailUploaderThumbnailViewDescription">Uploader miniatuur</string>
<string name="detailThumbsDownImgViewDescription">Dislikes</string>
<string name="list_thumbnail_view_description">Videovoorbeeld thumbnail</string>
<string name="detail_thumbnail_view_description">Videovoorbeeld thumbnail</string>
<string name="detail_uploader_thumbnail_view_description">Uploader miniatuur</string>
<string name="detail_dislikes_img_view_description">Dislikes</string>
</resources>

View File

@ -1,51 +1,50 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="noPlayerFound">Nie znaleziono odtwarzacza strumieniowego.</string>
<string name="installStreamPlayer">Zainstaluj</string>
<string name="no_player_found">Nie znaleziono odtwarzacza strumieniowego.</string>
<string name="install">Zainstaluj</string>
<string name="cancel">Anuluj</string>
<string name="open_in_browser">Otwórz w przeglądarce</string>
<string name="share">Udostępnij</string>
<string name="download">Pobierz</string>
<string name="search">Szukaj</string>
<string name="settings">Ustawienia</string>
<string name="didYouMean">"Czy chodziło Ci o: "</string>
<string name="shareDialogTitle">Udostępnij za pośrednictwem:</string>
<string name="chooseBrowser">Wybierz przeglądarkę:</string>
<string name="screenRotation">obrót</string>
<string name="title_activity_settings">Ustawienia</string>
<string name="did_you_mean">"Czy chodziło Ci o: "</string>
<string name="share_dialog_title">Udostępnij za pośrednictwem:</string>
<string name="choose_browser">Wybierz przeglądarkę:</string>
<string name="screen_rotation">obrót</string>
<string name="settings_activity_title">Ustawienia</string>
<string name="useExternalPlayerTitle">Użyj zewnętrznego odtwarzacza</string>
<string name="downloadLocation">Miejsce zapisu pobieranych plików</string>
<string name="downloadLocationSummary">Ścieżka folderu do zapisywania pobieranego wideo.</string>
<string name="downloadLocationDialogTitle">Wprowadź ścieżkę folderu dla pobieranych plików</string>
<string name="autoPlayThroughIntentTitle">Automatycznie odtwarzaj przez Intent</string>
<string name="autoPlayThroughIntentSummary">Automatycznie odtwarza wideo po wywołaniu z innej aplikacji.</string>
<string name="defaultResolutionPreferenceTitle">Domyślna rozdzielczość</string>
<string name="playWithKodiTitle">Odtwarzaj za pośrednictwem Kodi</string>
<string name="koreNotFound">Aplikacja Kore nie została znaleziona. Wymagana jest do odtwarzania w Kodi.</string>
<string name="download_path_title">Miejsce zapisu pobieranych plików</string>
<string name="download_path_summary">Ścieżka folderu do zapisywania pobieranego wideo.</string>
<string name="download_path_dialog_title">Wprowadź ścieżkę folderu dla pobieranych plików</string>
<string name="autoplay_through_intent_title">Automatycznie odtwarzaj przez Intent</string>
<string name="autoplay_through_intent_summary">Automatycznie odtwarza wideo po wywołaniu z innej aplikacji.</string>
<string name="default_resolution_title">Domyślna rozdzielczość</string>
<string name="play_with_kodi_title">Odtwarzaj za pośrednictwem Kodi</string>
<string name="kore_not_found">Aplikacja Kore nie została znaleziona. Wymagana jest do odtwarzania w Kodi.</string>
<string name="installeKore">Zainstaluj Kore</string>
<string name="showPlayWithKodiTitle">Wyświetlaj opcję \"Odtwarzaj za pośrednictwem Kodi\"</string>
<string name="showPlayWithKodiSummary">Wyświetla opcję do odtwarzania wideo przez aplikację Kodi.</string>
<string name="playAudio">Dźwięk</string>
<string name="defaultAudioFormatTitle">Domyślny format dźwięku</string>
<string name="webMAudioDescription">WebM - otwarty format</string>
<string name="m4aAudioDescription">m4a - lepsza jakość</string>
<string name="downloadDialogTitle">Pobierz</string>
<string name="nextVideoTitle">Następne wideo</string>
<string name="showNextAndSimilarTitle">Wyświetl następne i podobne wideo</string>
<string name="urlNotSupportedText">Niewspierany URL.</string>
<string name="showSimilarVideosButtonText">Podobne wideo</string>
<string name="searchLanguageTitle">Preferowany język zawartości</string>
<string name="settingsCategoryVideoAudioTitle">WIDEO &amp; DŹWIĘK</string>
<string name="settingsCategoryVideoInfoTittle">INFO</string>
<string name="settingsCategoryEtcTitle">INNE</string>
<string name="searchPage">"Szukaj strony: "</string>
<string name="viewCountText">%1$s wyświetleń</string>
<string name="uploadDateText">Opublikowany %1$s</string>
<string name="itemThumbnailViewDescription">Miniaturka podglądowa wideo</string>
<string name="detailThumbnailViewDescription">Miniaturka podglądowa wideo</string>
<string name="detailUploaderThumbnailViewDescription">Miniaturka wysyłającego</string>
<string name="detailThumbsDownImgViewDescription">łapek w dół</string>
<string name="detailThumbsUpImgViewDescription">Polubień</string>
<string name="useExternalVideoPlayerTitle">Użyj zewnętrznego odtwarzacza wideo</string>
<string name="useExternalAudioPlayerTitle">Użyj zewnętrznego odtwarzacza audio</string>
</resources>
<string name="show_play_with_kodi_title">Wyświetlaj opcję \"Odtwarzaj za pośrednictwem Kodi\"</string>
<string name="show_play_with_kodi_summary">Wyświetla opcję do odtwarzania wideo przez aplikację Kodi.</string>
<string name="play_audio">Dźwięk</string>
<string name="default_audio_format_title">Domyślny format dźwięku</string>
<string name="webm_description">WebM &#8212; otwarty format</string>
<string name="m4a_description">m4a &#8212; lepsza jakość</string>
<string name="download_dialog_title">Pobierz</string>
<string name="next_video_title">Następne wideo</string>
<string name="show_next_and_similar_title">Wyświetl następne i podobne wideo</string>
<string name="url_not_supported_toast">Niewspierany URL.</string>
<string name="similar_videos_btn_text">Podobne wideo</string>
<string name="search_language_title">Preferowany język zawartości</string>
<string name="settings_category_video_audio_title">Wideo &amp; Dźwięk</string>
<string name="search_page">"Szukaj strony: "</string>
<string name="view_count_text">%1$s wyświetleń</string>
<string name="upload_date_text">Opublikowany %1$s</string>
<string name="list_thumbnail_view_description">Miniaturka podglądowa wideo</string>
<string name="detail_thumbnail_view_description">Miniaturka podglądowa wideo</string>
<string name="detail_uploader_thumbnail_view_description">Miniaturka wysyłającego</string>
<string name="detail_dislikes_img_view_description">łapek w dół</string>
<string name="detail_likes_img_view_description">Polubień</string>
<string name="use_external_video_player_title">Użyj zewnętrznego odtwarzacza wideo</string>
<string name="use_external_audio_player_title">Użyj zewnętrznego odtwarzacza audio</string>
</resources>

View File

@ -1,50 +1,50 @@
<?xml version='1.0' encoding='utf-8'?>
<resources><string name="viewCountText">%1$s visualizações</string>
<string name="uploadDateText">Carregado em %1$s</string>
<string name="noPlayerFound">Reprodutor não disponível. Deve instalar um reprodutor.</string>
<string name="installStreamPlayer">Instalar</string>
<resources><string name="view_count_text">%1$s visualizações</string>
<string name="upload_date_text">Carregado em %1$s</string>
<string name="no_player_found">Reprodutor não disponível. Deve instalar um reprodutor.</string>
<string name="install">Instalar</string>
<string name="cancel">Cancelar</string>
<string name="open_in_browser">Abrir no navegador</string>
<string name="share">Partilhar</string>
<string name="download">Descarregar</string>
<string name="search">Pesquisar</string>
<string name="settings">Definições</string>
<string name="didYouMean">"Será que queria dizer: "</string>
<string name="searchPage">"Página de pesquisa: "</string>
<string name="shareDialogTitle">Partilhar com:</string>
<string name="chooseBrowser">Escolher navegador:</string>
<string name="screenRotation">rotação</string>
<string name="title_activity_settings">Definições</string>
<string name="useExternalVideoPlayerTitle">Utilizar reprodutor de vídeo externo</string>
<string name="useExternalAudioPlayerTitle">Utilizar reprodutor de áudio externo</string>
<string name="downloadLocation">Local para a descarga</string>
<string name="downloadLocationSummary">Local para guardar os vídeos descarregados.</string>
<string name="downloadLocationDialogTitle">Digite o caminho</string>
<string name="autoPlayThroughIntentTitle">Reproduzir via Intent</string>
<string name="autoPlayThroughIntentSummary">Iniciar automaticamente o vídeo se for invocado por outra aplicação.</string>
<string name="defaultResolutionPreferenceTitle">Resolução padrão</string>
<string name="playWithKodiTitle">Reproduzir com Kodi</string>
<string name="koreNotFound">Aplicação não encontrada. Necessita do Kore para reproduzir vídeos no Kodi.</string>
<string name="did_you_mean">"Será que queria dizer: "</string>
<string name="search_page">"Página de pesquisa: "</string>
<string name="share_dialog_title">Partilhar com:</string>
<string name="choose_browser">Escolher navegador:</string>
<string name="screen_rotation">rotação</string>
<string name="settings_activity_title">Definições</string>
<string name="use_external_video_player_title">Utilizar reprodutor de vídeo externo</string>
<string name="use_external_audio_player_title">Utilizar reprodutor de áudio externo</string>
<string name="download_path_title">Local para a descarga</string>
<string name="download_path_summary">Local para guardar os vídeos descarregados.</string>
<string name="download_path_dialog_title">Digite o caminho</string>
<string name="autoplay_through_intent_title">Reproduzir via Intent</string>
<string name="autoplay_through_intent_summary">Iniciar automaticamente o vídeo se for invocado por outra aplicação.</string>
<string name="default_resolution_title">Resolução padrão</string>
<string name="play_with_kodi_title">Reproduzir com Kodi</string>
<string name="kore_not_found">Aplicação não encontrada. Necessita do Kore para reproduzir vídeos no Kodi.</string>
<string name="installeKore">Instalar o Kore</string>
<string name="showPlayWithKodiTitle">Mostrar opção \"Reproduzir com Kodi\"</string>
<string name="showPlayWithKodiSummary">Mostra uma opção para reproduzir o vídeo com o Kodi.</string>
<string name="playAudio">Áudio</string>
<string name="defaultAudioFormatTitle">Formato áudio padrão</string>
<string name="webMAudioDescription">WebM - formato livre</string>
<string name="m4aAudioDescription">m4a - melhor qualidade</string>
<string name="downloadDialogTitle">Descarregar</string>
<string name="nextVideoTitle">Vídeo seguinte</string>
<string name="showNextAndSimilarTitle">Mostrar vídeos seguintes e similares</string>
<string name="urlNotSupportedText">URL não suportado.</string>
<string name="showSimilarVideosButtonText">Vídeos similares</string>
<string name="searchLanguageTitle">Idioma preferencial do conteúdo</string>
<string name="settingsCategoryVideoAudioTitle">Vídeo e áudio</string>
<string name="show_play_with_kodi_title">Mostrar opção \"Reproduzir com Kodi\"</string>
<string name="show_play_with_kodi_summary">Mostra uma opção para reproduzir o vídeo com o Kodi.</string>
<string name="play_audio">Áudio</string>
<string name="default_audio_format_title">Formato áudio padrão</string>
<string name="webm_description">WebM &#8212; formato livre</string>
<string name="m4a_description">m4a &#8212; melhor qualidade</string>
<string name="download_dialog_title">Descarregar</string>
<string name="next_video_title">Vídeo seguinte</string>
<string name="show_next_and_similar_title">Mostrar vídeos seguintes e similares</string>
<string name="url_not_supported_toast">URL não suportado.</string>
<string name="similar_videos_btn_text">Vídeos similares</string>
<string name="search_language_title">Idioma preferencial do conteúdo</string>
<string name="settings_category_video_audio_title">Vídeo e áudio</string>
<string name="settingsCategoryVideoInfoTittle">Informações</string>
<string name="settingsCategoryEtcTitle">Outras</string>
<string name="itemThumbnailViewDescription">Miniatura de vídeos</string>
<string name="detailThumbnailViewDescription">Miniatura de vídeos</string>
<string name="detailUploaderThumbnailViewDescription">Carregador de miniaturas</string>
<string name="detailThumbsDownImgViewDescription">Não gosto</string>
<string name="detailThumbsUpImgViewDescription">Gosto</string>
<string name="list_thumbnail_view_description">Miniatura de vídeos</string>
<string name="detail_thumbnail_view_description">Miniatura de vídeos</string>
<string name="detail_uploader_thumbnail_view_description">Carregador de miniaturas</string>
<string name="detail_dislikes_img_view_description">Não gosto</string>
<string name="detail_likes_img_view_description">Gosto</string>
</resources>

View File

@ -1,54 +1,57 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="viewCountText">%1$s просмотров</string>
<string name="uploadDateText">Опубликовано %1$s</string>
<string name="noPlayerFound">Ни одного потокового проигрывателя не было найдено. Установить?</string>
<string name="installStreamPlayer">Установить</string>
<string name="view_count_text">%1$s просмотров</string>
<string name="upload_date_text">Опубликовано %1$s</string>
<string name="no_player_found">Ни одного потокового проигрывателя не было найдено. Установить?</string>
<string name="install">Установить</string>
<string name="cancel">Отмена</string>
<string name="open_in_browser">Открыть в браузере</string>
<string name="share">Поделиться</string>
<string name="download">Скачать</string>
<string name="search">Найти</string>
<string name="settings">Настройки</string>
<string name="didYouMean">Возможно, вы имели в виду: </string>
<string name="searchPage">Страница поиска: </string>
<string name="shareDialogTitle">Поделиться с помощью:</string>
<string name="chooseBrowser">Выбрать браузер:</string>
<string name="screenRotation">поворот</string>
<string name="title_activity_settings">Настройки</string>
<string name="did_you_mean">Возможно, вы имели в виду: </string>
<string name="search_page">Страница поиска: </string>
<string name="share_dialog_title">Поделиться с помощью:</string>
<string name="choose_browser">Выбрать браузер:</string>
<string name="screen_rotation">поворот</string>
<string name="settings_activity_title">Настройки</string>
<string name="useExternalPlayerTitle">Использовать внешний проигрыватель</string>
<string name="downloadLocation">Место для загрузок</string>
<string name="downloadLocationSummary">Папка для хранения загруженных файлов.</string>
<string name="downloadLocationDialogTitle">Введите путь к папке для загрузок</string>
<string name="autoPlayThroughIntentTitle">Автопроигрывание через интернет</string>
<string name="autoPlayThroughIntentSummary">Автоматически воспроизводить видео когда оно открыто через другое приложение.</string>
<string name="defaultResolutionPreferenceTitle">Разрешение по-умолчанию</string>
<string name="playWithKodiTitle">Воспроизвести с помощью Kodi</string>
<string name="koreNotFound">Приложение Kore не наидено. Чтобы проигрывать видео через Kodi media center, нужен Kore.</string>
<string name="download_path_title">Место для загрузок</string>
<string name="download_path_summary">Папка для хранения загруженных файлов.</string>
<string name="download_path_dialog_title">Введите путь к папке для загрузок</string>
<string name="autoplay_through_intent_title">Автопроигрывание через интернет</string>
<string name="autoplay_through_intent_summary">Автоматически воспроизводить видео когда оно открыто через другое приложение.</string>
<string name="default_resolution_title">Разрешение по-умолчанию</string>
<string name="play_with_kodi_title">Воспроизвести с помощью Kodi</string>
<string name="kore_not_found">Приложение Kore не наидено. Чтобы проигрывать видео через Kodi media center, нужен Kore.</string>
<string name="installeKore">Установить Kore</string>
<string name="showPlayWithKodiTitle">Показывать опцию \"Воспроизвести с помощью Kodi\"</string>
<string name="showPlayWithKodiSummary">Показать опцию воспроизведения видео через Kodi media center.</string>
<string name="playAudio">Аудио</string>
<string name="defaultAudioFormatTitle">Формат аудио по-умолчанию</string>
<string name="webMAudioDescription">WebM - свободный формат</string>
<string name="m4aAudioDescription">m4a - лучшее качество</string>
<string name="downloadDialogTitle">Скачать</string>
<string name="show_play_with_kodi_title">Показывать опцию \"Воспроизвести с помощью Kodi\"</string>
<string name="show_play_with_kodi_summary">Показать опцию воспроизведения видео через Kodi media center.</string>
<string name="play_audio">Аудио</string>
<string name="default_audio_format_title">Формат аудио по-умолчанию</string>
<string name="webm_description">WebM &#8212; свободный формат</string>
<string name="m4a_description">m4a &#8212; лучшее качество</string>
<string name="download_dialog_title">Скачать</string>
<string-array name="downloadOptions">
<item>Видео</item>
<item>Аудио</item>
</string-array>
<string name="nextVideoTitle">Следующее видео</string>
<string name="urlNotSupportedText">URL не поддерживается.</string>
<string name="showSimilarVideosButtonText">Похожие видео</string>
<string name="showNextAndSimilarTitle">Показывать следующее и предложенные видео</string>
<string name="searchLanguageTitle">Предпочитаемый язык контента</string>
<string name="settingsCategoryVideoAudioTitle">ВИДЕО И АУДИО</string>
<string name="settingsCategoryVideoInfoTittle">ИНФОРМАЦИЯ</string>
<string name="settingsCategoryEtcTitle">ПРОЧЕЕ</string>
<string name="next_video_title">Следующее видео</string>
<string name="url_not_supported_toast">URL не поддерживается.</string>
<string name="similar_videos_btn_text">Похожие видео</string>
<string name="show_next_and_similar_title">Показывать следующее и предложенные видео</string>
<string name="search_language_title">Предпочитаемый язык контента</string>
<string name="settings_category_video_audio_title">Видео и Аудио</string>
<string name="settings_category_appearance_title">Внешний вид</string>
<string name="settings_category_other_title">Другое</string>
<string name="itemThumbnailViewDescription">Миниатюра видео-превью</string>
<string name="detailThumbnailViewDescription">Миниатюра видео-превью</string>
<string name="detailUploaderThumbnailViewDescription">Миниатюра аватара пользователся</string>
<string name="detailThumbsDownImgViewDescription">Дислайки</string>
<string name="detailThumbsUpImgViewDescription">Лайки</string>
</resources>
<string name="list_thumbnail_view_description">Миниатюра видео-превью</string>
<string name="detail_thumbnail_view_description">Миниатюра видео-превью</string>
<string name="detail_uploader_thumbnail_view_description">Миниатюра аватара пользователся</string>
<string name="detail_dislikes_img_view_description">Дислайки</string>
<string name="detail_likes_img_view_description">Лайки</string>
<string name="use_external_video_player_title">Использовать внешний проигрыватель для видео</string>
<string name="use_external_audio_player_title">Использовать внешний проигрыватель для аудио</string>
<string name="background_player_playing_toast">Проигрывание в фоновом режиме</string>
</resources>

View File

@ -1,50 +1,64 @@
<?xml version='1.0' encoding='utf-8'?>
<resources><string name="viewCountText">%1$s pogledov</string>
<string name="uploadDateText">Poslano %1$s</string>
<string name="noPlayerFound">Predvajalnika pretoka ni mogoče najti. Tak program lahko namestite ločeno.</string>
<string name="installStreamPlayer">Namesti</string>
<resources><string name="view_count_text">%1$s pogledov</string>
<string name="upload_date_text">Poslano %1$s</string>
<string name="no_player_found">Predvajalnika pretoka ni mogoče najti. Tak program lahko namestite ločeno.</string>
<string name="install">Namesti</string>
<string name="cancel">Prekliči</string>
<string name="open_in_browser">Odpri v brskalniku</string>
<string name="share">Omogoči souporabo</string>
<string name="download">Prejmi</string>
<string name="search">Poišči</string>
<string name="settings">Nastavitve</string>
<string name="didYouMean">"Ste mislili vpisati: "</string>
<string name="searchPage">"Stran iskanja: "</string>
<string name="shareDialogTitle">Omogoči souporabo z:</string>
<string name="chooseBrowser">Izbor brskalnika:</string>
<string name="screenRotation">usmerjenost</string>
<string name="title_activity_settings">Nastavitve</string>
<string name="useExternalVideoPlayerTitle">Uporabi zunanji predvajalnik videa</string>
<string name="useExternalAudioPlayerTitle">Uporabi zunanji predvajalnik zvoka</string>
<string name="downloadLocation">Mapa za prejem</string>
<string name="downloadLocationSummary">Pot do mape za prejem datotek.</string>
<string name="downloadLocationDialogTitle">Vpis poti za prejem</string>
<string name="defaultResolutionPreferenceTitle">Privzeta ločljivost</string>
<string name="playWithKodiTitle">Predvajaj s Kodi</string>
<string name="koreNotFound">Programa Kore ni mogoče najti. Program omogoča predvajanje video posnetkov prek predstavnega središča Kodi.</string>
<string name="did_you_mean">"Ste mislili vpisati: "</string>
<string name="search_page">"Stran iskanja: "</string>
<string name="share_dialog_title">Omogoči souporabo z:</string>
<string name="choose_browser">Izbor brskalnika:</string>
<string name="screen_rotation">usmerjenost</string>
<string name="settings_activity_title">Nastavitve</string>
<string name="use_external_video_player_title">Uporabi zunanji predvajalnik videa</string>
<string name="use_external_audio_player_title">Uporabi zunanji predvajalnik zvoka</string>
<string name="download_path_title">Mapa za prejem</string>
<string name="download_path_summary">Pot do mape za prejem datotek.</string>
<string name="download_path_dialog_title">Vpis poti za prejem</string>
<string name="default_resolution_title">Privzeta ločljivost</string>
<string name="play_with_kodi_title">Predvajaj s Kodi</string>
<string name="kore_not_found">Programa Kore ni mogoče najti. Program omogoča predvajanje video posnetkov prek predstavnega središča Kodi.</string>
<string name="installeKore">Namesti program Kore</string>
<string name="showPlayWithKodiTitle">Pokaži možnost \"Predvajaj s Kodi\"</string>
<string name="defaultAudioFormatTitle">Privzet zapis zvoka</string>
<string name="playAudio">Zvok</string>
<string name="webMAudioDescription">WebM - prost zapis</string>
<string name="m4aAudioDescription">m4a - višja kakovost posnetkov</string>
<string name="downloadDialogTitle">Prejem</string>
<string name="nextVideoTitle">Naslednji video</string>
<string name="showNextAndSimilarTitle">Pokaži naslednji video in podobne posnetke</string>
<string name="urlNotSupportedText">Zapis naslova URL ni podprt.</string>
<string name="showSimilarVideosButtonText">Podobni posnetki</string>
<string name="searchLanguageTitle">Prednostni jezik vsebine</string>
<string name="settingsCategoryVideoAudioTitle">Video in Zvok</string>
<string name="settingsCategoryVideoInfoTittle">Podrobnosti</string>
<string name="itemThumbnailViewDescription">Sličica predogleda videa</string>
<string name="detailThumbnailViewDescription">Sličica predogleda videa</string>
<string name="detailUploaderThumbnailViewDescription">Sličica pošiljalnika</string>
<string name="autoPlayThroughIntentTitle">Samodejno predvajaj prek vmesnika Intent</string>
<string name="autoPlayThroughIntentSummary">Začne samodejno predvajanje videa, ko je zagnan prek drugega programa.</string>
<string name="showPlayWithKodiSummary">Pokaže možnost predvajanja videa preko predstavnega središča Kodi.</string>
<string name="show_play_with_kodi_title">Pokaži možnost \"Predvajaj s Kodi\"</string>
<string name="default_audio_format_title">Privzet zapis zvoka</string>
<string name="play_audio">Zvok</string>
<string name="webm_description">WebM — prost zapis</string>
<string name="m4a_description">m4a — višja kakovost posnetkov</string>
<string name="download_dialog_title">Prejem</string>
<string name="next_video_title">Naslednji video</string>
<string name="show_next_and_similar_title">Pokaži naslednji video in podobne posnetke</string>
<string name="url_not_supported_toast">Zapis naslova URL ni podprt.</string>
<string name="similar_videos_btn_text">Podobni posnetki</string>
<string name="search_language_title">Prednostni jezik vsebine</string>
<string name="settings_category_video_audio_title">Video in Zvok</string>
<string name="list_thumbnail_view_description">Sličica predogleda videa</string>
<string name="detail_thumbnail_view_description">Sličica predogleda videa</string>
<string name="detail_uploader_thumbnail_view_description">Sličica pošiljalnika</string>
<string name="autoplay_through_intent_title">Samodejno predvajaj prek vmesnika Intent</string>
<string name="autoplay_through_intent_summary">Začne samodejno predvajanje videa, ko je zagnan prek drugega programa.</string>
<string name="show_play_with_kodi_summary">Pokaže možnost predvajanja videa preko predstavnega središča Kodi.</string>
<string name="settingsCategoryEtcTitle">Drugo</string>
<string name="detailThumbsUpImgViewDescription">Všeč mi je</string>
<string name="detailThumbsDownImgViewDescription">Ni mi všeč</string>
</resources>
<string name="detail_likes_img_view_description">Všeč mi je</string>
<string name="detail_dislikes_img_view_description">Ni mi všeč</string>
<string name="background_player_name">Ozadnji predvajalnik NewPipe</string>
<string name="loading">Nalaganje ...</string>
<string name="background_player_playing_toast">Predvajanje v ozadju</string>
<string name="play_btn_text">Predvajaj</string>
<string name="theme_title">Tema</string>
<string name="dark_theme_title">Temna</string>
<string name="light_theme_title">Svetla</string>
<string name="settings_category_appearance_title">Videz</string>
<string name="settings_category_other_title">Drugo</string>
<string name="network_error">Omrežna napaka</string>
<string name="use_tor_title">Uporabi Tor</string>
<string name="use_tor_summary">Vsili prenos prejema preko sistema Tor za povečanje zasebnosti (pretakanje videa ni še podprto)</string>
</resources>

View File

@ -1,57 +1,69 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="viewCountText">%1$s приказа</string>
<string name="uploadDateText">"Отпремљен "%1$s</string>
<string name="noPlayerFound">Нема плејера токова. Можда желите да га инсталирате.</string>
<string name="installStreamPlayer">Инсталирај</string>
<string name="view_count_text">%1$s приказа</string>
<string name="upload_date_text">"Отпремљен "%1$s</string>
<string name="no_player_found">Нема плејера токова. Можда желите да га инсталирате.</string>
<string name="install">Инсталирај</string>
<string name="cancel">Одустани</string>
<string name="open_in_browser">Отвори у прегледачу</string>
<string name="share">Дели</string>
<string name="download">Преузми</string>
<string name="search">Тражи</string>
<string name="settings">Поставке</string>
<string name="didYouMean">Да ли сте мислили: </string>
<string name="searchPage">Страница претраге: </string>
<string name="shareDialogTitle">Подели помоћу:</string>
<string name="chooseBrowser">Отвори помоћу:</string>
<string name="screenRotation">ротација</string>
<string name="title_activity_settings">Поставке</string>
<string name="did_you_mean">Да ли сте мислили: </string>
<string name="search_page">Страница претраге: </string>
<string name="share_dialog_title">Подели помоћу:</string>
<string name="choose_browser">Отвори помоћу:</string>
<string name="screen_rotation">ротација</string>
<string name="settings_activity_title">Поставке</string>
<string name="useExternalPlayerTitle">Користи спољашњи плејер</string>
<string name="downloadLocation">Одредиште преузимања</string>
<string name="downloadLocationSummary">Путања за упис преузетих видеа.</string>
<string name="downloadLocationDialogTitle">Унесите путању за преузимања</string>
<string name="autoPlayThroughIntentTitle">Аутопуштање преко Интента</string>
<string name="autoPlayThroughIntentSummary">Аутоматски почиње пушта видео по позиву из друге апликације.</string>
<string name="defaultResolutionPreferenceTitle">Подразумевана резолуција</string>
<string name="playWithKodiTitle">Пусти помоћу Кодија</string>
<string name="koreNotFound">Апликација Кор није нађена. Кор (Kore) је потребан да бисте пуштали видее у Коди медија центру.</string>
<string name="download_path_title">Одредиште преузимања</string>
<string name="download_path_summary">Путања за упис преузетих видеа.</string>
<string name="download_path_dialog_title">Унесите путању за преузимања</string>
<string name="autoplay_through_intent_title">Аутопуштање преко Интента</string>
<string name="autoplay_through_intent_summary">Аутоматски почиње пушта видео по позиву из друге апликације.</string>
<string name="default_resolution_title">Подразумевана резолуција</string>
<string name="play_with_kodi_title">Пусти помоћу Кодија</string>
<string name="kore_not_found">Апликација Кор није нађена. Кор (Kore) је потребан да бисте пуштали видее у Коди медија центру.</string>
<string name="installeKore">Инсталирај Кор</string>
<string name="showPlayWithKodiTitle">Прикажи „Пусти помоћу Кодија“</string>
<string name="showPlayWithKodiSummary">Приказ опције за пуштање видеа у Коди медија центру.</string>
<string name="playAudio">Аудио</string>
<string name="defaultAudioFormatTitle">Подразумевани формат звука</string>
<string name="webMAudioDescription">WebM - слободни формат</string>
<string name="m4aAudioDescription">m4a - бољи квалитет</string>
<string name="downloadDialogTitle">Преузми</string>
<string name="show_play_with_kodi_title">Прикажи „Пусти помоћу Кодија“</string>
<string name="show_play_with_kodi_summary">Приказ опције за пуштање видеа у Коди медија центру.</string>
<string name="play_audio">Аудио</string>
<string name="default_audio_format_title">Подразумевани формат звука</string>
<string name="webm_description">WebM — слободни формат</string>
<string name="m4a_description">m4a — бољи квалитет</string>
<string name="download_dialog_title">Преузми</string>
<string-array name="downloadOptions">
<item>Видео</item>
<item>Аудио</item>
</string-array>
<string name="nextVideoTitle">Следећи видео</string>
<string name="urlNotSupportedText">УРЛ није подржан.</string>
<string name="showNextAndSimilarTitle">Прикажи следећи и слични видео</string>
<string name="showSimilarVideosButtonText">Слични видео</string>
<string name="searchLanguageTitle">Пожељни језик садржаја</string>
<string name="settingsCategoryVideoAudioTitle">ВИДЕО И АУДИО</string>
<string name="settingsCategoryVideoInfoTittle">ПОДАЦИ</string>
<string name="settingsCategoryEtcTitle">ОСТАЛО</string>
<string name="itemThumbnailViewDescription">Сличица видео прегледа</string>
<string name="detailThumbnailViewDescription">Сличица видео прегледа</string>
<string name="detailUploaderThumbnailViewDescription">Сличица отпремаоца</string>
<string name="detailThumbsDownImgViewDescription">Несвиђања</string>
<string name="detailThumbsUpImgViewDescription">Свиђања</string>
<string name="useExternalVideoPlayerTitle">Користи спољашњи видео плејер</string>
<string name="useExternalAudioPlayerTitle">Користи спољашњи аудио плејер</string>
<string name="backgroundPlayerStartPlayingToast">Пуштам у позадини</string>
<string name="next_video_title">Следећи видео</string>
<string name="url_not_supported_toast">УРЛ није подржан.</string>
<string name="show_next_and_similar_title">Прикажи следећи и слични видео</string>
<string name="similar_videos_btn_text">Слични видео</string>
<string name="search_language_title">Пожељни језик садржаја</string>
<string name="settings_category_video_audio_title">Видео и Аудио</string>
<string name="settings_category_other_title">Остало</string>
<string name="list_thumbnail_view_description">Сличица видео прегледа</string>
<string name="detail_thumbnail_view_description">Сличица видео прегледа</string>
<string name="detail_uploader_thumbnail_view_description">Сличица отпремаоца</string>
<string name="detail_dislikes_img_view_description">Несвиђања</string>
<string name="detail_likes_img_view_description">Свиђања</string>
<string name="use_external_video_player_title">Користи спољашњи видео плејер</string>
<string name="use_external_audio_player_title">Користи спољашњи аудио плејер</string>
<string name="background_player_playing_toast">Пуштам у позадини</string>
<string name="background_player_name">Позадински плејер за Јутјуб цев</string>
<string name="loading">Учитавам</string>
<string name="play_btn_text">Пусти</string>
<string name="use_tor_title">Користи Тор</string>
<string name="use_tor_summary">Принудно преусмерење саобраћаја кроз Тор за доданту приватност (токови још нису подржани)</string>
<string name="theme_title">Тема</string>
<string name="dark_theme_title">Тамна</string>
<string name="light_theme_title">Светла</string>
<string name="settings_category_appearance_title">Изглед</string>
<string name="network_error">Грешка мреже</string>
</resources>

View File

@ -3,18 +3,18 @@
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:actionBarStyle">@style/NewPipeActionbarTheme</item>
<item name="actionBarStyle">@style/NewPipeActionbarTheme</item>
<item name="android:colorPrimary">@color/primaryColorYoutube</item>
<item name="android:colorPrimaryDark">@color/primaryColorDarkYoutube</item>
<item name="colorAccent">@color/accentColorYoutube</item>
<item name="android:colorAccent">@color/accentColorYoutube</item>
<item name="android:windowBackground">@color/background_gray</item>
<item name="android:colorPrimary">@color/light_youtube_primary_color</item>
<item name="android:colorPrimaryDark">@color/light_youtube_dark_color</item>
<item name="colorAccent">@color/light_youtube_accent_color</item>
<item name="android:colorAccent">@color/light_youtube_accent_color</item>
<item name="android:windowBackground">@color/light_background_color</item>
</style>
<style name="NewPipeActionbarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid" >
<item name="android:displayOptions">showHome</item>
<item name="displayOptions">showHome</item>
<item name="android:background">@color/primaryColorYoutube</item>
<item name="background">@color/primaryColorYoutube</item>
<item name="android:background">@color/light_youtube_primary_color</item>
<item name="background">@color/light_youtube_primary_color</item>
</style>
<style name="VideoPlayerTheme" parent="Theme.AppCompat.Light.DarkActionBar">
@ -23,15 +23,15 @@
<item name="windowActionBarOverlay">true</item>
<item name="android:actionBarStyle">@style/VideoPlayerActionBarTheme</item>
<item name="actionBarStyle">@style/VideoPlayerActionBarTheme</item>
<item name="colorAccent">@color/primaryColorYoutube</item>
<item name="android:colorAccent">@color/primaryColorYoutube</item>
<item name="colorAccent">@color/light_youtube_primary_color</item>
<item name="android:colorAccent">@color/light_youtube_primary_color</item>
<item name="android:windowBackground">@android:color/black</item>
</style>
<style name="VideoPlayerActionBarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse" >
<item name="android:displayOptions">showHome</item>
<item name="displayOptions">showHome</item>
<item name="android:background">@color/dark_overlay</item>
<item name="background">@color/dark_overlay</item>
<item name="android:background">@color/video_overlay_color</item>
<item name="background">@color/video_overlay_color</item>
</style>
</resources>

View File

@ -1,10 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primaryColorYoutube">#cd322e</color>
<color name="primaryColorDarkYoutube">#bc211d</color>
<color name="accentColorYoutube">#000</color>
<color name="durationBackground">#a000</color>
<color name="durationText">#efff</color>
<color name="dark_overlay">#6000</color>
<color name="background_gray">#EEEEEE</color>
<!-- Light Theme -->
<color name="light_background_color">#EEEEEE</color>
<color name="light_youtube_primary_color">#CD322E</color>
<color name="light_youtube_dark_color">#BC211D</color>
<color name="light_youtube_accent_color">#000000</color>
<!-- Dark Theme -->
<color name="dark_background_color">#222222</color>
<color name="dark_youtube_primary_color">#CD322E</color>
<color name="dark_youtube_dark_color">#BC211D</color>
<color name="dark_youtube_accent_color">#FFFFFF</color>
<!-- Miscellaneous -->
<color name="duration_dackground_color">#AA000000</color>
<color name="duration_text_color">#EEFFFFFF</color>
<color name="video_overlay_color">#66000000</color>
<color name="background_notification_color">#323232</color>
</resources>

View File

@ -1,38 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Categories -->
<string name="settingsCategoryVideoAudio">settings_categoery_video_audio</string>
<string name="settingsCategoryVideoInfo">settings_category_video_info</string>
<string name="settingsCategoryEtc">settings_category_etc</string>
<string name="settings_category_video_audio">settings_category_video_audio</string>
<string name="settings_category_appearance">settings_category_appearance</string>
<string name="settings_category_other">settings_category_other</string>
<!-- Key values -->
<string name="downloadPathPreference">download_path_preference</string>
<string name="useExternalVideoPlayer">use_external_video_player</string>
<string name="useExternalAudioPlayer">use_external_audio_player</string>
<string name="autoPlayThroughIntent">autoplay_through_intent</string>
<string name="defaultResolutionPreference">default_resolution_preference</string>
<string-array name="resolutionList">
<string name="download_path_key">download_path</string>
<string name="use_external_video_player_key">use_external_video_player</string>
<string name="use_external_audio_player_key">use_external_audio_player</string>
<string name="autoplay_through_intent_key">autoplay_through_intent</string>
<string name="default_resolution_key">default_resolution_preference</string>
<string name="default_resolution_value">360p</string>
<string-array name="resolution_list">
<item>720p</item>
<item>360p</item>
<item>240p</item>
<item>144p</item>
</string-array>
<string name="defaultResolutionListItem">360p</string>
<string name="showPlayWithKodiPreference">show_play_with_kodi_preference</string>
<string name="defaultAudioFormatPreference">default_audio_format</string>
<string-array name="audioFormatDescriptionList">
<item>@string/webMAudioDescription</item>
<item>@string/m4aAudioDescription</item>
<string name="show_play_with_kodi_key">show_play_with_kodi</string>
<string name="theme_key">theme</string>
<string name="default_theme_value">0</string>
<string-array name="theme_description_list">
<item>@string/dark_theme_title</item>
<item>@string/light_theme_title</item>
</string-array>
<string-array name="audioFormatList">
<string-array name="theme_list">
<item>0</item>
<item>1</item>
</string-array>
<string name="default_audio_format_key">default_audio_format</string>
<string name="default_audio_format_value">m4a</string>
<string-array name="audio_format_description_list">
<item>@string/webm_description</item>
<item>@string/m4a_description</item>
</string-array>
<string-array name="audio_format_list">
<item>webm</item>
<item>m4a</item>
</string-array>
<string name="defaultAudioFormat">m4a</string>
<string name="showNextVideo">show_next_video</string>
<string name="searchLanguage">search_language</string>
<string name="show_next_video_key">show_next_video</string>
<string name="default_language_value">en</string>
<string name="search_language_key">search_language</string>
<!-- TODO: scrape these programmatically, then store in a local cache -->
<!-- alternatively, load these from some local android data store -->
<string-array name='languageCodes'>
<string-array name="language_codes">
<item>af</item>
<item>az</item>
<item>id</item>
@ -71,6 +87,7 @@
<item>sl</item>
<item>fi</item>
<item>sv</item>
<item>bo</item>
<item>vi</item>
<item>tr</item>
<item>bg</item>
@ -110,7 +127,7 @@
<item>ja</item>
<item>ko</item>
</string-array>
<string-array name='languageNames'>
<string-array name="language_names">
<item>Afrikaans</item>
<item>Azərbaycan</item>
<item>Bahasa Indonesia</item>
@ -149,6 +166,7 @@
<item>Slovenščina</item>
<item>Suomi</item>
<item>Svenska</item>
<item>Tibetan བོད་སྐད།</item>
<item>Tiếng Việt</item>
<item>Türkçe</item>
<item>Български</item>
@ -188,4 +206,5 @@
<item>日本語</item>
<item>한국어</item>
</string-array>
<string name="use_tor_key">use_tor</string>
</resources>

View File

@ -1,63 +1,72 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="app_name" translatable="false">NewPipe</string>
<string name="background_player_name">NewPipe Background Player</string>
<string name="title_videoitem_detail" translatable="false">NewPipe</string>
<string name="viewCountText">%1$s views</string>
<string name="uploadDateText">Uploaded on %1$s</string>
<string name="noPlayerFound">No stream player found. You may want to install one.</string>
<string name="installStreamPlayer">Install</string>
<string name="view_count_text">%1$s views</string>
<string name="upload_date_text">Uploaded on %1$s</string>
<string name="no_player_found">No stream player found. Install VLC?</string>
<string name="install">Install</string>
<string name="cancel">Cancel</string>
<string name="fdroidVLCurl" translatable="false">https://f-droid.org/repository/browse/?fdfilter=vlc&amp;fdid=org.videolan.vlc</string>
<string name="fdroid_vlc_url" translatable="false">https://f-droid.org/repository/browse/?fdfilter=vlc&amp;fdid=org.videolan.vlc</string>
<string name="open_in_browser">Open in browser</string>
<string name="share">Share</string>
<string name="loading">Loading</string>
<string name="download">Download</string>
<string name="search">Search</string>
<string name="settings">Settings</string>
<string name="didYouMean">Did you mean: </string>
<string name="searchPage">Search page: </string>
<string name="shareDialogTitle">Share with:</string>
<string name="chooseBrowser">Choose browser:</string>
<string name="screenRotation">rotation</string>
<string name="title_activity_settings">Settings</string>
<string name="useExternalVideoPlayerTitle">Use external video player</string>
<string name="useExternalAudioPlayerTitle">Use external audio player</string>
<string name="downloadLocation">Download location</string>
<string name="downloadLocationSummary">Path to store downloaded videos in.</string>
<string name="downloadLocationDialogTitle">Enter download path</string>
<string name="autoPlayThroughIntentTitle">Autoplay through Intent</string>
<string name="autoPlayThroughIntentSummary">Automatically starts a video when it was called from another app.</string>
<string name="defaultResolutionPreferenceTitle">Default Resolution</string>
<string name="playWithKodiTitle">Play with Kodi</string>
<string name="koreNotFound">Kore app not found. Kore is needed to play videos with Kodi media center.</string>
<string name="installeKore">Install Kore</string>
<string name="fdroidKoreUrl" translatable="false">https://f-droid.org/repository/browse/?fdfilter=Kore&amp;fdid=org.xbmc.kore</string>
<string name="showPlayWithKodiTitle">Show \"Play with Kodi\" option</string>
<string name="showPlayWithKodiSummary">Displays an option to play a video via Kodi media center.</string>
<string name="playAudio">Audio</string>
<string name="defaultAudioFormatTitle">Default audio format</string>
<string name="webMAudioDescription">WebM - free format</string>
<string name="m4aAudioDescription">m4a - better quality</string>
<string name="downloadDialogTitle">Download</string>
<string-array name="downloadOptions">
<string name="did_you_mean">Did you mean: </string>
<string name="search_page">Search page: </string>
<string name="share_dialog_title">Share with:</string>
<string name="choose_browser">Choose browser:</string>
<string name="screen_rotation">rotation</string>
<string name="settings_activity_title">Settings</string>
<string name="use_external_video_player_title">Use external video player</string>
<string name="use_external_audio_player_title">Use external audio player</string>
<string name="download_path_title">Download path</string>
<string name="download_path_summary">Path to store downloaded videos in</string>
<string name="download_path_dialog_title">Enter download path</string>
<string name="autoplay_through_intent_title">Autoplay through Intent</string>
<string name="autoplay_through_intent_summary">Automatically play a video when it\'s called from another app</string>
<string name="default_resolution_title">Default Resolution</string>
<string name="play_with_kodi_title">Play with Kodi</string>
<string name="kore_not_found">Kore app not found. Install Kore?</string>
<string name="fdroid_kore_url" translatable="false">https://f-droid.org/repository/browse/?fdfilter=Kore&amp;fdid=org.xbmc.kore</string>
<string name="show_play_with_kodi_title">Show \"Play with Kodi\" option</string>
<string name="show_play_with_kodi_summary">Display an option to play a video via Kodi media center</string>
<string name="play_audio">Audio</string>
<string name="default_audio_format_title">Default audio format</string>
<string name="webm_description">WebM &#8212; free format</string>
<string name="m4a_description">m4a &#8212; better quality</string>
<string name="theme_title">Theme</string>
<string name="dark_theme_title">Dark</string>
<string name="light_theme_title">Light</string>
<string name="download_dialog_title">Download</string>
<string-array name="download_options">
<item>Video</item>
<item>Audio</item>
</string-array>
<string name="nextVideoTitle">Next video</string>
<string name="showNextAndSimilarTitle">Show next and similar videos</string>
<string name="urlNotSupportedText">URL not supported.</string>
<string name="showSimilarVideosButtonText">Similar videos</string>
<string name="searchLanguageTitle">Preferable content language</string>
<string name="settingsCategoryVideoAudioTitle">VIDEO &amp; AUDIO</string>
<string name="settingsCategoryVideoInfoTittle">INFO</string>
<string name="settingsCategoryEtcTitle">ETC</string>
<string name="backgroundPlayerTickerText" translatable="false">%1$s - NewPipe</string>
<string name="backgroundPlayerStartPlayingToast">Playing in background</string>
<string name="c3sUrl" translatable="false">https://www.c3s.cc/</string>
<string name="next_video_title">Next video</string>
<string name="show_next_and_similar_title">Show next and similar videos</string>
<string name="url_not_supported_toast">URL not supported</string>
<string name="similar_videos_btn_text">Similar videos</string>
<string name="search_language_title">Preferable content language</string>
<string name="settings_category_video_audio_title">Video &amp; Audio</string>
<string name="settings_category_appearance_title">Appearance</string>
<string name="settings_category_other_title">Other</string>
<string name="background_player_time_text" translatable="false">%1$s - NewPipe</string>
<string name="background_player_playing_toast">Playing in background</string>
<string name="c3s_url" translatable="false">https://www.c3s.cc/</string>
<string name="play_btn_text">Play</string>
<string name="network_error">Network Error</string>
<!-- Content descriptions (for better accessibility) -->
<string name="itemThumbnailViewDescription">Video preview thumbnail</string>
<string name="detailThumbnailViewDescription">Video preview thumbnail</string>
<string name="detailUploaderThumbnailViewDescription">Uploader thumbnail</string>
<string name="detailThumbsDownImgViewDescription">Dislikes</string>
<string name="detailThumbsUpImgViewDescription">Likes</string>
<string name="list_thumbnail_view_description">Video preview thumbnail</string>
<string name="detail_thumbnail_view_description">Video preview thumbnail</string>
<string name="detail_uploader_thumbnail_view_description">Uploader\'s userpic thumbnail</string>
<string name="detail_likes_img_view_description">Likes</string>
<string name="detail_dislikes_img_view_description">Dislikes</string>
<string name="use_tor_title">Use Tor</string>
<string name="use_tor_summary">Force download traffic through Tor for increased privacy (streaming videos not yet supported)</string>
</resources>

View File

@ -3,17 +3,17 @@
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:actionBarStyle">@style/NewPipeActionbarTheme</item>
<item name="actionBarStyle">@style/NewPipeActionbarTheme</item>
<item name="colorPrimary">@color/primaryColorYoutube</item>
<item name="colorPrimaryDark">@color/primaryColorDarkYoutube</item>
<item name="colorAccent">@color/accentColorYoutube</item>
<item name="android:windowBackground">@color/background_gray</item>
<item name="colorPrimary">@color/light_youtube_primary_color</item>
<item name="colorPrimaryDark">@color/light_youtube_dark_color</item>
<item name="colorAccent">@color/light_youtube_accent_color</item>
<item name="android:windowBackground">@color/light_background_color</item>
</style>
<style name="NewPipeActionbarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid" >
<item name="android:displayOptions">showHome</item>
<item name="displayOptions">showHome</item>
<item name="android:background">@color/primaryColorYoutube</item>
<item name="background">@color/primaryColorYoutube</item>
<item name="android:background">@color/light_youtube_primary_color</item>
<item name="background">@color/light_youtube_primary_color</item>
</style>
<style name="VideoPlayerTheme" parent="Theme.AppCompat.Light.DarkActionBar">
@ -22,14 +22,14 @@
<item name="windowActionBarOverlay">true</item>
<item name="android:actionBarStyle">@style/VideoPlayerActionBarTheme</item>
<item name="actionBarStyle">@style/VideoPlayerActionBarTheme</item>
<item name="colorAccent">@color/primaryColorYoutube</item>
<item name="colorAccent">@color/light_youtube_primary_color</item>
<item name="android:windowBackground">@android:color/black</item>
</style>
<style name="VideoPlayerActionBarTheme" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse" >
<item name="android:displayOptions">showHome</item>
<item name="displayOptions">showHome</item>
<item name="android:background">@color/dark_overlay</item>
<item name="background">@color/dark_overlay</item>
<item name="android:background">@color/video_overlay_color</item>
<item name="background">@color/video_overlay_color</item>
</style>
</resources>

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings_activity_title"
android:key="general_preferences">
<PreferenceCategory
android:key="@string/settings_category_video_audio"
android:title="@string/settings_category_video_audio_title"
android:textAllCaps="true">
<CheckBoxPreference
android:key="@string/use_external_video_player_key"
android:title="@string/use_external_video_player_title"
android:defaultValue="false"/>
<CheckBoxPreference
android:key="@string/use_external_audio_player_key"
android:title="@string/use_external_audio_player_title"
android:defaultValue="false"/>
<ListPreference
android:key="@string/default_resolution_key"
android:title="@string/default_resolution_title"
android:entries="@array/resolution_list"
android:entryValues="@array/resolution_list"
android:defaultValue="@string/default_resolution_value"/>
<ListPreference
android:key="@string/default_audio_format_key"
android:title="@string/default_audio_format_title"
android:summary="%s"
android:entries="@array/audio_format_description_list"
android:entryValues="@array/audio_format_list"
android:defaultValue="@string/default_audio_format_value"/>
</PreferenceCategory>
<PreferenceCategory
android:key="@string/settings_category_appearance"
android:title="@string/settings_category_appearance_title"
android:textAllCaps="true">
<!-- Not yet working.
<ListPreference
android:key="@string/theme_key"
android:title="@string/theme_title"
android:summary="%s"
android:entries="@array/theme_description_list"
android:entryValues="@array/theme_list"
android:defaultValue="@string/default_theme_value"/>
-->
<CheckBoxPreference
android:key="@string/show_play_with_kodi_key"
android:title="@string/show_play_with_kodi_title"
android:summary="@string/show_play_with_kodi_summary"
android:defaultValue="false" />
<CheckBoxPreference
android:key="@string/show_next_video_key"
android:title="@string/show_next_and_similar_title"
android:defaultValue="true" />
</PreferenceCategory>
<PreferenceCategory
android:key="@string/settings_category_other"
android:title="@string/settings_category_other_title"
android:textAllCaps="true">
<ListPreference
android:key="@string/search_language_key"
android:title="@string/search_language_title"
android:summary="%s"
android:entries="@array/language_names"
android:entryValues="@array/language_codes"
android:defaultValue="@string/default_language_value" />
<EditTextPreference
android:key="@string/download_path_key"
android:title="@string/download_path_title"
android:summary="@string/download_path_summary"
android:dialogTitle="@string/download_path_dialog_title" />
<CheckBoxPreference
android:key="@string/autoplay_through_intent_key"
android:title="@string/autoplay_through_intent_title"
android:summary="@string/autoplay_through_intent_summary"
android:defaultValue="false" />
<CheckBoxPreference
android:key="@string/use_tor_key"
android:title="@string/use_tor_title"
android:summary="@string/use_tor_summary"
android:defaultValue="false"/>
</PreferenceCategory>
</PreferenceScreen>

View File

@ -1,77 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/title_activity_settings"
android:key="general_preferences">
<PreferenceCategory
android:key="@string/settingsCategoryVideoAudio"
android:title="@string/settingsCategoryVideoAudioTitle">
<CheckBoxPreference
android:key="@string/useExternalVideoPlayer"
android:title="@string/useExternalVideoPlayerTitle"
android:defaultValue="false"/>
<CheckBoxPreference
android:key="@string/useExternalAudioPlayer"
android:title="@string/useExternalAudioPlayerTitle"
android:defaultValue="false"/>
<ListPreference
android:key="@string/defaultResolutionPreference"
android:title="@string/defaultResolutionPreferenceTitle"
android:entries="@array/resolutionList"
android:entryValues="@array/resolutionList"
android:defaultValue="@string/defaultResolutionListItem"/>
<ListPreference
android:key="@string/defaultAudioFormatPreference"
android:title="@string/defaultAudioFormatTitle"
android:entries="@array/audioFormatDescriptionList"
android:entryValues="@array/audioFormatList"
android:defaultValue="@string/defaultAudioFormat"/>
</PreferenceCategory>
<PreferenceCategory
android:key="@string/settingsCategoryVideoInfo"
android:title="@string/settingsCategoryVideoInfoTittle">
<CheckBoxPreference
android:key="@string/showPlayWithKodiPreference"
android:title="@string/showPlayWithKodiTitle"
android:summary="@string/showPlayWithKodiSummary"
android:defaultValue="false" />
<ListPreference
android:key="@string/searchLanguage"
android:title="@string/searchLanguageTitle"
android:entries="@array/languageNames"
android:entryValues="@array/languageCodes"
android:defaultValue="en" />
<CheckBoxPreference
android:key="@string/showNextVideo"
android:title="@string/showNextAndSimilarTitle"
android:defaultValue="true" />
</PreferenceCategory>
<PreferenceCategory
android:key="@string/settingsCategoryEtc"
android:title="@string/settingsCategoryEtcTitle">
<EditTextPreference
android:key="@string/downloadPathPreference"
android:title="@string/downloadLocation"
android:summary="@string/downloadLocationSummary"
android:dialogTitle="@string/downloadLocationDialogTitle"
android:defaultValue=""/>
<CheckBoxPreference
android:key="@string/autoPlayThroughIntent"
android:title="@string/autoPlayThroughIntentTitle"
android:summary="@string/autoPlayThroughIntentSummary"
android:defaultValue="false" />
</PreferenceCategory>
</PreferenceScreen>

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -1,18 +0,0 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true