FALLBACK_INITIAL_TABS_LIST = Collections.unmodifiableList(Arrays.asList(
+ new Tab.KioskTab(YouTube.getServiceId(), "Trending"),
+ Type.SUBSCRIPTIONS.getTab(),
+ Type.BOOKMARKS.getTab()
+ ));
+
+ public static class InvalidJsonException extends Exception {
+ private InvalidJsonException() {
+ super();
+ }
+
+ private InvalidJsonException(String message) {
+ super(message);
+ }
+
+ private InvalidJsonException(Throwable cause) {
+ super(cause);
+ }
+ }
+
+ /**
+ * Try to reads the passed JSON and returns the list of tabs if no error were encountered.
+ *
+ * If the JSON is null or empty, or the list of tabs that it represents is empty, the
+ * {@link #FALLBACK_INITIAL_TABS_LIST fallback list} will be returned.
+ *
+ * Tabs with invalid ids (i.e. not in the {@link Tab.Type} enum) will be ignored.
+ *
+ * @param tabsJson a JSON string got from {@link #getJsonToSave(List)}.
+ * @return a list of {@link Tab tabs}.
+ * @throws InvalidJsonException if the JSON string is not valid
+ */
+ public static List getTabsFromJson(@Nullable String tabsJson) throws InvalidJsonException {
+ if (tabsJson == null || tabsJson.isEmpty()) {
+ return FALLBACK_INITIAL_TABS_LIST;
+ }
+
+ final List returnTabs = new ArrayList<>();
+
+ final JsonObject outerJsonObject;
+ try {
+ outerJsonObject = JsonParser.object().from(tabsJson);
+ final JsonArray tabsArray = outerJsonObject.getArray(JSON_TABS_ARRAY_KEY);
+
+ if (tabsArray == null) {
+ throw new InvalidJsonException("JSON doesn't contain \"" + JSON_TABS_ARRAY_KEY + "\" array");
+ }
+
+ for (Object o : tabsArray) {
+ if (!(o instanceof JsonObject)) continue;
+
+ final Tab tab = Tab.from((JsonObject) o);
+
+ if (tab != null) {
+ returnTabs.add(tab);
+ }
+ }
+ } catch (JsonParserException e) {
+ throw new InvalidJsonException(e);
+ }
+
+ if (returnTabs.isEmpty()) {
+ return FALLBACK_INITIAL_TABS_LIST;
+ }
+
+ return returnTabs;
+ }
+
+ /**
+ * Get a JSON representation from a list of tabs.
+ *
+ * @param tabList a list of {@link Tab tabs}.
+ * @return a JSON string representing the list of tabs
+ */
+ public static String getJsonToSave(@Nullable List tabList) {
+ final JsonStringWriter jsonWriter = JsonWriter.string();
+ jsonWriter.object();
+
+ jsonWriter.array(JSON_TABS_ARRAY_KEY);
+ if (tabList != null) for (Tab tab : tabList) {
+ tab.writeJsonOn(jsonWriter);
+ }
+ jsonWriter.end();
+
+ jsonWriter.end();
+ return jsonWriter.done();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsManager.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsManager.java
new file mode 100644
index 000000000..a7d8dffa4
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsManager.java
@@ -0,0 +1,93 @@
+package org.schabi.newpipe.settings.tabs;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.widget.Toast;
+
+import org.schabi.newpipe.R;
+
+import java.util.List;
+
+public class TabsManager {
+ private final SharedPreferences sharedPreferences;
+ private final String savedTabsKey;
+ private final Context context;
+
+ public static TabsManager getManager(Context context) {
+ return new TabsManager(context);
+ }
+
+ private TabsManager(Context context) {
+ this.context = context;
+ this.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
+ this.savedTabsKey = context.getString(R.string.saved_tabs_key);
+ }
+
+ public List getTabs() {
+ final String savedJson = sharedPreferences.getString(savedTabsKey, null);
+ try {
+ return TabsJsonHelper.getTabsFromJson(savedJson);
+ } catch (TabsJsonHelper.InvalidJsonException e) {
+ Toast.makeText(context, R.string.saved_tabs_invalid_json, Toast.LENGTH_SHORT).show();
+ return getDefaultTabs();
+ }
+ }
+
+ public void saveTabs(List tabList) {
+ final String jsonToSave = TabsJsonHelper.getJsonToSave(tabList);
+ sharedPreferences.edit().putString(savedTabsKey, jsonToSave).apply();
+ }
+
+ public void resetTabs() {
+ sharedPreferences.edit().remove(savedTabsKey).apply();
+ }
+
+ public List getDefaultTabs() {
+ return TabsJsonHelper.FALLBACK_INITIAL_TABS_LIST;
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Listener
+ //////////////////////////////////////////////////////////////////////////*/
+
+ public interface SavedTabsChangeListener {
+ void onTabsChanged();
+ }
+
+ private SavedTabsChangeListener savedTabsChangeListener;
+ private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;
+
+ public void setSavedTabsListener(SavedTabsChangeListener listener) {
+ if (preferenceChangeListener != null) {
+ sharedPreferences.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);
+ }
+ savedTabsChangeListener = listener;
+ preferenceChangeListener = getPreferenceChangeListener();
+ sharedPreferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
+ }
+
+ public void unsetSavedTabsListener() {
+ if (preferenceChangeListener != null) {
+ sharedPreferences.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);
+ }
+ preferenceChangeListener = null;
+ savedTabsChangeListener = null;
+ }
+
+ private SharedPreferences.OnSharedPreferenceChangeListener getPreferenceChangeListener() {
+ return (sharedPreferences, key) -> {
+ if (key.equals(savedTabsKey)) {
+ if (savedTabsChangeListener != null) savedTabsChangeListener.onTabsChanged();
+ }
+ };
+ }
+
+}
+
+
+
+
+
+
+
diff --git a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
index e445233c3..31ab1a845 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
@@ -32,6 +32,7 @@ import org.schabi.newpipe.extractor.Info;
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.channel.ChannelInfo;
+import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
import org.schabi.newpipe.extractor.exceptions.ParsingException;
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
@@ -183,7 +184,7 @@ public final class ExtractorHelper {
cache.removeInfo(serviceId, url);
load = loadFromNetwork;
} else {
- load = Maybe.concat(ExtractorHelper.loadFromCache(serviceId, url),
+ load = Maybe.concat(ExtractorHelper.loadFromCache(serviceId, url),
loadFromNetwork.toMaybe())
.firstElement() //Take the first valid
.toSingle();
diff --git a/app/src/main/java/org/schabi/newpipe/util/InfoCache.java b/app/src/main/java/org/schabi/newpipe/util/InfoCache.java
index ecc66bb40..318db37a1 100644
--- a/app/src/main/java/org/schabi/newpipe/util/InfoCache.java
+++ b/app/src/main/java/org/schabi/newpipe/util/InfoCache.java
@@ -28,9 +28,6 @@ import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.extractor.Info;
import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
public final class InfoCache {
@@ -58,7 +55,7 @@ public final class InfoCache {
public Info getFromKey(int serviceId, @NonNull String url) {
if (DEBUG) Log.d(TAG, "getFromKey() called with: serviceId = [" + serviceId + "], url = [" + url + "]");
synchronized (lruCache) {
- return getInfo(lruCache, keyOf(serviceId, url));
+ return getInfo(keyOf(serviceId, url));
}
}
@@ -89,7 +86,7 @@ public final class InfoCache {
public void trimCache() {
if (DEBUG) Log.d(TAG, "trimCache() called");
synchronized (lruCache) {
- removeStaleCache(lruCache);
+ removeStaleCache();
lruCache.trimToSize(TRIM_CACHE_TO);
}
}
@@ -105,23 +102,22 @@ public final class InfoCache {
return serviceId + url;
}
- private static void removeStaleCache(@NonNull final LruCache cache) {
- for (Map.Entry entry : cache.snapshot().entrySet()) {
+ private static void removeStaleCache() {
+ for (Map.Entry entry : InfoCache.lruCache.snapshot().entrySet()) {
final CacheData data = entry.getValue();
if (data != null && data.isExpired()) {
- cache.remove(entry.getKey());
+ InfoCache.lruCache.remove(entry.getKey());
}
}
}
@Nullable
- private static Info getInfo(@NonNull final LruCache cache,
- @NonNull final String key) {
- final CacheData data = cache.get(key);
+ private static Info getInfo(@NonNull final String key) {
+ final CacheData data = InfoCache.lruCache.get(key);
if (data == null) return null;
if (data.isExpired()) {
- cache.remove(key);
+ InfoCache.lruCache.remove(key);
return null;
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/ListHelper.java b/app/src/main/java/org/schabi/newpipe/util/ListHelper.java
index 1a5bf14f7..871d0578f 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ListHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ListHelper.java
@@ -204,7 +204,7 @@ public final class ListHelper {
*/
private static void sortStreamList(List videoStreams, final boolean ascendingOrder) {
Collections.sort(videoStreams, (o1, o2) -> {
- int result = compareVideoStreamResolution(o1, o2, VIDEO_FORMAT_QUALITY_RANKING);
+ int result = compareVideoStreamResolution(o1, o2);
return result == 0 ? 0 : (ascendingOrder ? result : -result);
});
}
@@ -399,8 +399,7 @@ public final class ListHelper {
}
// Compares the quality of two video streams.
- private static int compareVideoStreamResolution(VideoStream streamA, VideoStream streamB,
- List formatRanking) {
+ private static int compareVideoStreamResolution(VideoStream streamA, VideoStream streamB) {
if (streamA == null) {
return -1;
}
@@ -414,7 +413,7 @@ public final class ListHelper {
}
// Same bitrate and format
- return formatRanking.indexOf(streamA.getFormat()) - formatRanking.indexOf(streamB.getFormat());
+ return ListHelper.VIDEO_FORMAT_QUALITY_RANKING.indexOf(streamA.getFormat()) - ListHelper.VIDEO_FORMAT_QUALITY_RANKING.indexOf(streamB.getFormat());
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
index 13767125d..5b953697d 100644
--- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
@@ -26,7 +26,6 @@ import org.schabi.newpipe.download.DownloadActivity;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
-import org.schabi.newpipe.extractor.search.SearchExtractor;
import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.Stream;
import org.schabi.newpipe.extractor.stream.StreamInfo;
diff --git a/app/src/main/java/org/schabi/newpipe/util/StateSaver.java b/app/src/main/java/org/schabi/newpipe/util/StateSaver.java
index 51dceddf3..3115862e0 100644
--- a/app/src/main/java/org/schabi/newpipe/util/StateSaver.java
+++ b/app/src/main/java/org/schabi/newpipe/util/StateSaver.java
@@ -21,7 +21,6 @@ package org.schabi.newpipe.util;
import android.content.Context;
-import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
index e3fe4a679..e100a447b 100644
--- a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
+++ b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java
@@ -31,7 +31,7 @@ import us.shandian.giga.util.Utility;
public class StreamItemAdapter extends BaseAdapter {
private final Context context;
- private StreamSizeWrapper streamsWrapper;
+ private final StreamSizeWrapper streamsWrapper;
private final boolean showIconNoAudio;
public StreamItemAdapter(Context context, StreamSizeWrapper streamsWrapper, boolean showIconNoAudio) {
@@ -124,7 +124,7 @@ public class StreamItemAdapter extends BaseAdapter {
public static class StreamSizeWrapper implements Serializable {
private static final StreamSizeWrapper EMPTY = new StreamSizeWrapper<>(Collections.emptyList());
private final List streamsList;
- private long[] streamSizes;
+ private final long[] streamSizes;
public StreamSizeWrapper(List streamsList) {
this.streamsList = streamsList;
diff --git a/app/src/main/java/org/schabi/newpipe/util/ZipHelper.java b/app/src/main/java/org/schabi/newpipe/util/ZipHelper.java
index 3578f34ac..3142ad8dc 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ZipHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ZipHelper.java
@@ -56,7 +56,6 @@ public class ZipHelper {
/**
* This will extract data from Zipfiles.
* Caution this will override the original file.
- * @param inZip The ZipOutputStream where the data is stored in
* @param file The path of the file on the disk where the data should be extracted to.
* @param name The path of the file inside the zip.
* @return will return true if the file was found within the zip file
diff --git a/app/src/main/java/org/schabi/newpipe/views/CollapsibleView.java b/app/src/main/java/org/schabi/newpipe/views/CollapsibleView.java
index adef7e76f..88d525625 100644
--- a/app/src/main/java/org/schabi/newpipe/views/CollapsibleView.java
+++ b/app/src/main/java/org/schabi/newpipe/views/CollapsibleView.java
@@ -81,7 +81,7 @@ public class CollapsibleView extends LinearLayout {
private int targetHeight = -1;
private ValueAnimator currentAnimator;
- private List listeners = new ArrayList<>();
+ private final List listeners = new ArrayList<>();
/**
* This method recalculates the height of this view so it must be called when
diff --git a/app/src/main/java/us/shandian/giga/get/DownloadManagerImpl.java b/app/src/main/java/us/shandian/giga/get/DownloadManagerImpl.java
index 3294f5164..a377d861c 100755
--- a/app/src/main/java/us/shandian/giga/get/DownloadManagerImpl.java
+++ b/app/src/main/java/us/shandian/giga/get/DownloadManagerImpl.java
@@ -123,7 +123,7 @@ public class DownloadManagerImpl implements DownloadManager {
Collections.sort(missions, new Comparator() {
@Override
public int compare(DownloadMission o1, DownloadMission o2) {
- return Long.valueOf(o1.timestamp).compareTo(o2.timestamp);
+ return Long.compare(o1.timestamp, o2.timestamp);
}
});
}
diff --git a/app/src/main/java/us/shandian/giga/get/DownloadMission.java b/app/src/main/java/us/shandian/giga/get/DownloadMission.java
index f02eaae28..79c4baf05 100644
--- a/app/src/main/java/us/shandian/giga/get/DownloadMission.java
+++ b/app/src/main/java/us/shandian/giga/get/DownloadMission.java
@@ -67,8 +67,8 @@ public class DownloadMission implements Serializable {
public long done;
public int threadCount = 3;
public int finishCount;
- private List threadPositions = new ArrayList();
- public final Map blockState = new HashMap();
+ private final List threadPositions = new ArrayList<>();
+ public final Map blockState = new HashMap<>();
public boolean running;
public boolean finished;
public boolean fallback;
@@ -77,7 +77,7 @@ public class DownloadMission implements Serializable {
public transient boolean recovered;
- private transient ArrayList> mListeners = new ArrayList>();
+ private transient ArrayList> mListeners = new ArrayList<>();
private transient boolean mWritingToFile;
private static final int NO_IDENTIFIER = -1;
@@ -232,7 +232,7 @@ public class DownloadMission implements Serializable {
public synchronized void addListener(MissionListener listener) {
Handler handler = new Handler(Looper.getMainLooper());
MissionListener.handlerStore.put(listener, handler);
- mListeners.add(new WeakReference(listener));
+ mListeners.add(new WeakReference<>(listener));
}
public synchronized void removeListener(MissionListener listener) {
diff --git a/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java b/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java
index b53f8aea9..6ad8626c3 100644
--- a/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java
+++ b/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java
@@ -92,7 +92,7 @@ public class DownloadRunnable implements Runnable {
// A server may be ignoring the range request
if (conn.getResponseCode() != 206) {
mMission.errCode = DownloadMission.ERROR_SERVER_UNSUPPORTED;
- notifyError(DownloadMission.ERROR_SERVER_UNSUPPORTED);
+ notifyError();
if (DEBUG) {
Log.e(TAG, mId + ":Unsupported " + conn.getResponseCode());
@@ -161,9 +161,9 @@ public class DownloadRunnable implements Runnable {
}
}
- private void notifyError(final int err) {
+ private void notifyError() {
synchronized (mMission) {
- mMission.notifyError(err);
+ mMission.notifyError(DownloadMission.ERROR_SERVER_UNSUPPORTED);
mMission.pause();
}
}
diff --git a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java
index 59f5e2225..ff410a79a 100755
--- a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java
+++ b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java
@@ -56,7 +56,7 @@ public class DownloadManagerService extends Service {
private DownloadDataSource mDataSource;
- private MissionListener missionListener = new MissionListener();
+ private final MissionListener missionListener = new MissionListener();
private void notifyMediaScanner(DownloadMission mission) {
diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
index 8127c3467..d5555c2be 100644
--- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
+++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
@@ -306,12 +306,12 @@ public class MissionAdapter extends RecyclerView.Adapter {
ProgressDialog prog;
- WeakReference weakReference;
+ final WeakReference weakReference;
ChecksumTask(@NonNull Activity activity) {
weakReference = new WeakReference<>(activity);
diff --git a/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java b/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java
index 6a0e35cff..955ce4c65 100644
--- a/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java
+++ b/app/src/main/java/us/shandian/giga/ui/common/ProgressDrawable.java
@@ -12,7 +12,8 @@ import android.support.v4.content.ContextCompat;
public class ProgressDrawable extends Drawable {
private float mProgress;
- private int mBackgroundColor, mForegroundColor;
+ private final int mBackgroundColor;
+ private final int mForegroundColor;
public ProgressDrawable(Context context, @ColorRes int background, @ColorRes int foreground) {
this(ContextCompat.getColor(context, background), ContextCompat.getColor(context, foreground));
diff --git a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
index 14439f6c8..5241415b2 100644
--- a/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
+++ b/app/src/main/java/us/shandian/giga/ui/fragment/MissionsFragment.java
@@ -16,6 +16,8 @@ import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@@ -44,7 +46,7 @@ public abstract class MissionsFragment extends Fragment {
private DeleteDownloadManager mDeleteDownloadManager;
private Disposable mDeleteDisposable;
- private ServiceConnection mConnection = new ServiceConnection() {
+ private final ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
@@ -144,17 +146,21 @@ public abstract class MissionsFragment extends Fragment {
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
- return super.onOptionsItemSelected(item);
+ public void onPrepareOptionsMenu(Menu menu) {
+ mSwitch = menu.findItem(R.id.switch_mode);
+ super.onPrepareOptionsMenu(menu);
+ }
- /*switch (item.getItemId()) {
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
case R.id.switch_mode:
mLinear = !mLinear;
updateList();
return true;
default:
return super.onOptionsItemSelected(item);
- }*/
+ }
}
public void notifyChange() {
diff --git a/app/src/main/java/us/shandian/giga/util/Utility.java b/app/src/main/java/us/shandian/giga/util/Utility.java
index de9a16a1b..163ac2b14 100644
--- a/app/src/main/java/us/shandian/giga/util/Utility.java
+++ b/app/src/main/java/us/shandian/giga/util/Utility.java
@@ -11,9 +11,7 @@ import android.widget.Toast;
import org.schabi.newpipe.R;
-import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
-import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -198,7 +196,7 @@ public class Utility {
while ((len = i.read(buf)) != -1) {
md.update(buf, 0, len);
}
- } catch (IOException e) {
+ } catch (IOException ignored) {
}
diff --git a/app/src/main/res/drawable/ic_blank_page_black_24dp.xml b/app/src/main/res/drawable/ic_blank_page_black_24dp.xml
new file mode 100644
index 000000000..e8c60a1a2
--- /dev/null
+++ b/app/src/main/res/drawable/ic_blank_page_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_blank_page_white_24dp.xml b/app/src/main/res/drawable/ic_blank_page_white_24dp.xml
new file mode 100644
index 000000000..86a68484f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_blank_page_white_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_settings_backup_restore_black_24dp.xml b/app/src/main/res/drawable/ic_settings_backup_restore_black_24dp.xml
new file mode 100644
index 000000000..aa424c0d4
--- /dev/null
+++ b/app/src/main/res/drawable/ic_settings_backup_restore_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_settings_backup_restore_white_24dp.xml b/app/src/main/res/drawable/ic_settings_backup_restore_white_24dp.xml
new file mode 100644
index 000000000..03a26f550
--- /dev/null
+++ b/app/src/main/res/drawable/ic_settings_backup_restore_white_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout-v21/drawer_header.xml b/app/src/main/res/layout-v21/drawer_header.xml
index 918bbaf43..4474ee4ed 100644
--- a/app/src/main/res/layout-v21/drawer_header.xml
+++ b/app/src/main/res/layout-v21/drawer_header.xml
@@ -16,7 +16,8 @@
android:layout_height="match_parent"
android:background="?attr/colorPrimary"
android:scaleType="centerCrop"
- android:src="@drawable/background_header" />
+ android:src="@drawable/background_header"
+ android:contentDescription="TODO" />
+ android:src="@drawable/np_logo_nude_shadow"
+ android:contentDescription="TODO" />
+ android:src="@drawable/ic_arrow_down_white"
+ android:contentDescription="TODO" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_error.xml b/app/src/main/res/layout/activity_error.xml
index 7752dc7cb..c47077c73 100644
--- a/app/src/main/res/layout/activity_error.xml
+++ b/app/src/main/res/layout/activity_error.xml
@@ -114,7 +114,8 @@
+ android:layout_height="wrap_content"
+ android:inputType="" />
Importovat databázi
Exportovat databázi
Přepíše vaši dosavadní historii a odběry
- Exportuje historii, odběry a playlisty.
+ Exportuje historii, odběry a playlisty
Externí přehrávače nepodporují tyto druhy odkazů
Neplatná URL
Nenalezeny žádné video streamy
@@ -397,13 +397,13 @@ otevření ve vyskakovacím okně
Použít rychlé nepřesné hledání
Nepřesné hledání umožní přehrávači posouvat se rychleji, ale se sníženou přesností
Načítat náhledy
- Zakažte, chcete-li zabránit načítání všech náhledů a tím šetřit data a využití paměti. Změnou tohoto nastavení dojde k vyčištění mezipaměti obrázků.
+ Zakažte, chcete-li zabránit načítání všech náhledů a tím šetřit data a využití paměti. Změnou tohoto nastavení dojde k vyčištění mezipaměti obrázků
Mezipaměť obrázků vymazána
Vymazat metadata v mezipaměti
Odebrat všechna data uložená v mezipaměti
Mezipaměť metadat vymazána
Automatická fronta dalšího streamu
- Automaticky připojí související stream při přehrávání posledního streamu v neopakující se frontě.
+ Automaticky připojí související stream při přehrávání posledního streamu v neopakující se frontě
Soubor
Neplatný adresář
@@ -458,16 +458,16 @@ otevření ve vyskakovacím okně
Výchozí chování při otevírání obsahu — %s
Poznámky
- Upravuje velikost textu poznámek a styly pozadí. Změny se projeví po restartu aplikace.
+ Upravuje velikost textu poznámek a styly pozadí. Změny se projeví po restartu aplikace
K přehrání tohoto souboru chybí vhodná aplikace
Vymazat historii sledování
- Vymaže historii přehrávaných streamů.
+ Vymaže historii přehrávaných streamů
Vymazat celkovou historii sledování.
Historie sledování smazána.
Vymazat historii vyhledávání
- Vymaže historii vyhledávaných klíčových slov.
+ Vymaže historii vyhledávaných klíčových slov
Vymazat celkovou historii vyhledávání.
Historie vyhledávání smazána.
Jedna položka smazána.
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 616a2abcc..37f892b4b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -460,11 +460,12 @@
Verlauf leeren
Löscht den Verlauf der abgespielten Streams
- Löscht den ganzen Verlauf
+
+ Löscht den ganzen Verlauf.
Verlauf gelöscht.
Suchverlauf löschen
Lösche Verlauf der Suchschlüsselwörter
- Lösche gesamten Suchverlauf
+ Lösche gesamten Suchverlauf.
Suchverlauf gelöscht.
1 Element gelöscht.
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index 7fdb02a59..975ad4025 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -2,7 +2,7 @@
%1$s προβολές
Ανέβηκε στις %1$s
- Δεν βρέθηκε πρόγραμμα αναπαραγωγής. Εγκατάσταση του VLC;
+ Δεν βρέθηκε πρόγραμμα αναπαραγωγής. Θα θέλατε να εγκαταστήσετε το VLC;
Εγκατάσταση
Ακύρωση
Άνοιγμα στον browser
@@ -14,47 +14,49 @@
Κοινοποίηση με
Επιλέξτε browser
περιστροφή
- Χρήση εξωτερικού video player
- Χρήση εξωτερικού audio player
+ Χρήση εξωτερικής εφαρμογής αναπαραγωγής βίντεο
+ Χρήση εξωτερικής συσκευής αναπαραγωγής ήχου
- Διαδρομή λήψης video
- Διαδρομή για αποθήκευση των video.
- Εισάγετε διαδρομή για λήψη των video
+ Διαδρομή λήψης βίντεο
+ Διαδρομή για αποθήκευση των βίντεο
+ Εισάγετε διαδρομή για λήψη των βίντεο
Διαδρομή λήψης αρχείων ήχου
Διαδρομή για αποθήκευση αρχείων ήχου
- Εισάγετε διαδρομή για λήψη αρχείων ήχου.
+ Εισάγετε διαδρομή για λήψη αρχείων ήχου
Προεπιλεγμένη ανάλυση
Αναπαραγωγή με το Kodi
- Η εφαρμογή Kore δεν βρέθηκε. Εγκατάσταση;
+ Η εφαρμογή Kore δεν βρέθηκε. Εγκατάσταση της;
Εμφάνιση της επιλογής \"Αναπαραγωγή με το Kodi\"
- Προβολή μιας επιλογής για αναπαραγωγή με το Kodi media center.
+ Προβολή μιας επιλογής για αναπαραγωγή με το Kodi media center
Ήχος
Προεπιλεγμένη μορφή ήχου
+ WebM — δωρεάν μορφή
+ Μ4Α — καλύτερη ποιότητα
Θέμα
Σκοτεινό
Φωτεινό
Λήψη
- Επόμενο video
- Προβολή επόμενου και σχετικών video
+ Επόμενο βίντεο
+ Εμφάνιση \"επόμενου\" και \"σχετικών\" βίντεο
Δεν υποστηρίζεται η διεύθυνση URL
- Προτιμώμενη γλώσσα περιεχομένου
- Video & Ήχος
+ Προεπιλεγμένη γλώσσα περιεχομένου
+ Βίντεο & Ήχος
Εμφάνιση
Άλλα
Αναπαραγωγή στο υπόβαθρο
Αναπαραγωγή
Σφάλμα δικτύου
- Εικόνα προεπισκόπησης video
- Εικόνα προεπισκόπησης video
- Εικόνα προφίλ του uploader
+ Μικρογραφία προεπισκόπισης βίντεο
+ Μικρογραφία προεπισκόπησης βίντεο
+ Μικρογραφία εικόνας προφίλ του χρήστη
Like
Dislike
Χρήση του Tor
- Αναγκάζει την κίνηση λήψης μέσω Tor για αυξημένη ανωνυμία (η αναπαραγωγή δεν υποστηρίζεται ακόμη)
+ (Πειραματικό) Αναγκάζει την κίνηση λήψης μέσω Tor για αυξημένη προστασία προσωπικών δεδομένων (η αναπαραγωγή δεν υποστηρίζεται ακόμη).
Δεν μπόρεσε να δημιουργηθεί ο φάκελος \'%1$s\'
Δημιουργήθηκε ο φάκελος \'%1$s\'
@@ -99,4 +101,367 @@
Ιστορικό
Εμφάνιση πληροφοριών
-
+ Πατήστε στην αναζήτηση για να ξεκινήσετε
+ Δε βρέθηκε πρόγραμμα αναπαραγωγής ροής δεδομένων (μπορείτε να εγκαταστήσετε το VLC για να κάνετε αναπαραγωγή)
+ Κατέβασμα του αρχείου ροής.
+ Κάποιες αναλύσεις ΔΕΝ θα περιλαμβάνουν ήχο όταν επιλεχθεί αυτή η επιλογή
+ NewPipe σε λειτουργία αναδυόμενου παραθύρου
+ Έγινε διαγραφή από το κανάλι
+ Αδύνατη η αλλαγή της εγγραφής
+ Αδύνατη η ενημέρωση της εγγραφής
+ Κύριο
+ Εγγραφές
+ Σελιδοδείκτες
+
+ Νέα
+
+ Στο παρασκήνιο
+ Αναδυόμενο παράθυρο
+ Προσθήκη σε
+
+ Αυτόματη αναπαραγωγή
+ Αναπαραγωγή του βίντεο όταν το NewPipe καλείται από άλλη εφαρμογή
+ Προεπιλεγμένη ανάλυση αναδυόμενου παραθύρου
+ Εμφάνιση υψηλότερων αναλύσεων
+ Προεπιλεγμένη μορφή βίντεο
+ Ενθύμιση του μεγέθους και της θέσης του αναδυόμενου παραθύρου
+ Ενθύμιση του τελευταίου μεγέθους και θέσης του παραθύρου
+ Χρήση γρήγορης μη-ακριβούς αναζήτησης
+ Η μη-ακριβής αναζήτηση επιτρέπει στην εφαρμογή να αναζητεί θέσεις στο βίντεο γρηγορότερα με μειωμένη ακρίβεια
+ Φόρτωση thumbnails
+ Απενεργοποιήστε για να σταματήσετε τη φόρτωση των μικρογραφιών και να εξοικονομήσετε δεδομένα και χρήση μνήμης. Αλλάζοντας αυτή τη ρύθμιση θα εκκαθαρίσει τα προσωρινά αποθηκευμένα δεδομένα στη μνήμη και τον αποθηκευτικό χώρο
+ Εκκαθαρίστηκε η προσωρινή μνήμη εικονών
+ Εκκαθάριση προσωρινά αποθηκευμένων μεταδεδομένων
+ Αφαίρεση όλων των προσωρινά αποθηκευμένων δεδομένων ιστοσελίδων
+ Η προσωρινή μνήμη μεταδεδομένων εκκαθαρίστηκε
+ Αυτόματη πρόσθεση της επόμενης ροής στην ουρά
+ Αυτόματη πρόσθεση μιας σχετικής ροής όταν αναπαράγεται η προηγούμενη ροή σε μια μη-επαναλαμβανόμενη ουρά
+ Έλεγχος αναπαραγωγής με χειρονομίες
+ Χρήση χειρονομιών για τον έλεγχο της φωτεινότητας και της έντασης ήχου της εφαρμογής
+ Εμφάνιση υποδείξεων ενώ κάνετε αναζήτηση
+ Αποθήκευση αναζητήσεων στη συσκευή
+ Ιστορικό & Προσωρινή Αποθήκευση
+ Κρατήστε ιστορικό των βίντεο που έχετε δει
+ Συνέχεια όταν η εφαρμογή έρθει σε πρώτο πλάνο
+ Συνέχιση της αναπαραγωγής έπειτα από διακοπές (π.χ.: κλήσεις)
+ Εμφάνιση της βοήθειας \"πιέστε παρατεταμένα για πρόσθεση\"
+ Εμφάνιση της βοήθειας όταν έχει πατηθεί το κουμπί Παρασκηνίου ή Αναδυόμενου παραθύρου στη σελίδα λεπτομερειών του βίντεο
+ Προεπιλεγμένη χώρα περιεχομένου
+ Υπηρεσία
+ Συσκευή Αναπαραγωγής
+ Συμπεριφορά
+ Ιστορικό & Προσωρινή Αποθήκευση
+ Αναδυόμενο παράθυρο
+ Απασφαλμάτωση
+ Αναπαραγωγή σε αναδυόμενο παράθυρο
+ Προστέθηκε στη λίστα αναπαραγωγής παρασκηνίου
+ Προστέθηκε στη λίστα αναπαραγωγής αναδυόμενου παραθύρου
+ Περιεχόμενο
+ Εμφάνιση περιεχομένου περιορισμένης πρόσβασης
+ Βίντεο περιορισμένης πρόσβασης. Για να επιτρέπετε περιερχόμενο τέτοιου είδους, ενεργοποιήστε το στις Ρυθμίσεις.
+ Ζωντανά
+ Αναφορά σφαλμάτων
+ Κανάλια
+ Λίστα αναπαραγωγής
+ Λίστες αναπαραγωγής
+ Κομμάτια
+ Χρήστες
+ Απενεργοποιημένο
+ Ανανέωση
+ Εκκαθάριση
+ Αλλαγή μεγέθους
+ Βέλτιστη ανάλυση
+ Αναίρεση
+ Αναπαραγωγή όλων
+ Πάντα
+ Μόνο μία φορά
+ Αρχείο
+
+ Ειδοποίηση NewPipe
+ Ειδοποιήσεις για την αναπαραγωγή Παρασκηνίου και Αναδυόμενου Παραθύρου
+
+ [Άγνωστο]
+
+ Αλλαγή προσανατολισμού
+ Αλλαγή σε Παρασκήνιο
+ Αλλαγή σε Αναδυόμενο Παράθυρο
+ Αλλαγή σε Κύριο
+
+ Εισαγωγή βάσης δεδομένων
+ Εξαγωγή βάσης δεδομένων
+ Θα παρακάμψει το τρέχον ιστορικό και εγγραφές σας
+ Εξαγωγή ιστορικού, εγγραφών και λιστών αναπαραγωγής
+ Εκκαθάριση ιστορικού προβολής
+ Διαγράφει το ιστορικό των ροών που έχουν αναπαραχθεί
+ Διαγραφή ολόκληρου του ιστορικού προβολής.
+ Το στορικό προβολής διαγράφηκε.
+ Διαγραφή ιστορικού αναζητήσεων
+ Διαγράφει το ιστορικό αναζητήσεών σας
+ Διαγραφή ολόκληρου του ιστορικού αναζητήσεων.
+ Το ιστορικό αναζητήσεων διαγράφηκε.
+ Δεν ήταν δυνατή η φόρτωση όλων των εικονιδίων
+ Δεν ήταν δυνατή η αποκρυπτογράφηση της υπογραφής του URL του βίντεο
+ Δεν ήταν δυνατή η ανάλυση του ιστοτόπου
+ Δεν ήταν δυνατή η ανάλυση ολόκληρου του ιστοτόπου
+ Το περιεχόμενο δεν είναι διαθέσιμο
+ "Έχει αποκλειστεί από την GEMA"
+ Δεν ήταν δυνατή η ρύθμιση του μενού λήψεων
+ Αυτή είναι μια Ζωντανή Ροή, που δεν υποστηρίζεται ακόμα.
+ Δεν ήταν δυνατή η λήψη καμίας ροής
+ Δεν ήταν δυνατή η φόρτωση της εικόνας
+ Η εφαρμογή κράσαρε
+ Δεν ήταν δυνατή η αναπαραγωγή αυτής της ροής
+ Συνέβη ένα μη ανακτήσιμο σφάλμα στη συσκευή αναπαραγωγής
+ Ανάκτηση από σφάλμα της συσκευής αναπαραγωγής
+ Οι εξωτερικές συσκευές αναπαραγωγής δεν υποστηρίζουν αυτού του είδους συνδέσμους
+ Μη έγκυρο URL
+ Δε βρέθηκαν ροές βίντεο
+ Δε βρέθηκαν ροές ήχου
+ Μη έγκυρη τοποθεσία
+ Μη έγκυρο αρχείο ή πηγή περιεχομένου
+ Το αρχείο δεν υπάρχει ή δεν έχουμε επαρκή εξουσιοδότηση για να διαβάσουμε ή να γράψουμε σε αυτό
+ Το όνομα αρχείου δεν μπορεί να είναι κενό
+ Προέκυψε ένα σφάλμα: %1$s
+ Δεν υπάρχουν διαθέσιμες ροές για λήψη
+
+ Λυπούμαστε, αυτό δεν έπρεπε να έχει συμβεί.
+ Αναφορά σφάλματος με ηλεκτρονικό ταχυδρομίο
+ Λυπούμαστε, συνέβησαν κάποια σφάλματα.
+ What:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού:
+ Αναφορά χρήστη
+ Κανένα αποτέλεσμα
+ Τρεις κι ο κούκος
+ Σύρετε για ταξινόμηση
+
+ Προσπάθεια εκ νέου
+ Δεν δώθηκε άδεια εγγραφής στην εσωτερική μνήμη
+ Χρήση παλαιάς συσκευής αναπαραγωγής
+ Παλαιά συσκευή αναπαραγωγής Mediaframework
+
+ Κ
+ Μ
+ Κανένας εγγεγραμένος χρήστης
+
+ - %s εγγεγραμένος χρήστης
+ - %s εγγεγραμένοι χρήστες
+
+
+ Καμία προβολή
+
+ - %s προβολή
+ - %s προβολές
+
+
+ Κανένα βίντεο
+
+ - %s βίντεο
+ - %s βίντεο
+
+
+ Εκκίνηση
+ Αναπαραγωγή
+ Δημιουργία
+ Διαγραφή ενός
+ Διαγραφή όλων
+ Checksum
+ Αγνόηση
+ Μετονομασία
+
+ Νέα αποστολη
+ ΟΚ
+
+ Όνομα αρχείου
+ Νήματα
+ Ο εξυπηρετητής δεν υποστηρίζεται
+ Λάθος μορφή URL ή δεν υπάρχει σύνδεση στο διαδίκτυο
+ Λήψη NewPipe
+ Παρακαλώ περιμένετε…
+ Αντιγράφηκε στο πρόχειρο
+ Παρακαλώ επιλέξτε έναν διαθέσιμο φάκελο λήψεων
+ Αυτή η άδεια είναι απαραίτητη για
+\nτο άνοιγμα αναδυόμενων παραθύρων
+ 1 αντικείμενο διαγράφηκε.
+
+ reCAPTCHA
+ Πρόκληση reCAPTCHA
+ Ζητήθηκε πρόκληση reCAPTCHA
+
+ Επιτρεπτοί χαρακτήρες σε ονόματα αρχείων
+ Οι μη έγκυροι χαρακτήρες αντικαθίστανται με αυτήν την τιμή
+ Αντικαταστάτης χαρακτήρας
+
+ Οι περισσότεροι ειδικοί χαρακτήρες
+
+ Δεν υπάρχει εφαρμογή εγκατεστημένη για την αναπαραγωγή αυτού του αρχείου
+
+ Σχετικά με το NewPipe
+ Περί
+ Άδειες Τρίτων
+ © %1$s από %2$s υπό %3$s
+ Δεν ήταν δυνατή η φόρτωση της άδειας
+ Περί
+ Συνεισφέροντες
+ Ελέυθερη και ελαφριά εφαρμογή αναπαραγωγής ροών στο Android.
+ Συνεισφέρετε
+ Αν έχετε ιδέες για μετάφραση, αλλαγή σχεδιασμού, εκκαθάριση ή ριζικές αλλαγές κώδικα της εφαρμογής—η βοήθεια σας είναι πάντα ευπρόσδεκτη. Όσο περισσότερη έχουμε, τόσο καλύτεροι γινόμαστε!
+ Δείτε το στο GitHub
+ Κάντε μια δωρεά
+ Το NewPipe αναπτύσσεται από εθελοντές που δαπανούν χρόνο για να σας προσφέρουν τη βέλτιστη δυνατή εμπειρία της εφαρμογής. Μπορείτε να συνεισφέρετε στους προγραμματιστές του NewPipe να το κάνουν ακόμα καλύτερο, προσφέροντάς τους έναν καφέ.
+ Προσφέρτε
+ Ιστότοπος
+ Επισκευτείτε τον ιστότοπο του NewPipe για περισσότερες πληροφορίες και νέα.
+ Η πολιτική ιδιωτικού απόρρητου του NewPipe
+ Το NewPipe παίρνει πολύ σοβαρά το ιδιωτικό σας απόρρητο. Έτσι, η εφαρμογή αυτή δεν συλλέγει δεδομένα από εσάς χωρίς τη συγκατάθεσή σας.
+\nΗ πολιτική ιδιωτικού απόρρητου του NewPipe εξηγεί λεπτομερώς ποια δεδομένα αποστέλλονται και αποθηκεύονται όταν επιλέγετε να στείλετε μια αναφορά σφαλμάτων.
+ Διαβάστε την πολιτική ιδιωτικού απόρρητου
+ Η άδεια του NewPipe
+ Το NewPipe είναι copylelft ελεύθερο λογισμικό: Μπορείτε να το χρησιμοποιήσετε, να το μελετήσετε, να το μοιραστείτε και να το βελτιώσετε κατά βούληση. Ειδικότερα, μπορείτε να το αναδιανείμετε ή/και να το τροποποιήσετε υπό την άδεια GNU General Public Licence όπως αυτή εκδόθηκε από το Free Software Foundation, είτε υπό την έκδοση 3 της Άδειας είτε (προεραιτικά) υπό οποιαδήποτε μεταγενέστερη άδεια.
+ Διαβάστε την άδεια
+
+
+ Αναζητημένα
+ Έχει γίνει προβολή
+ Το ιστορικό έχει απενεργοποιηθεί
+ Το ιστορικό είναι κενό
+ Το ιστορικό εκκαθαρίστηκε
+ Το αντικείμενο διαγράφηκε
+ Θέλετε να σβήσετε αυτό το αντικείμενο από το ιστορικό αναζήτησης;
+ Θέλετε να σβήσετε αυτό το αντικείμενο από το ιστορικό προβολής;
+ Είστε σίγουροι ότι θέλετε να σβήσετε όλα τα αντικείμενα από το ιστορικό;
+ Τελευταία αναπαραγωγή
+ Αναπαράχθηκε περισσότερο
+
+ Περιεχόμενο της κεντρικής σελίδας
+ Κενή σελίδα
+ Σελίδα περιπτέρου
+ Σελίδα εγγραφών
+ Σελίδα καναλιών
+ Επιλέξτε ένα κανάλι
+ Δεν έχει γίνει εγγραφή σε κάποιο κανάλι ακόμα
+ Επιλέξτε ένα περίπτερο
+ Η εξαγωγή ολοκληρώθηκε
+ Η εισαγωγή ολοκληρώθηκε
+ Μη έγκυρο αρχείο ZIP
+ Προσοχή: Δεν ήταν δυνατή η εισαγωγή όλων των αρχείων.
+ Αυτό θα παρακάμψει τις τρέχουσες ρυθμίσεις σας.
+ Θέλετε επίσης να εισάγετε ρυθμίσεις;
+
+ Περίπτερο
+ Συσκευή αναπαραγωγής Παρασκηνίου
+ Συσκευή αναπαραγωγής Αναδυόμενου παραθύρου
+ Αφαίρεση
+ Λεπτομέρειες
+ Ρυθμίσεις ήχου
+ Πιέστε παρατεταμένα για να προστεθεί στην ουρά
+ Προσθήκη στην ουρά Παρασκηνίου
+ Προσθήκη στην ουρά Αναδυόμενου παραθύρου
+ Εκκίνηση Αναπαραγωγής εδώ
+ Εκκίνηση εδώ στο Παρασκήνιο
+ Εκκίνηση εδώ στο Αναδυόμενο Παράθυρο
+
+ Άνοιγμα Συρταριού
+ Κλείσιμο Συρταριού
+ Κάτι θα παιχτεί εδω σύντομα ;D
+
+
+ Τοπ 50
+ Καινούρια & δημοφιλή
+ Προτιμώμενη ενέργεια ανοίγματος
+ Προεπιλεγμένη ενέργεια για το άνοιγμα περιεχομένου — %s
+
+ Συσκευή αναπαραγωγής βίντεο
+ Αναπαραγωγή Παρασκηνίου
+ Αναπαραγωγή σε Αναδυόμενο Παράθυρο
+ Πάντα ερώτηση
+
+ Γίνεται λήψη πληροφοριών…
+ Γίνεται φόρτωση του ζητούμενου περιεχομένου
+
+ Δημιουργία νέας Λίστας Αναπαραγωγής
+ Διαγραφή Λίστας
+ Μετονομασία Λίστας
+ Όνομα
+ Προσθήκη στη Λίστα
+ Ορισμός ως μικρογραφία λίστας αναπαραγωγής
+
+ Προσθήκη Σελιδοδείκτη στη Λίστα
+ Διαγραφή Σελιδοδείκτη
+
+ Επιθυμείτε να διαγράψετε αυτή τη λίστα αναπαραγωγής;
+ Η λίστα αναπαραγωγής δημιουργήθηκε
+ Προστέθηκε στη λίστα
+ Η μικρογραφία της λίστας αναπαραγωγής άλλαξε
+ Δεν ήταν δυνατή η διαγραφή της λίστας
+
+ Δεν υπάρχουν υπότιτλοι
+
+ Προσαρμογή
+ Γέμισμα
+ Μεγέθυνση
+
+ Αυτόματοι
+
+ Υπότιτλοι
+ Τροποποίηση του μεγέθους και του φόντου των υπότιτλων. Απαιτεί επανεκκίνηση της εφαρμογής
+
+ Ενεργοποίηση του LeakCanary
+ Η παρακολούθηση των διαρροών μνήμης μπορεί να κάνει την εφαρμογή να μην αποκρίνεται κατά το heap dumping
+
+
+
+ Εισαγωγή/Εξαγωγή
+ Εισαγωγή
+ Εισαγωγή από
+ Εξαγωγή σε
+
+ Γίνεται εισαγωγή…
+ Γίνεται εξαγωγή…
+
+ Εισαγωγή αρχείου
+ Προηγούμενη εξαγωγή
+
+ Δεν ήταν δυνατή η εισαγωγή των εγγραφών
+ Δεν ήταν δυνατή η εισαγωγή των εγγραφών
+
+ Κάντε εισαγωγή των εγγραφών σας στο YouTube κατεβάζοντας το εξής αρχείο:
+\n
+\n1. Πλοηγηθήτε στο: %1$s
+\n2. Εισέλθετε στο λογαριασμό σας, όταν σας ζητηθεί
+\n3. Η λήψη του αρχείου των εγγραφών σας θα ξεκινήσει
+ Για να εισάγετε τον λογαριασμό SoundCloud σας, πληκτρολογήστε τον σύνδεσμο ή το ID σας:
+\n
+\n1. Ενεργοποιήστε τη λειτουργία \"Desktop mode\" στον φυλλομετρητή σας (καθώς η ιστοσελίδα δεν είναι διαθέσιμη για κινητά)
+\n2. Πλοηθηθείτε στο %1$s
+\n3. Εισέλθετε στο λογαριασμό σας, όταν σας ζητηθεί
+\n4. Αντιγράψτε τον σύνδεσμο του λογαριαμού στον οποίο ανακατευθυνθήκατε.
+ Αυτή η διαδικασία μπορεί να χρησιμοποιήσει μεγάλο όγκο δεδομένων.
+\n
+\nΕπιθυμείτε να συνεχίσετε;
+
+ Έλεγχος ταχύτητας αναπαραγωγής
+ Τέμπο
+ Τόνος
+ Ενέργεια κατά τη μετάβαση σε άλλη εφαρμογή — %s
+ Σελίδαρ Ροής
+ Δημοφιλή
+ Αναφορά σφαλμάτων εκτός κύκλου ζωής
+ Το όνομα χρήστη σας, soundcloud.com/όνομαχρήστη
+
+ Αποσύνδεση (μπορεί να προκαλέσει παραμόρφωση)
+ Επιτάχυνση αναπαραγωγής κατά τη διάρκεια σιωπής
+ Βήμα
+ Μηδενισμός
+
+ Προς συμμόρφωση με τον Ευρωπαϊκό Γενικό Κανονισμό για την Προστασία Δεδομένων (GDPR), σας επιστούμε την προσοχή στην πολιτική προστασίας προσωπικών δεδομένων του NewPipe. Παραλούμε, διαβάστε την προσεκτικά.
+\nΘα πρέπει να την αποδεχτέιτε προκειμένου να μας αποστείλετε την αναφορά σφάλματος.
+ Αποδοχή
+ Απόρριψη
+
+ Χωρίς όριο
+ Περιορισμός της ανάλυσης όταν γίνεται χρήση δεδομένων
+ Ελαχιστοποίηση κατά την εναλλαγή εφαρμογών
+ Καμία
+ Ελαχιστοποίηση στο παρασκήνιο
+ Ελαχιστοποίηση σε αναδυόμενο παράθυρο
+
+
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 585800cba..78faeed8f 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -36,8 +36,8 @@
Ludi
Eraro
Reteraro
- Enhavo ne estas disponebla.
- Blokita de GEMA.
+ Enhavo ne estas disponebla
+ Blokita de GEMA
Ŝatoj
Malŝatoj
@@ -46,8 +46,8 @@
La aplikaĵo Kore ne estas trovita. Ĉu instali ĝin?
Montri la sekvan videon kaj similajn videojn
Ĉiuj miniaturoj ne ŝargeblas
- La subskribo de la ligilo de la video ne malĉifreblas.
- La retejo ne analizeblas.
+ La subskribo de la ligilo de la video ne malĉifreblas
+ La retejo ne analizeblas
Miniaturo de la antaŭrigardo de la video
Miniaturo de la antaŭrigardo de la video
Miniaturo de la bildo de la alŝutinto
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index e51bb358e..02a9924a5 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -466,11 +466,11 @@ abrir en modo popup
Borrar historial de reproducciones
Elimina el historial de las transmisiones reproducidas
- Elimina todo el historial de reproducciones
+ Elimina todo el historial de reproducciones.
Historial de reproducciones eliminado.
Borrar historial de búsqueda
Elimina el historial de palabras clave de búsqueda
- Elimina todo el historial de búsqueda
+ Elimina todo el historial de búsqueda.
Historial de búsquedas eliminado.
1 elemento eliminado.
diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml
index 2d9d58fe2..aa3afa7be 100644
--- a/app/src/main/res/values-et/strings.xml
+++ b/app/src/main/res/values-et/strings.xml
@@ -9,7 +9,7 @@
Ava veebilehitsejas
Ava hüpikaknas
Jaga
- Laadi alla
+ Allalaadimine
Laadi voog alla.
Otsi
Seaded
@@ -93,7 +93,7 @@
Sisu vaikimisi riik
Teenus
Sisu vaikimisi keel
- Mängija
+ Pleier
Käitumine
Heli ja pilt
Ajalugu ja vahemälu
@@ -144,11 +144,11 @@
Ekspordi ajalugu, tellimused ja pleilistid
Puhasta vaatamiste ajalugu
Kustutab vaadatud voogude ajaloo
- Kustuta kogu vaatamiste ajalugu
+ Kustuta kogu vaatamiste ajalugu.
Vaatamiste ajalugu kustutati.
Kustuta otsinguajalugu
Kustutab otsisõnade ajaloo
- Kustuta kogu otsinguajalugu
+ Kustuta kogu otsinguajalugu.
Otsinguajalugu kustutati.
Viga
Võrgu viga
@@ -208,7 +208,7 @@
Audio
Proovi uuesti
Pääsuõigused salvestile puuduvad
- Kasuta vana mängijat
+ Kasuta vana pleierit
Vana sisseehitatud mediaframework pleier
K
@@ -344,7 +344,7 @@
Siia ilmub varsti midagi ;D
- Eelistatud \'ava\' toiming
+ Lingi avamine
Vaikimisi tegevus sisu avamisel — %s
Videopleier
@@ -416,4 +416,46 @@
Piiranguta
Piira lahutust mobiilse andmeside kasutamisel
-
+ Peamenüü
+ Kanalid
+ Pleilistid
+ Lood
+ Kasutajad
+ Lülitu peamisele
+
+ reCAPTCHA nõue
+ Nõutav on reCAPTCHA
+
+ © %1$s %2$s %3$s alla
+ Vaba kergekaaluline Androidi voogesitus.
+ Kui sul on ideid kujunduse muutmisest, koodi puhastamisest või suurtest koodi muudatustest - abi on alati teretulnud. Mida rohkem tehtud, seda paremaks läheb!
+ NewPipe arendajad on vabatahtlikud, kes kulutavad oma vaba aega, toomaks sulle parimat kogemust. On aeg anda tagasi aidates arendajaid ja muuta NewPipe veel paremaks, nautides ise tassi kohvi.
+ Anneta
+ NewPipe võtab privaatsust väga tõsiselt. Seetõttu ei kogu rakendus ilma nõusolekuta mingeid andmeid.
+\nNewPipe privaatsuspoliitika selgitab üksikasjalikult, milliseid andmeid saadetakse ja kogutakse veateate saatmisel.
+ NewPipe vaba avatud koodiga tarkvara. Seada võib kasutada, uurida, jagada ja parandada. Täpsemalt - seda võib levitada ja/või muuta vastavalt Vaba Tarkvara Sihtasutuse avaldatud GNU Üldise Avaliku Litsentsi v.3 (või hilisem) tingimustele.
+ Luba LeakCanary
+ Teavita elutsüklist väljas vigadest
+ Impordi SoundCloudi profiil trükkides URL või oma ID:
+\n
+\n1. Luba \"töölaua režiim\" veebilehitsejas (lmobiilsete seadmete jaoks leht pole kättesaadav)
+\n2. Ava URL: %1$s
+\n3. Logi sisse
+\n4. Kopeeri suunatud profiili URL.
+ sinu_ID, soundcloud.com/sinu_id
+
+ Toon
+ Tühista ühendus (võib põhjustada moonutusi)
+ Keri helitu koht edasi
+ Samm
+ Lähtesta
+
+ Selleks, et täita Euroopa Üldist Andmekaitse Määrust (GDPR), juhime tähelepanu NewPipe\'i privaatsuspoliitikale. Palun lugege seda hoolikalt.
+\nMeile veateate saatmiseks tuleb sellega nõustuda.
+ Minimeeri, kui kasutad teisi rakendusi
+ Tegevus lülitusel peamiselt videopleierilt teisele rakendusele — %s
+ Pole
+ Esita taustal
+ Minimeeri hüpikpleierisse
+
+
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 74273e560..9ea87bd6d 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -336,11 +336,12 @@
Esportatu historiala, harpidetzak eta erreprodukzio-zerrendak
Garbitu ikusitakoaren historiala
Jotako jarioen historiala ezabatzen du
- Ezabatu ikusitakoaren historial osoa
+ Ezabatu ikusitakoaren historial osoa.
Ikusitakoaren historiala ezabatuta.
Garbitu bilaketa historiala
Ezabatu bilaketa gakoen historiala
- Ezabatu bilaketen historial osoa
+ Ezabatu bilaketen historial osoa.
+
Bilaketen historiala ezabatuta.
Direktorio baliogabea
Fitxategi edo edukiaren iturri baliogabea
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index c748a7626..ef071c316 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -402,6 +402,7 @@
Télécharger le fichier de flux
Vidéo suivante en file d\'attente
Ajout automatique d\'un morceau suggéré lors de la lecture du dernier morceau dans une file d\'attente non bouclée.
+
Débogage
Remplir
Générés automatiquement
@@ -454,18 +455,18 @@
Aucun flux disponible au téléchargement
Sous-titres
- Modifier la taille du texte et les styles d\'arrière-plan du lecteur. Redémarrage requis pour prendre effet.
+ Modifier la taille du texte et les styles d\'arrière-plan du lecteur. Redémarrage requis pour prendre effet
Ton
Nightcore
Aucune application installée pour lire ce fichier
Effacer l\'historique
- Supprimer l\'historique des flux regardés.
+ Supprimer l\'historique des flux regardés
Supprimer tout l\'historique regardé.
Voir l’historique supprimé.
Supprimer l\'historique des recherches
- Supprimer l\'historique de recherche par mot clef.
+ Supprimer l\'historique de recherche par mot clef
Supprimer tout l\'historique de recherche.
Historique des recherches effacé.
1 élément supprimé.
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index fe4389495..22e90ac25 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -25,11 +25,11 @@
ऑडियो
हलका
काली
- इतिहास
+ इतिहास और कैच
डाउनलोड
अगला वीडियो
वीडियो और ऑडियो
- इतिहास
+ इतिहास और कैच
बैकग्राउंड में चल रहा है
कोई दर्शक नहीं
कोई वीडियो नहीं है
@@ -97,11 +97,11 @@
जब कुछ ढूंड रहे हो तो सुझाव दिखाये
खोज के इतिहास को देखे
खोज के query को फ़ोन की मेमोरी में ही रखे
- जो विडियो देखे है उस पर नजर रखे
+ देखे हुए वीडियो की सूची रखे
जब फोकस मिले तो विडियो resume हो
रूकावट आने पर भी विडियो को जारी रखे (जैसे - फ़ोन कॉल आये)
- आगे ऐसा ही विडियो दिखाए जैसा पहले देखा था
- "\"संलग्न करने के लिए पकड़ें\" देखायें "
+ \'अगला\' और \'पहले समान\' वीडियो दिखाए
+ \"संलग्न करने के लिए पकड़ें रहे\" दिखाए
जब बैकग्राउंड और पॉपअप बटन विडियो के विवरण पन्ने में दबाई जाए तो tip को दिखाए
ये वाला URL इसमें नहीं चलेगा
डिफ़ॉल्ट विषय की भाषा
@@ -153,7 +153,7 @@
कोई भी विडियो नहीं मिल रहा
फोटो को load नहीं कर सकते
APP/UI टूट गया
- इस विडियो को चलाने में असफलता हो रही है
+ इस विडियो को चलाने में असफल हुए
कभी ठीक न होने वाले विडियो प्लेयर की त्रुटी आ रही है
विडियो प्लेयर त्रुटी से ठीक हो रहा है
@@ -181,7 +181,7 @@
यंहा कुछ नहीं है
"डाउनलोड वाली डायरेक्टरी को बना नहीं सकते \'%1$s\'"
- डाउनलोड की डायरेक्टरी बन चुकी है \'%1$s\'
+ डाउनलोड की डायरेक्टरी बना दी गई है \'%1$s\'
विडियो
ऑडियो
@@ -247,7 +247,7 @@
%2$s के द्वारा © %1$s जो %3$s के अधीन आते है
लाइसेंस load नहीं हो रहा
सहयोगकर्ता
- एंड्राइड के लिए कम मेमोरी वाला और मुफ्त फ्रंट एंड Youtube.
+ एंड्राइड के लिए हल्का और मुफ्त स्ट्रीमिंग।
अगर आपके पास कोई सुझाव हो जैसे -अनुवाद , डिजाईन में बदलाव ,code को साफ़ रखना , या फिर code में जायदा बदलाव लाना हो तो - साहयता के लिए आपका स्वागत है . जितना ज्यादा होगा उतना बेहतर होगा !
क्या आप इसको खोज इतिहास के मिटाना चाहते है ?
@@ -310,10 +310,10 @@
नाम बदलें
दान करें
- NewPipe स्वयंसेवकों द्वारा विकसित किया जाता है जो आपको अच्छा अनुभव देने के लिए अपना खाली समय व्यतीत करते हैं। अब यह सुनिश्चित करने का समय है कि हमारे डेवलपर्स जावा के कप का आनंद लेते समय NewPipe को और भी बेहतर बना सके!
+ NewPipe स्वयंसेवकों द्वारा विकसित किया जाता है जो आपको अच्छा अनुभव देने के लिए अपना खाली समय व्यतीत करते हैं। स्वयंसेवको को मदद भेजे, ताकि वह NewPipe को और अच्छा बना सके।
वापस दे
वेबसाइट
- अधिक जानकारी और NewPipe के बारे में नवीनतम समाचार प्राप्त करने के लिए हमारी वेबसाइट पर जाएं ।
+ अधिक जानकारी और खबरों के लिए NewPipe की वेबसाइट पर जाएं ।
क्या आप इस आइटम को वॉच इतिहास से हटाना चाहते हैं?
क्या आप वाकई इतिहास से सभी आइटंस हटाना चाहते हैं?
पिछला चलाया गया
@@ -327,7 +327,7 @@
ड्रावर खोलें
ड्रावर बंद करें
- जल्द ही यहां पर कुछ आएगा ;D
+ जल्द ही यहां पर कुछ दिखाई देगा ;D
वीडियो प्लेयर
@@ -336,7 +336,7 @@
हमेशा पूछें
जानकारी प्राप्त की जा रही है…
- अनुरोधित कंटेंट लोड हो रहा है
+ अनुरोधित सामग्री लोड कर रहे है
नई प्लेलिस्ट बनाएं
प्लेलिस्ट हटाएं
@@ -349,12 +349,12 @@
बुकमार्क हटायें
क्या आप इस प्लेलिस्ट को हटाना चाहते हैं?
- प्लेलिस्ट सफलतापूर्वक बनाई गई
+ सूची बना दी गई
प्लेलिस्ट में जोड़ा गया
प्लेलिस्ट का थंबनेल बदल दिया गया है
- प्लेलिस्ट हटाने में असफल
+ सूची हटाने में असफल
- कोई कैप्शन नहीं
+ कोई कैप्शन नहीं है
फिट
भरें
@@ -371,13 +371,13 @@
डीबग करें
ऑटो-जनरेटेड
LeakCanary सक्षम करें
- हीप डंप करने के दौरान मेमोरी लीक मॉनिटरिंग app को अनुत्तरदायी बना सकता है
+ हीप डंप करने के दौरान मेमोरी लीक मॉनिटरिंग ऐप को अनुत्तरदायी बना सकता है
Out-of-Lifecycle त्रुटियों की रिपोर्ट करें
छायाप्रारुप लोड करें
तेजी से अचूक तलाश का प्रयोग करें
अचूक खोज प्लेयर को कम परिशुद्धता के साथ तेजी से पदों की तलाश करने की अनुमति देता है
- सभी थंबनेल को डेटा और मेमोरी उपयोग पर लोड करने और सहेजने से रोकने के लिए अक्षम करें। इसे बदलने से इन-मेमोरी और ऑन-डिस्क छवि कैश दोनों साफ़ हो जाएंगे।
+ सभी थंबनेल को लोड होने से रोके और डेटा और मेमोरी का उपयोग घटाए। इसे बदलने से मेमोरी और डिस्क की छवि की कैश साफ़ हो जाएगी
छवि कैश मिटा दिया
कैश मेटाडेटा वाइप करें
सभी कैश किए गए वेबपृष्ठ डेटा हटाएं
@@ -386,4 +386,83 @@
गैर-दोहराने वाली कतार में अंतिम स्ट्रीम चलाते समय संबंधित स्ट्रीम को स्वतः संलग्न करें।
फाइल
-
+ चेनल्स
+ सूची
+ ट्रेक
+ उपभोगता
+ देखे हुए वीडियो की सूची साफ करें
+ चलाये गए स्ट्रीम का इतिहास साफ करता है
+ देखे गए सभी का इतिहास साफ करें।
+ देखे हुए का इतिहास साफ कर दिया गया।
+ ढूंढने के इतिहास को साफ करें
+ ढूंढे गए शब्दो का इतिहास साफ करता है
+ ढूंढने के इतिहास को पूरा साफ करें।
+ ढूंढने के इतिहास को साफ कर दिया।
+ अमान्य डाइरेक्टरी
+ अमान्य फाइल/कॉन्टेंट उदभावस्थान
+ फाइल मौजूद नही है या उसे पढने या लिखने की पर्याप्त अनुमति नही है
+ फाइल का नाम खाली नही हो सकता
+ एक भूल हुई: %1$s
+ डाउनलोड करने के लिए कोई स्ट्रीम उपलब्ध नही है
+
+ एक चीज़ साफ कर दी गई।
+
+ इस फ़ाइल को चलाने के लिए कोई ऐप स्थापित नही है
+
+ NewPipe की गोपनीयता नीति
+ NewPipe परियोजना आपकी गोपनीयता को बहोत गंभीर रूप से लेता है। इसलिए, ऐप आपकी अनुमति के बिना कोई डेटा जमा नही करता।
+\nNewPipe की गोपनीयता नीति विस्तार से समज़ाती है कि कोनसा डेटा भेजा या संग्रह किया जाता है जब आप क्रेश विवरण भेजते है।
+ गोपनीयता नीति पढ़े
+ क्या आप सेटिंग्स भी आयात करना चाहते है?
+
+ पसंदीदा \'खोलने पर\' करवाई
+ सामग्री खोलते समय डिफ़ॉल्ट कारवाही
+
+ केप्सन
+ प्लेयर केप्शन के शब्दों का परिमाण और पृष्ठभूमि शैलियो को बदले। लागू करने के लिए ऐप को पुनः प्रारम्भ करना जरूरी है।
+
+ आयात/निर्यात
+ आयात
+ से आयात करे
+ पर निर्यात करे
+
+ आयात किया जा रहा है…
+ निर्यात किया जा रहा है…
+
+ फाइल आयात करे
+ पहले वाला निर्यात
+
+ सब्सक्रिप्शन आयात नही कर सके
+ सब्सक्रिप्शन निर्यात नही कर सके
+
+ निर्यात की गई फाइल को डाउनलोड करके यूट्यूब सब्सक्रिप्शन को आयात करे:
+\n
+\n1. इस URL पर जाए: %1$s
+\n2. जब कहा जाए, लॉगिन करे
+\n3. एक डाउनलोड शुरू होना चाहिए (यही निर्यात की गई फाइल है)
+ आपका आई डी, soundcloud.com/yourid
+
+ ध्यान रखे, यह तरीका नेटवर्क साधनो के लिए मंहगा हो सकता है।
+\n
+\nक्या आप आगे बढ़ना चाहते है?
+
+ चलाने की गति के नियंत्रण
+ गति
+ ऊंचाई
+ अनलिंक (बिगाड़ सकता है)
+ खामोशी के समय तेज़ी से आगे बढ़े
+ कदम
+ रिसेट
+
+ स्वीकारे
+ अस्वीकार करे
+
+ असीमित
+ मोबाइल डेटा उपयोग करते समय रेसॉल्युसेन मर्यादित करे
+ ऐप बदलते समय मिनिमाइज करे
+ "कार्यवाई, मुख्य वीडियो चालक से दूसरी ऐप पर जाने पर — %s"
+ कोई नही
+ पृष्ठभूमि प्लेयर जैसे मिनिमाइज करे
+ पॉप अप प्लेयर जैसे मिनिमाइज करे
+
+
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 1f925eb39..f4687149a 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -111,7 +111,7 @@
Hibás URL vagy nincs internet
NewPipe letöltés folyamatban
Katt a részletekért
- Kérlek várj...
+ Kérlek várj…
Vágólapra másolva.
Kérlek válassz egy létező könyvtárat a letöltésekhez.
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 029a4b1de..467580fd8 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -217,12 +217,12 @@ membuka di mode popup