summaryrefslogtreecommitdiff
path: root/core/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java36
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java81
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java231
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java45
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java86
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java5
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java29
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java19
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java13
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java42
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java11
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java31
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java44
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java118
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java90
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java32
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java68
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java7
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java220
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java30
-rw-r--r--core/src/main/res/drawable/ic_bookmark_grey600_24dp.xml5
-rw-r--r--core/src/main/res/drawable/ic_bookmark_white_24dp.xml5
-rw-r--r--core/src/main/res/layout/player_widget.xml12
-rw-r--r--core/src/main/res/values-ar/strings.xml2
-rw-r--r--core/src/main/res/values-b+ast/strings.xml8
-rw-r--r--core/src/main/res/values-bg/strings.xml8
-rw-r--r--core/src/main/res/values-ca/strings.xml10
-rw-r--r--core/src/main/res/values-cs-rCZ/strings.xml6
-rw-r--r--core/src/main/res/values-da/strings.xml10
-rw-r--r--core/src/main/res/values-de/strings.xml10
-rw-r--r--core/src/main/res/values-es-rES/strings.xml2
-rw-r--r--core/src/main/res/values-es/strings.xml10
-rw-r--r--core/src/main/res/values-et/strings.xml4
-rw-r--r--core/src/main/res/values-fa/strings.xml6
-rw-r--r--core/src/main/res/values-fr/strings.xml10
-rw-r--r--core/src/main/res/values-gl-rES/strings.xml10
-rw-r--r--core/src/main/res/values-h768dp/dimens.xml4
-rw-r--r--core/src/main/res/values-hi-rIN/strings.xml4
-rw-r--r--core/src/main/res/values-hu/strings.xml6
-rw-r--r--core/src/main/res/values-id/strings.xml2
-rw-r--r--core/src/main/res/values-it/strings.xml10
-rw-r--r--core/src/main/res/values-iw-rIL/strings.xml10
-rw-r--r--core/src/main/res/values-ja/strings.xml10
-rw-r--r--core/src/main/res/values-ko/strings.xml8
-rw-r--r--core/src/main/res/values-lt/strings.xml10
-rw-r--r--core/src/main/res/values-nb/strings.xml6
-rw-r--r--core/src/main/res/values-nl/strings.xml10
-rw-r--r--core/src/main/res/values-pl-rPL/strings.xml10
-rw-r--r--core/src/main/res/values-pt-rBR/strings.xml10
-rw-r--r--core/src/main/res/values-pt/strings.xml10
-rw-r--r--core/src/main/res/values-ru/strings.xml10
-rw-r--r--core/src/main/res/values-sv-rSE/strings.xml10
-rw-r--r--core/src/main/res/values-tr/strings.xml10
-rw-r--r--core/src/main/res/values-uk-rUA/strings.xml10
-rw-r--r--core/src/main/res/values-vi/strings.xml6
-rw-r--r--core/src/main/res/values-zh-rCN/strings.xml8
-rw-r--r--core/src/main/res/values-zh-rTW/strings.xml6
-rw-r--r--core/src/main/res/values/attrs.xml1
-rw-r--r--core/src/main/res/values/dimens.xml2
-rw-r--r--core/src/main/res/values/strings.xml70
-rw-r--r--core/src/main/res/values/styles.xml3
63 files changed, 203 insertions, 1405 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java b/core/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java
deleted file mode 100644
index 5fa6faa13..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/FlattrCallbacks.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package de.danoeh.antennapod.core;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-
-import org.shredzone.flattr4j.oauth.AccessToken;
-
-/**
- * Callbacks for the flattr integration of the app.
- */
-public interface FlattrCallbacks {
-
- /**
- * Returns if true if the flattr integration should be activated,
- * false otherwise.
- */
- boolean flattrEnabled();
-
- /**
- * Returns an intent that starts the activity that is responsible for
- * letting users log into their flattr account.
- *
- * @return The intent that starts the authentication activity or null
- * if flattr integration is disabled (i.e. flattrEnabled() == false).
- */
- Intent getFlattrAuthenticationActivityIntent(Context context);
-
- PendingIntent getFlattrFailedNotificationContentIntent(Context context);
-
- String getFlattrAppKey();
-
- String getFlattrAppSecret();
-
- void handleFlattrAuthenticationSuccess(AccessToken token);
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java b/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java
deleted file mode 100644
index 1b4cbc0ea..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/UpdateManager.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package de.danoeh.antennapod.core;
-
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.util.Log;
-
-import org.antennapod.audio.MediaPlayer;
-
-import de.danoeh.antennapod.core.preferences.UserPreferences;
-
-/*
- * This class's job is do perform maintenance tasks whenever the app has been updated
- */
-class UpdateManager {
-
- private UpdateManager(){}
-
- private static final String TAG = UpdateManager.class.getSimpleName();
-
- private static final String PREF_NAME = "app_version";
- private static final String KEY_VERSION_CODE = "version_code";
-
- private static int currentVersionCode;
-
- private static Context context;
- private static SharedPreferences prefs;
-
- public static void init(Context context) {
- UpdateManager.context = context;
- prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
- PackageManager pm = context.getPackageManager();
- try {
- PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0);
- currentVersionCode = info.versionCode;
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "Failed to obtain package info for package name: " + context.getPackageName(), e);
- currentVersionCode = 0;
- return;
- }
- final int oldVersionCode = getStoredVersionCode();
- Log.d(TAG, "old: " + oldVersionCode + ", current: " + currentVersionCode);
- if(oldVersionCode < currentVersionCode) {
- onUpgrade(oldVersionCode, currentVersionCode);
- setCurrentVersionCode();
- }
- }
-
- private static int getStoredVersionCode() {
- return prefs.getInt(KEY_VERSION_CODE, -1);
- }
-
- private static void setCurrentVersionCode() {
- prefs.edit().putInt(KEY_VERSION_CODE, currentVersionCode).apply();
- }
-
- private static void onUpgrade(final int oldVersionCode, final int newVersionCode) {
- if (oldVersionCode < 1050004) {
- if(MediaPlayer.isPrestoLibraryInstalled(context) && Build.VERSION.SDK_INT >= 16) {
- UserPreferences.enableSonic();
- }
- }
-
- if (oldVersionCode < 1070196) {
- // migrate episode cleanup value (unit changed from days to hours)
- int oldValueInDays = UserPreferences.getEpisodeCleanupValue();
- if (oldValueInDays > 0) {
- UserPreferences.setEpisodeCleanupValue(oldValueInDays * 24);
- } // else 0 or special negative values, no change needed
- }
- if (oldVersionCode < 1070197) {
- if (prefs.getBoolean("prefMobileUpdate", false)) {
- prefs.edit().putString(UserPreferences.PREF_MOBILE_UPDATE, "everything").apply();
- }
- }
- }
-
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java
deleted file mode 100644
index 318e404c8..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrClickWorker.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package de.danoeh.antennapod.core.asynctask;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.os.AsyncTask;
-import android.support.annotation.NonNull;
-import android.support.v4.app.NotificationCompat;
-import android.util.Log;
-import android.widget.Toast;
-
-import org.shredzone.flattr4j.exception.FlattrException;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import de.danoeh.antennapod.core.BuildConfig;
-import de.danoeh.antennapod.core.ClientConfig;
-import de.danoeh.antennapod.core.R;
-import de.danoeh.antennapod.core.storage.DBReader;
-import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.core.util.NetworkUtils;
-import de.danoeh.antennapod.core.util.flattr.FlattrThing;
-import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
-import de.danoeh.antennapod.core.util.gui.NotificationUtils;
-
-/**
- * Performs a click action in a background thread.
- * <p/>
- * When started, the flattr click worker will try to flattr every item that is in the flattr queue. If no network
- * connection is available it will shut down immediately. The FlattrClickWorker can also be given one additional
- * FlattrThing which will be flattrd immediately.
- * <p/>
- * The FlattrClickWorker will display a toast notification for every item that has been flattrd. If the FlattrClickWorker failed
- * to flattr something, a notification will be displayed.
- */
-public class FlattrClickWorker extends AsyncTask<Void, Integer, FlattrClickWorker.ExitCode> {
- private static final String TAG = "FlattrClickWorker";
-
- private static final int NOTIFICATION_ID = 4;
-
- private final Context context;
-
- public enum ExitCode {EXIT_NORMAL, NO_TOKEN, NO_NETWORK, NO_THINGS}
-
- private final AtomicInteger countFailed = new AtomicInteger();
- private final AtomicInteger countSuccess = new AtomicInteger();
-
- private volatile FlattrThing extraFlattrThing;
-
- /**
- * Only relevant if just one thing is flattrd
- */
- private volatile FlattrException exception;
-
- /**
- * Creates a new FlattrClickWorker which will only flattr all things in the queue.
- * <p/>
- * The FlattrClickWorker has to be started by calling executeAsync().
- *
- * @param context A context for accessing the database and posting notifications. Must not be null.
- */
- public FlattrClickWorker(@NonNull Context context) {
- this.context = context.getApplicationContext();
- }
-
- /**
- * Creates a new FlattrClickWorker which will flattr all things in the queue and one additional
- * FlattrThing.
- * <p/>
- * The FlattrClickWorker has to be started by calling executeAsync().
- *
- * @param context A context for accessing the database and posting notifications. Must not be null.
- * @param extraFlattrThing The additional thing to flattr
- */
- public FlattrClickWorker(Context context, FlattrThing extraFlattrThing) {
- this(context);
- this.extraFlattrThing = extraFlattrThing;
- }
-
-
- @Override
- protected ExitCode doInBackground(Void... params) {
-
- if (!FlattrUtils.hasToken()) {
- return ExitCode.NO_TOKEN;
- }
-
- if (!NetworkUtils.networkAvailable()) {
- return ExitCode.NO_NETWORK;
- }
-
- final List<FlattrThing> flattrQueue = DBReader.getFlattrQueue();
- if (extraFlattrThing != null) {
- flattrQueue.add(extraFlattrThing);
- } else if (flattrQueue.size() == 1) {
- // if only one item is flattrd, the report can specifically mentioned that this item has failed
- extraFlattrThing = flattrQueue.get(0);
- }
-
- if (flattrQueue.isEmpty()) {
- return ExitCode.NO_THINGS;
- }
-
- List<Future<?>> dbFutures = new LinkedList<>();
- for (FlattrThing thing : flattrQueue) {
- if (BuildConfig.DEBUG) Log.d(TAG, "Processing " + thing.getTitle());
-
- try {
- thing.getFlattrStatus().setUnflattred(); // pop from queue to prevent unflattrable things from getting stuck in flattr queue infinitely
- FlattrUtils.clickUrl(context, thing.getPaymentLink());
- thing.getFlattrStatus().setFlattred();
- publishProgress(R.string.flattr_click_success);
- countSuccess.incrementAndGet();
-
- } catch (FlattrException e) {
- e.printStackTrace();
- int failed = countFailed.incrementAndGet();
- if (failed == 1) {
- exception = e;
- }
- }
-
- Future<?> f = DBWriter.setFlattredStatus(context, thing, false);
- if (f != null) {
- dbFutures.add(f);
- }
- }
-
- for (Future<?> f : dbFutures) {
- try {
- f.get();
- } catch (InterruptedException | ExecutionException e) {
- e.printStackTrace();
- }
- }
-
- return ExitCode.EXIT_NORMAL;
- }
-
- @Override
- protected void onPostExecute(ExitCode exitCode) {
- super.onPostExecute(exitCode);
- switch (exitCode) {
- case EXIT_NORMAL:
- if (countFailed.get() > 0) {
- postFlattrFailedNotification();
- }
- break;
- case NO_NETWORK:
- postToastNotification(R.string.flattr_click_enqueued);
- break;
- case NO_TOKEN:
- postNoTokenNotification();
- break;
- case NO_THINGS: // nothing to notify here
- break;
- }
- }
-
- @Override
- protected void onProgressUpdate(Integer... values) {
- super.onProgressUpdate(values);
- postToastNotification(values[0]);
- }
-
- private void postToastNotification(int msg) {
- Toast.makeText(context, context.getString(msg), Toast.LENGTH_LONG).show();
- }
-
- private void postNoTokenNotification() {
- PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
- ClientConfig.flattrCallbacks.getFlattrAuthenticationActivityIntent(context), 0);
-
- Notification notification = new NotificationCompat.Builder(context, NotificationUtils.CHANNEL_ID_ERROR)
- .setStyle(new NotificationCompat.BigTextStyle().bigText(context.getString(R.string.no_flattr_token_notification_msg)))
- .setContentIntent(contentIntent)
- .setContentTitle(context.getString(R.string.no_flattr_token_title))
- .setTicker(context.getString(R.string.no_flattr_token_title))
- .setSmallIcon(R.drawable.stat_notify_sync_error)
- .setOngoing(false)
- .setAutoCancel(true)
- .build();
- ((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, notification);
- }
-
- private void postFlattrFailedNotification() {
- int failed = countFailed.get();
- if (failed == 0) {
- return;
- }
-
- PendingIntent contentIntent = ClientConfig.flattrCallbacks.getFlattrFailedNotificationContentIntent(context);
- String title;
- String subtext;
-
- if (failed == 1) {
- title = context.getString(R.string.flattrd_failed_label);
- String exceptionMsg = (exception.getMessage() != null) ? exception.getMessage() : "";
- subtext = context.getString(R.string.flattr_click_failure, extraFlattrThing.getTitle())
- + "\n" + exceptionMsg;
- } else {
- title = context.getString(R.string.flattrd_label);
- subtext = context.getString(R.string.flattr_click_success_count, countSuccess.get()) + "\n"
- + context.getString(R.string.flattr_click_failure_count, failed);
- }
-
- Notification notification = new NotificationCompat.Builder(context, NotificationUtils.CHANNEL_ID_ERROR)
- .setStyle(new NotificationCompat.BigTextStyle().bigText(subtext))
- .setContentIntent(contentIntent)
- .setContentTitle(title)
- .setTicker(title)
- .setSmallIcon(R.drawable.stat_notify_sync_error)
- .setOngoing(false)
- .setAutoCancel(true)
- .build();
- ((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, notification);
- }
-
-
- /**
- * Starts the FlattrClickWorker as an AsyncTask.
- */
- public void executeAsync() {
- executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java
deleted file mode 100644
index 6d9ab2bd3..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrStatusFetcher.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package de.danoeh.antennapod.core.asynctask;
-
-import android.content.Context;
-import android.util.Log;
-
-import org.shredzone.flattr4j.exception.FlattrException;
-import org.shredzone.flattr4j.model.Flattr;
-
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-
-import de.danoeh.antennapod.core.BuildConfig;
-import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
-
-/**
- * Fetch list of flattred things and flattr status in database in a background thread.
- */
-
-public class FlattrStatusFetcher extends Thread {
- private static final String TAG = "FlattrStatusFetcher";
-
- public FlattrStatusFetcher(Context context) {
- super();
- }
-
- @Override
- public void run() {
- if (BuildConfig.DEBUG) Log.d(TAG, "Starting background work: Retrieving Flattr status");
-
- Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
-
- try {
- List<Flattr> flattredThings = FlattrUtils.retrieveFlattredThings();
- DBWriter.setFlattredStatus(flattredThings).get();
- } catch (FlattrException e) {
- e.printStackTrace();
- Log.d(TAG, "flattrQueue exception retrieving list with flattred items " + e.getMessage());
- } catch (InterruptedException | ExecutionException e) {
- e.printStackTrace();
- }
-
- if (BuildConfig.DEBUG) Log.d(TAG, "Finished background work: Retrieved Flattr status");
- }
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java
deleted file mode 100644
index 985cabbf8..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FlattrTokenFetcher.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package de.danoeh.antennapod.core.asynctask;
-
-
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.util.Log;
-
-import org.shredzone.flattr4j.exception.FlattrException;
-import org.shredzone.flattr4j.oauth.AccessToken;
-import org.shredzone.flattr4j.oauth.AndroidAuthenticator;
-
-import de.danoeh.antennapod.core.BuildConfig;
-import de.danoeh.antennapod.core.ClientConfig;
-import de.danoeh.antennapod.core.R;
-import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
-
-/**
- * Fetches the access token in the background in order to avoid networkOnMainThread exception.
- */
-
-public class FlattrTokenFetcher extends AsyncTask<Void, Void, AccessToken> {
- private static final String TAG = "FlattrTokenFetcher";
- private final Context context;
- private final AndroidAuthenticator auth;
- private AccessToken token;
- private final Uri uri;
- private ProgressDialog dialog;
- private FlattrException exception;
-
- public FlattrTokenFetcher(Context context, AndroidAuthenticator auth, Uri uri) {
- super();
- this.context = context;
- this.auth = auth;
- this.uri = uri;
- }
-
- @Override
- protected void onPostExecute(AccessToken result) {
- if (result != null) {
- FlattrUtils.storeToken(result);
- }
- dialog.dismiss();
- if (exception == null) {
- ClientConfig.flattrCallbacks.handleFlattrAuthenticationSuccess(result);
- } else {
- FlattrUtils.showErrorDialog(context, exception.getMessage());
- }
- }
-
-
- @Override
- protected void onPreExecute() {
- super.onPreExecute();
- dialog = new ProgressDialog(context);
- dialog.setMessage(context.getString(R.string.processing_label));
- dialog.setIndeterminate(true);
- dialog.setCancelable(false);
- dialog.show();
- }
-
-
- @Override
- protected AccessToken doInBackground(Void... params) {
- try {
- token = auth.fetchAccessToken(uri);
- } catch (FlattrException e) {
- e.printStackTrace();
- exception = e;
- return null;
- }
- if (token != null) {
- if (BuildConfig.DEBUG) Log.d(TAG, "Successfully got token");
- return token;
- } else {
- Log.w(TAG, "Flattr token was null");
- return null;
- }
- }
-
- public void executeAsync() {
- executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
-
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java b/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java
index dcb033267..7ca6f78de 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/event/DownloaderUpdate.java
@@ -1,5 +1,7 @@
package de.danoeh.antennapod.core.event;
+import android.support.annotation.NonNull;
+
import java.util.Arrays;
import java.util.List;
@@ -11,6 +13,7 @@ import de.danoeh.antennapod.core.util.LongList;
public class DownloaderUpdate {
/* Downloaders that are currently running */
+ @NonNull
public final List<Downloader> downloaders;
/**
@@ -25,7 +28,7 @@ public class DownloaderUpdate {
*/
public final long[] mediaIds;
- public DownloaderUpdate(List<Downloader> downloaders) {
+ DownloaderUpdate(@NonNull List<Downloader> downloaders) {
this.downloaders = downloaders;
LongList feedIds1 = new LongList(), mediaIds1 = new LongList();
for(Downloader d1 : downloaders) {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java
index 3395653f3..5718c06c2 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java
@@ -11,15 +11,12 @@ import java.util.List;
import de.danoeh.antennapod.core.asynctask.ImageResource;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
-import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
-import de.danoeh.antennapod.core.util.flattr.FlattrThing;
-
/**
* Data Object for a whole feed
*
* @author daniel
*/
-public class Feed extends FeedFile implements FlattrThing, ImageResource {
+public class Feed extends FeedFile implements ImageResource {
public static final int FEEDFILETYPE_FEED = 0;
public static final String TYPE_RSS2 = "rss";
@@ -52,7 +49,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
*/
private String lastUpdate;
- private FlattrStatus flattrStatus;
private String paymentLink;
/**
* Feed type, for example RSS 2 or Atom
@@ -97,7 +93,7 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
*/
public Feed(long id, String lastUpdate, String title, String customTitle, String link, String description, String paymentLink,
String author, String language, String type, String feedIdentifier, String imageUrl, String fileUrl,
- String downloadUrl, boolean downloaded, FlattrStatus status, boolean paged, String nextPageLink,
+ String downloadUrl, boolean downloaded, boolean paged, String nextPageLink,
String filter, boolean lastUpdateFailed) {
super(fileUrl, downloadUrl, downloaded);
this.id = id;
@@ -112,7 +108,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
this.type = type;
this.feedIdentifier = feedIdentifier;
this.imageUrl = imageUrl;
- this.flattrStatus = status;
this.paged = paged;
this.nextPageLink = nextPageLink;
this.items = new ArrayList<>();
@@ -125,13 +120,13 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
}
/**
- * This constructor is used for test purposes and uses a default flattr status object.
+ * This constructor is used for test purposes
*/
public Feed(long id, String lastUpdate, String title, String link, String description, String paymentLink,
String author, String language, String type, String feedIdentifier, String imageUrl, String fileUrl,
String downloadUrl, boolean downloaded) {
this(id, lastUpdate, title, null, link, description, paymentLink, author, language, type, feedIdentifier, imageUrl,
- fileUrl, downloadUrl, downloaded, new FlattrStatus(), false, null, null, false);
+ fileUrl, downloadUrl, downloaded, false, null, null, false);
}
/**
@@ -139,7 +134,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
*/
public Feed() {
super();
- this.flattrStatus = new FlattrStatus();
}
/**
@@ -149,7 +143,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
public Feed(String url, String lastUpdate) {
super(null, url, false);
this.lastUpdate = lastUpdate;
- this.flattrStatus = new FlattrStatus();
}
/**
@@ -159,7 +152,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
public Feed(String url, String lastUpdate, String title) {
this(url, lastUpdate);
this.feedTitle = title;
- this.flattrStatus = new FlattrStatus();
}
/**
@@ -186,7 +178,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
int indexFileUrl = cursor.getColumnIndex(PodDBAdapter.KEY_FILE_URL);
int indexDownloadUrl = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOAD_URL);
int indexDownloaded = cursor.getColumnIndex(PodDBAdapter.KEY_DOWNLOADED);
- int indexFlattrStatus = cursor.getColumnIndex(PodDBAdapter.KEY_FLATTR_STATUS);
int indexIsPaged = cursor.getColumnIndex(PodDBAdapter.KEY_IS_PAGED);
int indexNextPageLink = cursor.getColumnIndex(PodDBAdapter.KEY_NEXT_PAGE_LINK);
int indexHide = cursor.getColumnIndex(PodDBAdapter.KEY_HIDE);
@@ -209,7 +200,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
cursor.getString(indexFileUrl),
cursor.getString(indexDownloadUrl),
cursor.getInt(indexDownloaded) > 0,
- new FlattrStatus(cursor.getLong(indexFlattrStatus)),
cursor.getInt(indexIsPaged) > 0,
cursor.getString(indexNextPageLink),
cursor.getString(indexHide),
@@ -291,9 +281,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
if (other.paymentLink != null) {
paymentLink = other.paymentLink;
}
- if (other.flattrStatus != null) {
- flattrStatus = other.flattrStatus;
- }
// this feed's nextPage might already point to a higher page, so we only update the nextPage value
// if this feed is not paged and the other feed is.
if (!this.paged && other.paged) {
@@ -444,14 +431,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
this.feedIdentifier = feedIdentifier;
}
- public void setFlattrStatus(FlattrStatus status) {
- this.flattrStatus = status;
- }
-
- public FlattrStatus getFlattrStatus() {
- return flattrStatus;
- }
-
public String getPaymentLink() {
return paymentLink;
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
index 0f0343f25..3495164a6 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java
@@ -18,15 +18,13 @@ import de.danoeh.antennapod.core.asynctask.ImageResource;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.ShownotesProvider;
-import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
-import de.danoeh.antennapod.core.util.flattr.FlattrThing;
/**
* Data Object for a XML message
*
* @author daniel
*/
-public class FeedItem extends FeedComponent implements ShownotesProvider, FlattrThing, ImageResource {
+public class FeedItem extends FeedComponent implements ShownotesProvider, ImageResource {
/** tag that indicates this item is in the queue */
public static final String TAG_QUEUE = "Queue";
@@ -60,7 +58,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
public static final int PLAYED = 1;
private String paymentLink;
- private final FlattrStatus flattrStatus;
/**
* Is true if the database contains any chapters that belong to this item. This attribute is only
@@ -92,7 +89,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
public FeedItem() {
this.state = UNPLAYED;
- this.flattrStatus = new FlattrStatus();
this.hasChapters = false;
}
@@ -100,7 +96,7 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
* This constructor is used by DBReader.
* */
public FeedItem(long id, String title, String link, Date pubDate, String paymentLink, long feedId,
- FlattrStatus flattrStatus, boolean hasChapters, String imageUrl, int state,
+ boolean hasChapters, String imageUrl, int state,
String itemIdentifier, long autoDownload) {
this.id = id;
this.title = title;
@@ -108,7 +104,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
this.pubDate = pubDate;
this.paymentLink = paymentLink;
this.feedId = feedId;
- this.flattrStatus = flattrStatus;
this.hasChapters = hasChapters;
this.imageUrl = imageUrl;
this.state = state;
@@ -127,7 +122,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
this.pubDate = (pubDate != null) ? (Date) pubDate.clone() : null;
this.state = state;
this.feed = feed;
- this.flattrStatus = new FlattrStatus();
this.hasChapters = false;
}
@@ -142,7 +136,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
this.pubDate = (pubDate != null) ? (Date) pubDate.clone() : null;
this.state = state;
this.feed = feed;
- this.flattrStatus = new FlattrStatus();
this.hasChapters = hasChapters;
}
@@ -153,7 +146,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
int indexPubDate = cursor.getColumnIndex(PodDBAdapter.KEY_PUBDATE);
int indexPaymentLink = cursor.getColumnIndex(PodDBAdapter.KEY_PAYMENT_LINK);
int indexFeedId = cursor.getColumnIndex(PodDBAdapter.KEY_FEED);
- int indexFlattrStatus = cursor.getColumnIndex(PodDBAdapter.KEY_FLATTR_STATUS);
int indexHasChapters = cursor.getColumnIndex(PodDBAdapter.KEY_HAS_CHAPTERS);
int indexRead = cursor.getColumnIndex(PodDBAdapter.KEY_READ);
int indexItemIdentifier = cursor.getColumnIndex(PodDBAdapter.KEY_ITEM_IDENTIFIER);
@@ -167,13 +159,12 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
String paymentLink = cursor.getString(indexPaymentLink);
long feedId = cursor.getLong(indexFeedId);
boolean hasChapters = cursor.getInt(indexHasChapters) > 0;
- FlattrStatus flattrStatus = new FlattrStatus(cursor.getLong(indexFlattrStatus));
int state = cursor.getInt(indexRead);
String itemIdentifier = cursor.getString(indexItemIdentifier);
long autoDownload = cursor.getLong(indexAutoDownload);
String imageUrl = cursor.getString(indexImageUrl);
- return new FeedItem(id, title, link, pubDate, paymentLink, feedId, flattrStatus,
+ return new FeedItem(id, title, link, pubDate, paymentLink, feedId,
hasChapters, imageUrl, state, itemIdentifier, autoDownload);
}
@@ -329,10 +320,6 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
public void setContentEncoded(String contentEncoded) {
this.contentEncoded = contentEncoded;
}
-
- public FlattrStatus getFlattrStatus() {
- return flattrStatus;
- }
public String getPaymentLink() {
return paymentLink;
diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java
index f3a43e2d0..218570632 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/feed/FeedMedia.java
@@ -25,7 +25,6 @@ import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.ChapterUtils;
-import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
import de.danoeh.antennapod.core.util.playback.Playable;
public class FeedMedia extends FeedFile implements Playable {
@@ -49,7 +48,7 @@ public class FeedMedia extends FeedFile implements Playable {
private int duration;
private int position; // Current position in file
private long lastPlayedTime; // Last time this media was played (in ms)
- private int played_duration; // How many ms of this file have been played (for autoflattring)
+ private int played_duration; // How many ms of this file have been played
private long size; // File size in Byte
private String mime_type;
@Nullable private volatile FeedItem item;
@@ -526,16 +525,6 @@ public class FeedMedia extends FeedFile implements Playable {
.build();
GpodnetPreferences.enqueueEpisodeAction(action);
}
- // Auto flattr
- float autoFlattrThreshold = UserPreferences.getAutoFlattrPlayedDurationThreshold();
- if (FlattrUtils.hasToken() &&
- UserPreferences.isAutoFlattr() &&
- item.getPaymentLink() != null &&
- item.getFlattrStatus().getUnflattred() &&
- ((completed && autoFlattrThreshold <= 1.0f) ||
- (played_duration >= autoFlattrThreshold * duration))) {
- DBTasks.flattrItemIfLoggedIn(context, item);
- }
}
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
index cfa217a12..9348ca807 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java
@@ -95,8 +95,6 @@ public class UserPreferences {
private static final String PREF_PROXY_PASSWORD = "prefProxyPassword";
// Services
- private static final String PREF_AUTO_FLATTR = "pref_auto_flattr";
- private static final String PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD = "prefAutoFlattrPlayedDurationThreshold";
private static final String PREF_GPODNET_NOTIFICATIONS = "pref_gpodnet_notifications";
// Other
@@ -318,10 +316,6 @@ public class UserPreferences {
return prefs.getBoolean(PREF_DELETE_REMOVES_FROM_QUEUE, false);
}
- public static boolean isAutoFlattr() {
- return prefs.getBoolean(PREF_AUTO_FLATTR, false);
- }
-
public static String getPlaybackSpeed() {
return prefs.getString(PREF_PLAYBACK_SPEED, "1.00");
}
@@ -450,16 +444,7 @@ public class UserPreferences {
}
public static int getRewindSecs() {
- return prefs.getInt(PREF_REWIND_SECS, 30);
- }
-
-
- /**
- * Returns the time after which an episode should be auto-flattr'd in percent of the episode's
- * duration.
- */
- public static float getAutoFlattrPlayedDurationThreshold() {
- return prefs.getFloat(PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD, 0.8f);
+ return prefs.getInt(PREF_REWIND_SECS, 10);
}
public static String[] getAutodownloadSelectedNetworks() {
@@ -588,23 +573,6 @@ public class UserPreferences {
AutoUpdateManager.disableAutoUpdate();
}
- /**
- * Change the auto-flattr settings
- *
- * @param enabled Whether automatic flattring should be enabled at all
- * @param autoFlattrThreshold The percentage of playback time after which an episode should be
- * flattrd. Must be a value between 0 and 1 (inclusive)
- * */
- public static void setAutoFlattrSettings( boolean enabled, float autoFlattrThreshold) {
- if(autoFlattrThreshold < 0.0 || autoFlattrThreshold > 1.0) {
- throw new IllegalArgumentException("Flattr threshold must be in range [0.0, 1.0]");
- }
- prefs.edit()
- .putBoolean(PREF_AUTO_FLATTR, enabled)
- .putFloat(PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD, autoFlattrThreshold)
- .apply();
- }
-
public static boolean gpodnetNotificationsEnabled() {
return prefs.getBoolean(PREF_GPODNET_NOTIFICATIONS, true);
}
@@ -681,12 +649,16 @@ public class UserPreferences {
return selectedSpeeds;
}
+ public static String getMediaPlayer() {
+ return prefs.getString(PREF_MEDIA_PLAYER, PREF_MEDIA_PLAYER_EXOPLAYER);
+ }
+
public static boolean useSonic() {
- return prefs.getString(PREF_MEDIA_PLAYER, "sonic").equals("sonic");
+ return getMediaPlayer().equals("sonic");
}
public static boolean useExoplayer() {
- return prefs.getString(PREF_MEDIA_PLAYER, "sonic").equals(PREF_MEDIA_PLAYER_EXOPLAYER);
+ return getMediaPlayer().equals(PREF_MEDIA_PLAYER_EXOPLAYER);
}
public static void enableSonic() {
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java
index 1165d689a..b26d3011d 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/PlayerWidgetJobService.java
@@ -41,6 +41,7 @@ public class PlayerWidgetJobService extends SafeJobIntentService {
private PlaybackService playbackService;
private final Object waitForService = new Object();
+ private final Object waitUsingService = new Object();
private static final int JOB_ID = -17001;
@@ -67,7 +68,11 @@ public class PlayerWidgetJobService extends SafeJobIntentService {
}
}
- updateViews();
+ synchronized (waitUsingService) {
+ if (playbackService != null) {
+ updateViews();
+ }
+ }
if (playbackService != null) {
try {
@@ -230,7 +235,9 @@ public class PlayerWidgetJobService extends SafeJobIntentService {
@Override
public void onServiceDisconnected(ComponentName name) {
- playbackService = null;
+ synchronized (waitUsingService) {
+ playbackService = null;
+ }
Log.d(TAG, "Disconnected from service");
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
index 7988526d9..9a8353806 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java
@@ -243,7 +243,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
callback.onMediaChanged(false);
if (stream) {
mediaPlayer.setDataSource(media.getStreamUrl());
- } else if (new File(media.getLocalMediaUrl()).canRead()) {
+ } else if (media.getLocalMediaUrl() != null && new File(media.getLocalMediaUrl()).canRead()) {
mediaPlayer.setDataSource(media.getLocalMediaUrl());
} else {
throw new IOException("Unable to read local file " + media.getLocalMediaUrl());
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
index 1b579f99a..19faa5aed 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java
@@ -26,7 +26,6 @@ import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.comparator.DownloadStatusComparator;
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
import de.danoeh.antennapod.core.util.comparator.PlaybackCompletionDateComparator;
-import de.danoeh.antennapod.core.util.flattr.FlattrThing;
/**
* Provides methods for reading data from the AntennaPod database.
@@ -1004,36 +1003,6 @@ public final class DBReader {
}
/**
- * Returns the flattr queue as a List of FlattrThings. The list consists of Feeds and FeedItems.
- *
- * @return The flattr queue as a List.
- */
- public static List<FlattrThing> getFlattrQueue() {
- Log.d(TAG, "getFlattrQueue() called with: " + "");
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- List<FlattrThing> result = new ArrayList<>();
-
- // load feeds
- Cursor feedCursor = adapter.getFeedsInFlattrQueueCursor();
- if (feedCursor.moveToFirst()) {
- do {
- result.add(extractFeedFromCursorRow(feedCursor));
- } while (feedCursor.moveToNext());
- }
- feedCursor.close();
-
- //load feed items
- Cursor feedItemCursor = adapter.getFeedItemsInFlattrQueueCursor();
- result.addAll(extractItemlistFromCursor(adapter, feedItemCursor));
- feedItemCursor.close();
-
- adapter.close();
- Log.d(TAG, "Returning flattrQueueIterator for queue with " + result.size() + " items.");
- return result;
- }
-
- /**
* Returns data necessary for displaying the navigation drawer. This includes
* the list of subscriptions, the number of items in the queue and the number of unread
* items.
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
index dab8e19b5..e68bff16e 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBTasks.java
@@ -20,8 +20,6 @@ import java.util.concurrent.FutureTask;
import java.util.concurrent.atomic.AtomicBoolean;
import de.danoeh.antennapod.core.ClientConfig;
-import de.danoeh.antennapod.core.asynctask.FlattrClickWorker;
-import de.danoeh.antennapod.core.asynctask.FlattrStatusFetcher;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
@@ -35,7 +33,6 @@ import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
import de.danoeh.antennapod.core.util.exception.MediaFileNotFoundException;
-import de.danoeh.antennapod.core.util.flattr.FlattrUtils;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
import static android.content.Context.MODE_PRIVATE;
@@ -182,14 +179,6 @@ public final class DBTasks {
SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
prefs.edit().putLong(PREF_LAST_REFRESH, System.currentTimeMillis()).apply();
- if (FlattrUtils.hasToken()) {
- Log.d(TAG, "Flattring all pending things.");
- new FlattrClickWorker(context).executeAsync(); // flattr pending things
-
- Log.d(TAG, "Fetching flattr status.");
- new FlattrStatusFetcher(context).start();
-
- }
if (ClientConfig.gpodnetCallbacks.gpodnetEnabled()) {
GpodnetSyncService.sendSyncIntent(context);
}
@@ -771,37 +760,4 @@ public final class DBTasks {
this.result = result;
}
}
-
- /**
- * Adds the given FeedItem to the flattr queue if the user is logged in. Otherwise, a dialog
- * will be opened that lets the user go either to the login screen or the website of the flattr thing.
- *
- * @param context
- * @param item
- */
- public static void flattrItemIfLoggedIn(Context context, FeedItem item) {
- if (FlattrUtils.hasToken()) {
- item.getFlattrStatus().setFlattrQueue();
- DBWriter.setFlattredStatus(context, item, true);
- } else {
- FlattrUtils.showNoTokenDialogOrRedirect(context, item.getPaymentLink());
- }
- }
-
- /**
- * Adds the given Feed to the flattr queue if the user is logged in. Otherwise, a dialog
- * will be opened that lets the user go either to the login screen or the website of the flattr thing.
- *
- * @param context
- * @param feed
- */
- public static void flattrFeedIfLoggedIn(Context context, Feed feed) {
- if (FlattrUtils.hasToken()) {
- feed.getFlattrStatus().setFlattrQueue();
- DBWriter.setFlattredStatus(context, feed, true);
- } else {
- FlattrUtils.showNoTokenDialogOrRedirect(context, feed.getPaymentLink());
- }
- }
-
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java
index 0beb765e7..306f8d104 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBUpgrader.java
@@ -76,10 +76,10 @@ class DBUpgrader {
}
if (oldVersion <= 10) {
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
- + " ADD COLUMN " + PodDBAdapter.KEY_FLATTR_STATUS
+ + " ADD COLUMN flattr_status"
+ " INTEGER");
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS
- + " ADD COLUMN " + PodDBAdapter.KEY_FLATTR_STATUS
+ + " ADD COLUMN flattr_status"
+ " INTEGER");
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_MEDIA
+ " ADD COLUMN " + PodDBAdapter.KEY_PLAYED_DURATION
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
index 515b463db..2de811788 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DBWriter.java
@@ -9,7 +9,6 @@ import android.support.annotation.NonNull;
import android.util.Log;
import org.greenrobot.eventbus.EventBus;
-import org.shredzone.flattr4j.model.Flattr;
import java.io.File;
import java.io.UnsupportedEncodingException;
@@ -26,7 +25,6 @@ import java.util.concurrent.Future;
import de.danoeh.antennapod.core.ClientConfig;
import de.danoeh.antennapod.core.R;
-import de.danoeh.antennapod.core.asynctask.FlattrClickWorker;
import de.danoeh.antennapod.core.event.FavoritesEvent;
import de.danoeh.antennapod.core.event.FeedItemEvent;
import de.danoeh.antennapod.core.event.MessageEvent;
@@ -47,9 +45,6 @@ import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.Permutor;
import de.danoeh.antennapod.core.util.QueueSorter;
-import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
-import de.danoeh.antennapod.core.util.flattr.FlattrThing;
-import de.danoeh.antennapod.core.util.flattr.SimpleFlattrThing;
/**
* Provides methods for writing data to AntennaPod's database.
@@ -685,7 +680,7 @@ public class DBWriter {
*
* @param feedId ID of the Feed.
*/
- public static Future<?> markFeedSeen(final long feedId) {
+ public static Future<?> removeFeedNewFlag(final long feedId) {
return dbExec.submit(() -> {
final PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
@@ -729,7 +724,7 @@ public class DBWriter {
/**
* Sets the 'read'-attribute of all NEW FeedItems to UNPLAYED.
*/
- public static Future<?> markNewItemsSeen() {
+ public static Future<?> removeAllNewFlags() {
return dbExec.submit(() -> {
final PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
@@ -855,44 +850,6 @@ public class DBWriter {
}
/**
- * Saves the FlattrStatus of a FeedItem object in the database.
- *
- * @param startFlattrClickWorker true if FlattrClickWorker should be started after the FlattrStatus has been saved
- */
- private static Future<?> setFeedItemFlattrStatus(final Context context,
- final FeedItem item,
- final boolean startFlattrClickWorker) {
- return dbExec.submit(() -> {
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- adapter.setFeedItemFlattrStatus(item);
- adapter.close();
- if (startFlattrClickWorker) {
- new FlattrClickWorker(context).executeAsync();
- }
- });
- }
-
- /**
- * Saves the FlattrStatus of a Feed object in the database.
- *
- * @param startFlattrClickWorker true if FlattrClickWorker should be started after the FlattrStatus has been saved
- */
- private static Future<?> setFeedFlattrStatus(final Context context,
- final Feed feed,
- final boolean startFlattrClickWorker) {
- return dbExec.submit(() -> {
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- adapter.setFeedFlattrStatus(feed);
- adapter.close();
- if (startFlattrClickWorker) {
- new FlattrClickWorker(context).executeAsync();
- }
- });
- }
-
- /**
* Saves if a feed's last update failed
*
* @param lastUpdateFailed true if last update failed
@@ -917,77 +874,6 @@ public class DBWriter {
});
}
-
- /**
- * format an url for querying the database
- * (postfix a / and apply percent-encoding)
- */
- private static String formatURIForQuery(String uri) {
- try {
- return URLEncoder.encode(uri.endsWith("/") ? uri.substring(0, uri.length() - 1) : uri, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- Log.e(TAG, e.getMessage());
- return "";
- }
- }
-
-
- /**
- * Set flattr status of the passed thing (either a FeedItem or a Feed)
- *
- * @param context
- * @param thing
- * @param startFlattrClickWorker true if FlattrClickWorker should be started after the FlattrStatus has been saved
- * @return
- */
- public static Future<?> setFlattredStatus(Context context, FlattrThing thing, boolean startFlattrClickWorker) {
- // must propagate this to back db
- if (thing instanceof FeedItem) {
- return setFeedItemFlattrStatus(context, (FeedItem) thing, startFlattrClickWorker);
- } else if (thing instanceof Feed) {
- return setFeedFlattrStatus(context, (Feed) thing, startFlattrClickWorker);
- } else if (thing instanceof SimpleFlattrThing) {
- // SimpleFlattrThings are generated on the fly and do not have DB backing
- } else {
- Log.e(TAG, "flattrQueue processing - thing is neither FeedItem nor Feed nor SimpleFlattrThing");
- }
-
- return null;
- }
-
- /**
- * Reset flattr status to unflattrd for all items
- */
- public static Future<?> clearAllFlattrStatus() {
- Log.d(TAG, "clearAllFlattrStatus()");
- return dbExec.submit(() -> {
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- adapter.clearAllFlattrStatus();
- adapter.close();
- });
- }
-
- /**
- * Set flattr status of the feeds/feeditems in flattrList to flattred at the given timestamp,
- * where the information has been retrieved from the flattr API
- */
- public static Future<?> setFlattredStatus(final List<Flattr> flattrList) {
- Log.d(TAG, "setFlattredStatus to status retrieved from flattr api running with " + flattrList.size() + " items");
- // clear flattr status in db
- clearAllFlattrStatus();
-
- // submit list with flattred things having normalized URLs to db
- return dbExec.submit(() -> {
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- for (Flattr flattr : flattrList) {
- adapter.setItemFlattrStatus(formatURIForQuery(flattr.getThing().getUrl()), new FlattrStatus(flattr.getCreated().getTime()));
- }
- adapter.close();
- });
- }
-
/**
* Sort the FeedItems in the queue with the given Permutor.
*
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
index 405c246c9..f7956372b 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
@@ -38,7 +38,6 @@ import de.danoeh.antennapod.core.feed.FeedPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.download.DownloadStatus;
import de.danoeh.antennapod.core.util.LongIntMap;
-import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
import org.greenrobot.eventbus.EventBus;
// TODO Remove media column from feeditem table
@@ -96,7 +95,6 @@ public class PodDBAdapter {
public static final String KEY_HAS_CHAPTERS = "has_simple_chapters";
public static final String KEY_TYPE = "type";
public static final String KEY_ITEM_IDENTIFIER = "item_identifier";
- public static final String KEY_FLATTR_STATUS = "flattr_status";
public static final String KEY_FEED_IDENTIFIER = "feed_identifier";
public static final String KEY_REASON_DETAILED = "reason_detailed";
public static final String KEY_DOWNLOADSTATUS_TITLE = "title";
@@ -139,7 +137,6 @@ public class PodDBAdapter {
+ KEY_LASTUPDATE + " TEXT," + KEY_LANGUAGE + " TEXT," + KEY_AUTHOR
+ " TEXT," + KEY_IMAGE_URL + " TEXT," + KEY_TYPE + " TEXT,"
+ KEY_FEED_IDENTIFIER + " TEXT," + KEY_AUTO_DOWNLOAD + " INTEGER DEFAULT 1,"
- + KEY_FLATTR_STATUS + " INTEGER,"
+ KEY_USERNAME + " TEXT,"
+ KEY_PASSWORD + " TEXT,"
+ KEY_INCLUDE_FILTER + " TEXT DEFAULT '',"
@@ -158,7 +155,6 @@ public class PodDBAdapter {
+ KEY_DESCRIPTION + " TEXT," + KEY_PAYMENT_LINK + " TEXT,"
+ KEY_MEDIA + " INTEGER," + KEY_FEED + " INTEGER,"
+ KEY_HAS_CHAPTERS + " INTEGER," + KEY_ITEM_IDENTIFIER + " TEXT,"
- + KEY_FLATTR_STATUS + " INTEGER,"
+ KEY_IMAGE_URL + " TEXT,"
+ KEY_AUTO_DOWNLOAD + " INTEGER)";
@@ -239,7 +235,6 @@ public class PodDBAdapter {
TABLE_NAME_FEEDS + "." + KEY_FEED_IDENTIFIER,
TABLE_NAME_FEEDS + "." + KEY_AUTO_DOWNLOAD,
TABLE_NAME_FEEDS + "." + KEY_KEEP_UPDATED,
- TABLE_NAME_FEEDS + "." + KEY_FLATTR_STATUS,
TABLE_NAME_FEEDS + "." + KEY_IS_PAGED,
TABLE_NAME_FEEDS + "." + KEY_NEXT_PAGE_LINK,
TABLE_NAME_FEEDS + "." + KEY_USERNAME,
@@ -266,7 +261,6 @@ public class PodDBAdapter {
TABLE_NAME_FEED_ITEMS + "." + KEY_FEED,
TABLE_NAME_FEED_ITEMS + "." + KEY_HAS_CHAPTERS,
TABLE_NAME_FEED_ITEMS + "." + KEY_ITEM_IDENTIFIER,
- TABLE_NAME_FEED_ITEMS + "." + KEY_FLATTR_STATUS,
TABLE_NAME_FEED_ITEMS + "." + KEY_IMAGE_URL,
TABLE_NAME_FEED_ITEMS + "." + KEY_AUTO_DOWNLOAD
};
@@ -382,9 +376,6 @@ public class PodDBAdapter {
values.put(KEY_TYPE, feed.getType());
values.put(KEY_FEED_IDENTIFIER, feed.getFeedIdentifier());
- Log.d(TAG, "Setting feed with flattr status " + feed.getTitle() + ": " + feed.getFlattrStatus().toLong());
-
- values.put(KEY_FLATTR_STATUS, feed.getFlattrStatus().toLong());
values.put(KEY_IS_PAGED, feed.isPaged());
values.put(KEY_NEXT_PAGE_LINK, feed.getNextPageLink());
if (feed.getItemFilter() != null && feed.getItemFilter().getValues().length > 0) {
@@ -516,31 +507,6 @@ public class PodDBAdapter {
}
/**
- * Update the flattr status of a feed
- */
- public void setFeedFlattrStatus(Feed feed) {
- ContentValues values = new ContentValues();
- values.put(KEY_FLATTR_STATUS, feed.getFlattrStatus().toLong());
- db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(feed.getId())});
- }
-
- /**
- * Get all feeds in the flattr queue.
- */
- public Cursor getFeedsInFlattrQueueCursor() {
- return db.query(TABLE_NAME_FEEDS, FEED_SEL_STD, KEY_FLATTR_STATUS + "=?",
- new String[]{String.valueOf(FlattrStatus.STATUS_QUEUE)}, null, null, null);
- }
-
- /**
- * Get all feed items in the flattr queue.
- */
- public Cursor getFeedItemsInFlattrQueueCursor() {
- return db.query(TABLE_NAME_FEED_ITEMS, FEEDITEM_SEL_FI_SMALL, KEY_FLATTR_STATUS + "=?",
- new String[]{String.valueOf(FlattrStatus.STATUS_QUEUE)}, null, null, null);
- }
-
- /**
* Updates the download URL of a Feed.
*/
public void setFeedDownloadUrl(String original, String updated) {
@@ -578,61 +544,6 @@ public class PodDBAdapter {
}
/**
- * Update the flattr status of a FeedItem
- */
- public void setFeedItemFlattrStatus(FeedItem feedItem) {
- ContentValues values = new ContentValues();
- values.put(KEY_FLATTR_STATUS, feedItem.getFlattrStatus().toLong());
- db.update(TABLE_NAME_FEED_ITEMS, values, KEY_ID + "=?", new String[]{String.valueOf(feedItem.getId())});
- }
-
- /**
- * Update the flattr status of a feed or feed item specified by its payment link
- * and the new flattr status to use
- */
- public void setItemFlattrStatus(String url, FlattrStatus status) {
- //Log.d(TAG, "setItemFlattrStatus(" + url + ") = " + status.toString());
- ContentValues values = new ContentValues();
- values.put(KEY_FLATTR_STATUS, status.toLong());
-
- // regexps in sqlite would be neat!
- String[] query_urls = new String[]{
- "*" + url + "&*",
- "*" + url + "%2F&*",
- "*" + url + "",
- "*" + url + "%2F"
- };
-
- if (db.update(TABLE_NAME_FEEDS, values,
- KEY_PAYMENT_LINK + " GLOB ?"
- + " OR " + KEY_PAYMENT_LINK + " GLOB ?"
- + " OR " + KEY_PAYMENT_LINK + " GLOB ?"
- + " OR " + KEY_PAYMENT_LINK + " GLOB ?", query_urls
- ) > 0) {
- Log.i(TAG, "setItemFlattrStatus found match for " + url + " = " + status.toLong() + " in Feeds table");
- return;
- }
- if (db.update(TABLE_NAME_FEED_ITEMS, values,
- KEY_PAYMENT_LINK + " GLOB ?"
- + " OR " + KEY_PAYMENT_LINK + " GLOB ?"
- + " OR " + KEY_PAYMENT_LINK + " GLOB ?"
- + " OR " + KEY_PAYMENT_LINK + " GLOB ?", query_urls
- ) > 0) {
- Log.i(TAG, "setItemFlattrStatus found match for " + url + " = " + status.toLong() + " in FeedsItems table");
- }
- }
-
- /**
- * Reset flattr status to unflattrd for all items
- */
- public void clearAllFlattrStatus() {
- ContentValues values = new ContentValues();
- values.put(KEY_FLATTR_STATUS, 0);
- db.update(TABLE_NAME_FEEDS, values, null, null);
- db.update(TABLE_NAME_FEED_ITEMS, values, null, null);
- }
-
- /**
* Inserts or updates a feeditem entry
*
* @param item The FeedItem
@@ -665,7 +576,6 @@ public class PodDBAdapter {
}
values.put(KEY_HAS_CHAPTERS, item.getChapters() != null || item.hasChapters());
values.put(KEY_ITEM_IDENTIFIER, item.getItemIdentifier());
- values.put(KEY_FLATTR_STATUS, item.getFlattrStatus().toLong());
values.put(KEY_AUTO_DOWNLOAD, item.getAutoDownload());
values.put(KEY_IMAGE_URL, item.getImageUrl());
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java
deleted file mode 100644
index d4d5843d2..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrServiceCreator.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package de.danoeh.antennapod.core.util.flattr;
-
-import android.util.Log;
-
-import org.shredzone.flattr4j.FlattrFactory;
-import org.shredzone.flattr4j.FlattrService;
-import org.shredzone.flattr4j.oauth.AccessToken;
-
-import de.danoeh.antennapod.core.BuildConfig;
-
-/** Ensures that only one instance of the FlattrService class exists at a time */
-
-class FlattrServiceCreator {
- private FlattrServiceCreator(){}
-
- public static final String TAG = "FlattrServiceCreator";
-
- private static volatile FlattrService flattrService;
-
- public static synchronized FlattrService getService(AccessToken token) {
- if (flattrService == null) {
- flattrService = FlattrFactory.getInstance().createFlattrService(token);
- }
- return flattrService;
- }
-
- public static synchronized void deleteFlattrService() {
- if (BuildConfig.DEBUG) Log.d(TAG, "Deleting service instance");
- flattrService = null;
- }
-}
-
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java
deleted file mode 100644
index 40a9fc7d5..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrStatus.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package de.danoeh.antennapod.core.util.flattr;
-
-import java.util.Calendar;
-
-public class FlattrStatus {
- private static final int STATUS_UNFLATTERED = 0;
- public static final int STATUS_QUEUE = 1;
- private static final int STATUS_FLATTRED = 2;
-
- private int status = STATUS_UNFLATTERED;
- private Calendar lastFlattred;
-
- public FlattrStatus() {
- status = STATUS_UNFLATTERED;
- lastFlattred = Calendar.getInstance();
- }
-
- public FlattrStatus(long status) {
- lastFlattred = Calendar.getInstance();
- fromLong(status);
- }
-
- public void setFlattred() {
- status = STATUS_FLATTRED;
- lastFlattred = Calendar.getInstance();
- }
-
- public void setUnflattred() {
- status = STATUS_UNFLATTERED;
- }
-
- public boolean getUnflattred() {
- return status == STATUS_UNFLATTERED;
- }
-
- public void setFlattrQueue() {
- if (flattrable())
- status = STATUS_QUEUE;
- }
-
- private void fromLong(long status) {
- if (status == STATUS_UNFLATTERED || status == STATUS_QUEUE)
- this.status = (int) status;
- else {
- this.status = STATUS_FLATTRED;
- lastFlattred.setTimeInMillis(status);
- }
- }
-
- public long toLong() {
- if (status == STATUS_UNFLATTERED || status == STATUS_QUEUE)
- return status;
- else {
- return lastFlattred.getTimeInMillis();
- }
- }
-
- public boolean flattrable() {
- Calendar firstOfMonth = Calendar.getInstance();
- firstOfMonth.set(Calendar.DAY_OF_MONTH, Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH));
-
- return (status == STATUS_UNFLATTERED) || (status == STATUS_FLATTRED && firstOfMonth.after(lastFlattred) );
- }
-
- public boolean getFlattrQueue() {
- return status == STATUS_QUEUE;
- }
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java
deleted file mode 100644
index d5bb88771..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrThing.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.danoeh.antennapod.core.util.flattr;
-
-public interface FlattrThing {
- String getTitle();
- String getPaymentLink();
- FlattrStatus getFlattrStatus();
-}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java
deleted file mode 100644
index 919fc82f2..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/FlattrUtils.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package de.danoeh.antennapod.core.util.flattr;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.net.Uri;
-import android.preference.PreferenceManager;
-import android.support.v7.app.AlertDialog;
-import android.text.TextUtils;
-import android.util.Log;
-
-import org.shredzone.flattr4j.FlattrService;
-import org.shredzone.flattr4j.exception.FlattrException;
-import org.shredzone.flattr4j.model.Flattr;
-import org.shredzone.flattr4j.model.Thing;
-import org.shredzone.flattr4j.oauth.AccessToken;
-import org.shredzone.flattr4j.oauth.AndroidAuthenticator;
-import org.shredzone.flattr4j.oauth.Scope;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.TimeZone;
-
-import de.danoeh.antennapod.core.ClientConfig;
-import de.danoeh.antennapod.core.R;
-import de.danoeh.antennapod.core.asynctask.FlattrTokenFetcher;
-import de.danoeh.antennapod.core.storage.DBWriter;
-
-/**
- * Utility methods for doing something with flattr.
- */
-
-public class FlattrUtils {
- private FlattrUtils(){}
-
- private static final String TAG = "FlattrUtils";
-
- private static final String HOST_NAME = "de.danoeh.antennapod";
-
- private static final String PREF_ACCESS_TOKEN = "de.danoeh.antennapod.preference.flattrAccessToken";
-
- private static volatile AccessToken cachedToken;
-
- private static AndroidAuthenticator createAuthenticator() {
- return new AndroidAuthenticator(HOST_NAME, ClientConfig.flattrCallbacks.getFlattrAppKey(),
- ClientConfig.flattrCallbacks.getFlattrAppSecret());
- }
-
- public static void startAuthProcess(Context context) throws FlattrException {
- AndroidAuthenticator auth = createAuthenticator();
- auth.setScope(EnumSet.of(Scope.FLATTR));
- Intent intent = auth.createAuthenticateIntent();
- context.startActivity(intent);
- }
-
- private static AccessToken retrieveToken() {
- if (cachedToken == null) {
- Log.d(TAG, "Retrieving access token");
- String token = PreferenceManager.getDefaultSharedPreferences(
- ClientConfig.applicationCallbacks.getApplicationInstance())
- .getString(PREF_ACCESS_TOKEN, null);
- if (token != null) {
- Log.d(TAG, "Found access token. Caching.");
- cachedToken = new AccessToken(token);
- } else {
- Log.d(TAG, "No access token found");
- return null;
- }
- }
- return cachedToken;
-
- }
-
- /**
- * Returns true if FLATTR_APP_KEY and FLATTR_APP_SECRET in BuildConfig are not null and not empty
- */
- public static boolean hasAPICredentials() {
- return !TextUtils.isEmpty(ClientConfig.flattrCallbacks.getFlattrAppKey())
- && !TextUtils.isEmpty(ClientConfig.flattrCallbacks.getFlattrAppSecret());
- }
-
- public static boolean hasToken() {
- return retrieveToken() != null;
- }
-
- public static void storeToken(AccessToken token) {
- Log.d(TAG, "Storing token");
- SharedPreferences.Editor editor = PreferenceManager
- .getDefaultSharedPreferences(ClientConfig.applicationCallbacks.getApplicationInstance()).edit();
- if (token != null) {
- editor.putString(PREF_ACCESS_TOKEN, token.getToken());
- } else {
- editor.putString(PREF_ACCESS_TOKEN, null);
- }
- editor.commit();
- cachedToken = token;
- }
-
- private static void deleteToken() {
- Log.d(TAG, "Deleting flattr token");
- storeToken(null);
- }
-
- public static void clickUrl(Context context, String url)
- throws FlattrException {
- if (hasToken()) {
- FlattrService fs = FlattrServiceCreator.getService(retrieveToken());
- fs.flattr(url);
- } else {
- Log.e(TAG, "clickUrl was called with null access token");
- }
- }
-
- public static List<Flattr> retrieveFlattredThings()
- throws FlattrException {
- ArrayList<Flattr> myFlattrs = new ArrayList<>();
-
- if (hasToken()) {
- FlattrService fs = FlattrServiceCreator.getService(retrieveToken());
-
- Calendar firstOfMonth = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
- firstOfMonth.set(Calendar.MILLISECOND, 0);
- firstOfMonth.set(Calendar.SECOND, 0);
- firstOfMonth.set(Calendar.MINUTE, 0);
- firstOfMonth.set(Calendar.HOUR_OF_DAY, 0);
- firstOfMonth.set(Calendar.DAY_OF_MONTH, Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH));
-
- Date firstOfMonthDate = firstOfMonth.getTime();
-
- // subscriptions some times get flattrd slightly before midnight - give it an hour leeway
- firstOfMonthDate = new Date(firstOfMonthDate.getTime() - 60 * 60 * 1000);
-
- final int FLATTR_COUNT = 30;
- final int FLATTR_MAXPAGE = 5;
-
- for (int page = 0; page < FLATTR_MAXPAGE; page++) {
- for (Flattr fl : fs.getMyFlattrs(FLATTR_COUNT, page)) {
- if (fl.getCreated().after(firstOfMonthDate))
- myFlattrs.add(fl);
- else
- break;
- }
- }
-
- Log.d(TAG, "Got my flattrs list of length " + Integer.toString(myFlattrs.size()) + " comparison date" + firstOfMonthDate);
- for (Flattr fl : myFlattrs) {
- Thing thing = fl.getThing();
- Log.d(TAG, "Flattr thing: " + fl.getThingId() + " name: " + thing.getTitle() + " url: " + thing.getUrl() + " on: " + fl.getCreated());
- }
- } else {
- Log.e(TAG, "retrieveFlattrdThings was called with null access token");
- }
-
- return myFlattrs;
- }
-
- public static void handleCallback(Context context, Uri uri) {
- AndroidAuthenticator auth = createAuthenticator();
- new FlattrTokenFetcher(context, auth, uri).executeAsync();
- }
-
- public static void revokeAccessToken(Context context) {
- Log.d(TAG, "Revoking access token");
- deleteToken();
- FlattrServiceCreator.deleteFlattrService();
- showRevokeDialog(context);
- DBWriter.clearAllFlattrStatus();
- }
-
- // ------------------------------------------------ DIALOGS
-
- private static void showRevokeDialog(final Context context) {
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.access_revoked_title);
- builder.setMessage(R.string.access_revoked_info);
- builder.setNeutralButton(android.R.string.ok, (dialog, which) -> dialog.cancel());
- builder.create().show();
- }
-
- /**
- * Opens a dialog that ask the user to either connect the app with flattr or to be redirected to
- * the thing's website.
- * If no API credentials are available, the user will immediately be redirected to the thing's website.
- */
- public static void showNoTokenDialogOrRedirect(final Context context, final String url) {
- if (hasAPICredentials()) {
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.no_flattr_token_title);
- builder.setMessage(R.string.no_flattr_token_msg);
- builder.setPositiveButton(R.string.authenticate_now_label,
- (dialog, which) -> context.startActivity(
- ClientConfig.flattrCallbacks.getFlattrAuthenticationActivityIntent(context))
- );
-
- builder.setNegativeButton(R.string.visit_website_label,
- (dialog, which) -> {
- Uri uri = Uri.parse(url);
- context.startActivity(new Intent(Intent.ACTION_VIEW,
- uri));
- }
- );
- builder.create().show();
- } else {
- Uri uri = Uri.parse(url);
- context.startActivity(new Intent(Intent.ACTION_VIEW, uri));
- }
- }
-
- public static void showErrorDialog(final Context context, final String msg) {
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.error_label);
- builder.setMessage(msg);
- builder.setNeutralButton(android.R.string.ok, (dialog, which) -> dialog.cancel());
- builder.create().show();
- }
-
-} \ No newline at end of file
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java b/core/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java
deleted file mode 100644
index 43cd5f170..000000000
--- a/core/src/main/java/de/danoeh/antennapod/core/util/flattr/SimpleFlattrThing.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package de.danoeh.antennapod.core.util.flattr;
-
-/* SimpleFlattrThing is a trivial implementation of the FlattrThing interface */
-public class SimpleFlattrThing implements FlattrThing {
- public SimpleFlattrThing(String title, String url, FlattrStatus status)
- {
- this.title = title;
- this.url = url;
- this.status = status;
- }
-
- public String getTitle()
- {
- return this.title;
- }
-
- public String getPaymentLink()
- {
- return this.url;
- }
-
- public FlattrStatus getFlattrStatus()
- {
- return this.status;
- }
-
- private final String title;
- private final String url;
- private final FlattrStatus status;
-}
diff --git a/core/src/main/res/drawable/ic_bookmark_grey600_24dp.xml b/core/src/main/res/drawable/ic_bookmark_grey600_24dp.xml
new file mode 100644
index 000000000..d665d42a5
--- /dev/null
+++ b/core/src/main/res/drawable/ic_bookmark_grey600_24dp.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#b4b4b4"
+ android:viewportHeight="24.0" android:viewportWidth="24.0"
+ android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#FFb4b4b4" android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z"/>
+</vector>
diff --git a/core/src/main/res/drawable/ic_bookmark_white_24dp.xml b/core/src/main/res/drawable/ic_bookmark_white_24dp.xml
new file mode 100644
index 000000000..02728b731
--- /dev/null
+++ b/core/src/main/res/drawable/ic_bookmark_white_24dp.xml
@@ -0,0 +1,5 @@
+<vector android:height="24dp" android:tint="#FFFFFF"
+ android:viewportHeight="24.0" android:viewportWidth="24.0"
+ android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="#FFFFFFFF" android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z"/>
+</vector>
diff --git a/core/src/main/res/layout/player_widget.xml b/core/src/main/res/layout/player_widget.xml
index daf661002..f8d909a97 100644
--- a/core/src/main/res/layout/player_widget.xml
+++ b/core/src/main/res/layout/player_widget.xml
@@ -15,6 +15,7 @@
android:layout_width="@android:dimen/app_icon_size"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
android:layout_margin="12dp"
android:background="@drawable/borderless_button_dark"
android:src="@drawable/ic_play_arrow_white_24dp" />
@@ -24,7 +25,9 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_toLeftOf="@id/butPlay"
+ android:layout_toStartOf="@id/butPlay"
android:background="@drawable/borderless_button_dark"
android:gravity="fill_horizontal"
android:orientation="horizontal" >
@@ -33,15 +36,12 @@
android:id="@+id/imgvCover"
android:layout_width="@android:dimen/app_icon_size"
android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
- android:layout_margin="12dp"
- android:layout_toLeftOf="@id/layout_center" />
+ android:layout_margin="12dp" />
<LinearLayout
android:id="@+id/layout_center"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignParentRight="true"
android:gravity="center_vertical"
android:orientation="vertical" >
@@ -49,7 +49,6 @@
android:id="@+id/txtNoPlaying"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginVertical="12dp"
android:maxLines="3"
android:text="@string/no_media_playing_label"
android:textColor="@color/white"
@@ -60,7 +59,6 @@
android:id="@+id/txtvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginVertical="8dp"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="@dimen/text_size_medium"
@@ -71,7 +69,7 @@
android:id="@+id/txtvProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginVertical="8dp"
+ android:layout_marginTop="4dp"
android:textColor="@color/white"
android:visibility="gone" />
</LinearLayout>
diff --git a/core/src/main/res/values-ar/strings.xml b/core/src/main/res/values-ar/strings.xml
index 5c29b5119..0e29db095 100644
--- a/core/src/main/res/values-ar/strings.xml
+++ b/core/src/main/res/values-ar/strings.xml
@@ -76,7 +76,7 @@
<!--'Add Feed' Activity labels-->
<!--Actions on feeds-->
<string name="mark_all_read_label">تعليمه ك تم تشغيله</string>
- <string name="mark_all_seen_label">تعليمه ك تم مشاهدته</string>
+ <string name="remove_all_new_flags_label">تعليمه ك تم مشاهدته</string>
<string name="show_info_label">اظهار المعلومات</string>
<string name="share_label">مشاركة</string>
<string name="share_link_label">مشاركة الرابط</string>
diff --git a/core/src/main/res/values-b+ast/strings.xml b/core/src/main/res/values-b+ast/strings.xml
index 421896086..29c7e4d87 100644
--- a/core/src/main/res/values-b+ast/strings.xml
+++ b/core/src/main/res/values-b+ast/strings.xml
@@ -96,9 +96,9 @@
<string name="mark_all_read_msg">Conseñáronse tolos episodios como reproducíos</string>
<string name="mark_all_read_confirmation_msg">Confirma que quies conseñar tolos episodios como reproducíos, por favor.</string>
<string name="mark_all_read_feed_confirmation_msg">Confirma que quies conseñar tolos episodios nesti feed como reproducíos, por favor.</string>
- <string name="mark_all_seen_label">Conseñar too como visto</string>
- <string name="mark_all_seen_msg">Conseñáronse tolos episodios como vistos</string>
- <string name="mark_all_seen_confirmation_msg">Confirma que quies conseñar tolos episodios como vistos.</string>
+ <string name="remove_all_new_flags_label">Conseñar too como visto</string>
+ <string name="removed_all_new_flags_msg">Conseñáronse tolos episodios como vistos</string>
+ <string name="remove_all_new_flags_confirmation_msg">Confirma que quies conseñar tolos episodios como vistos.</string>
<string name="show_info_label">Amosar información</string>
<string name="rename_feed_label">Renomar podcast</string>
<string name="remove_feed_label">Desaniciar podcast</string>
@@ -126,7 +126,7 @@
<string name="remove_label">Desaniciar</string>
<string name="delete_label">Desaniciar</string>
<string name="remove_episode_lable">Desaniciar episodiu</string>
- <string name="marked_as_seen_label">Conseñóse como vistu</string>
+ <string name="removed_new_flag_label">Conseñóse como vistu</string>
<string name="mark_read_label">Conseñar como reproducíu</string>
<string name="marked_as_read_label">Conseñóse como reproducíu</string>
<string name="mark_unread_label">Conseñar como non reproducíu</string>
diff --git a/core/src/main/res/values-bg/strings.xml b/core/src/main/res/values-bg/strings.xml
index 19dc2a971..818db781f 100644
--- a/core/src/main/res/values-bg/strings.xml
+++ b/core/src/main/res/values-bg/strings.xml
@@ -70,9 +70,9 @@
<string name="mark_all_read_msg">Всички епизоди са маркирани като слушани</string>
<string name="mark_all_read_confirmation_msg">Моля, потвърдете, че искате да маркирате всички епизоди като слушани.</string>
<string name="mark_all_read_feed_confirmation_msg">Моля, потвърдете, че искате да маркирате всички епизоди в тази емисия като слушани.</string>
- <string name="mark_all_seen_label">Маркирай всички като прегледани</string>
- <string name="mark_all_seen_msg">Всички епизоди са маркирани като прегледани</string>
- <string name="mark_all_seen_confirmation_msg">Моля, потвърдете, че искате да маркирате всички епизоди като прегледани.</string>
+ <string name="remove_all_new_flags_label">Маркирай всички като прегледани</string>
+ <string name="removed_all_new_flags_msg">Всички епизоди са маркирани като прегледани</string>
+ <string name="remove_all_new_flags_confirmation_msg">Моля, потвърдете, че искате да маркирате всички епизоди като прегледани.</string>
<string name="show_info_label">Покажи информация</string>
<string name="rename_feed_label">Преименуване на подкаст</string>
<string name="remove_feed_label">Премахване на подкаст</string>
@@ -88,7 +88,7 @@
<string name="hide_not_downloaded_episodes_label">Неизтеглени</string>
<!--actions on feeditems-->
<string name="stream_label">Стрийм</string>
- <string name="marked_as_seen_label">Маркиран като прегледан</string>
+ <string name="removed_new_flag_label">Маркиран като прегледан</string>
<string name="mark_read_label">Маркирай като слушан</string>
<string name="marked_as_read_label">Маркиран като слушан</string>
<string name="mark_unread_label">Маркирай като неслушан</string>
diff --git a/core/src/main/res/values-ca/strings.xml b/core/src/main/res/values-ca/strings.xml
index 6983d140e..6cc1fa9c9 100644
--- a/core/src/main/res/values-ca/strings.xml
+++ b/core/src/main/res/values-ca/strings.xml
@@ -111,9 +111,9 @@
<string name="mark_all_read_msg">S\'han marcat tots els episodis com a llegits</string>
<string name="mark_all_read_confirmation_msg">Si us plau confirma que vols marcar tots els episodis com reproduits.</string>
<string name="mark_all_read_feed_confirmation_msg">Si us plau, confirmeu que voleu marcar tots els episodis d\'aquest podcast com a reproduïts.</string>
- <string name="mark_all_seen_label">Marca tot com a llegit</string>
- <string name="mark_all_seen_msg">Marcar tots episodis com a visualitzats</string>
- <string name="mark_all_seen_confirmation_msg">Si us plau confirma que vols marcar tots els episodis com vistos.</string>
+ <string name="remove_all_new_flags_label">Marca tot com a llegit</string>
+ <string name="removed_all_new_flags_msg">Marcar tots episodis com a visualitzats</string>
+ <string name="remove_all_new_flags_confirmation_msg">Si us plau confirma que vols marcar tots els episodis com vistos.</string>
<string name="show_info_label">Mostra informació</string>
<string name="show_feed_settings_label">Mostrar configuració del podcast</string>
<string name="feed_info_label">Informació del podcast</string>
@@ -153,8 +153,8 @@
<string name="remove_label">Suprimeix</string>
<string name="delete_label">Esborrar</string>
<string name="delete_failed">No s\'ha pogut esborrar el fitxer. Reiniciar el dispositiu pot ajudar.</string>
- <string name="mark_as_seen_label">Marcar com a visualitzat</string>
- <string name="marked_as_seen_label">Marcat com a vist</string>
+ <string name="remove_new_flag_label">Marcar com a visualitzat</string>
+ <string name="removed_new_flag_label">Marcat com a vist</string>
<string name="mark_read_label">Marca com a llegit</string>
<string name="marked_as_read_label">Marcats com llegits</string>
<string name="mark_unread_label">Marca com a pendent</string>
diff --git a/core/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml
index 390730abb..cb784ec6a 100644
--- a/core/src/main/res/values-cs-rCZ/strings.xml
+++ b/core/src/main/res/values-cs-rCZ/strings.xml
@@ -106,8 +106,8 @@
<string name="mark_all_read_label">Označit vše jako poslechnuté</string>
<string name="mark_all_read_msg">Všechny epizody označeny jako poslechnuté</string>
<string name="mark_all_read_confirmation_msg">Potvrďte prosím, že chcete označit všechny vybrané epizody jako poslechnuté.</string>
- <string name="mark_all_seen_label">Označit vše jako zobrazené</string>
- <string name="mark_all_seen_confirmation_msg">Potvrďte prosím, že chcete označit všechny epizody jako shlédnuté.</string>
+ <string name="remove_all_new_flags_label">Označit vše jako zobrazené</string>
+ <string name="remove_all_new_flags_confirmation_msg">Potvrďte prosím, že chcete označit všechny epizody jako shlédnuté.</string>
<string name="show_info_label">Informace o zdroji</string>
<string name="share_label">Sdílet</string>
<string name="share_feed_url_label">Sdílet URL kanálu</string>
@@ -131,7 +131,7 @@
<string name="stream_label">Vysílat</string>
<string name="remove_label">Odstranit</string>
<string name="delete_label">Smazat</string>
- <string name="marked_as_seen_label">Označit jako shlédnuté</string>
+ <string name="removed_new_flag_label">Označit jako shlédnuté</string>
<string name="mark_read_label">Označit jako poslechnuté</string>
<string name="marked_as_read_label">Označeno jako poslechnuté</string>
<string name="mark_unread_label">Označit jako neposlechnuté</string>
diff --git a/core/src/main/res/values-da/strings.xml b/core/src/main/res/values-da/strings.xml
index 565f53a6d..5420eb5c9 100644
--- a/core/src/main/res/values-da/strings.xml
+++ b/core/src/main/res/values-da/strings.xml
@@ -109,9 +109,9 @@
<string name="mark_all_read_label">Marker alle som afspillet</string>
<string name="mark_all_read_msg">Marker alle udsendelser som afspillet</string>
<string name="mark_all_read_confirmation_msg">Bekræft venligst at du ønsker at markere alle udsendelser som værende afspillet.</string>
- <string name="mark_all_seen_label">Marker alle som set</string>
- <string name="mark_all_seen_msg">Markeret alle udsendelser som set</string>
- <string name="mark_all_seen_confirmation_msg">Bekræft venligst at du ønsker at markere alle udsendelser som set.</string>
+ <string name="remove_all_new_flags_label">Marker alle som set</string>
+ <string name="removed_all_new_flags_msg">Markeret alle udsendelser som set</string>
+ <string name="remove_all_new_flags_confirmation_msg">Bekræft venligst at du ønsker at markere alle udsendelser som set.</string>
<string name="show_info_label">Vis information</string>
<string name="feed_info_label">Podcast-info</string>
<string name="rename_feed_label">Omdøb podcast</string>
@@ -148,8 +148,8 @@
<string name="remove_label">Fjern</string>
<string name="delete_label">Slet</string>
<string name="delete_failed">Kan ikke slette fil. En genstart af enheden vil sandsynligvis hjælpe.</string>
- <string name="mark_as_seen_label">Markér som set</string>
- <string name="marked_as_seen_label">Markeret som set</string>
+ <string name="remove_new_flag_label">Markér som set</string>
+ <string name="removed_new_flag_label">Markeret som set</string>
<string name="mark_read_label">Marker som læst</string>
<string name="marked_as_read_label">Markeret som afspillet</string>
<string name="mark_unread_label">Marker som uafspillet</string>
diff --git a/core/src/main/res/values-de/strings.xml b/core/src/main/res/values-de/strings.xml
index 7bc9368b5..a5ceaab57 100644
--- a/core/src/main/res/values-de/strings.xml
+++ b/core/src/main/res/values-de/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Alle Episoden als gespielt markiert</string>
<string name="mark_all_read_confirmation_msg">Bitte bestätige, dass alle Episoden als gespielt markiert werden sollen.</string>
<string name="mark_all_read_feed_confirmation_msg">Bitte bestätige, dass alle Episoden in diesem Feed als gespielt markiert werden sollen.</string>
- <string name="mark_all_seen_label">Alle als gesehen markieren</string>
- <string name="mark_all_seen_msg">Alle Episoden als gesehen markiert</string>
- <string name="mark_all_seen_confirmation_msg">Bitte bestätige, dass alle Episoden als gesehen markiert werden sollen.</string>
+ <string name="remove_all_new_flags_label">Alle als gesehen markieren</string>
+ <string name="removed_all_new_flags_msg">Alle Episoden als gesehen markiert</string>
+ <string name="remove_all_new_flags_confirmation_msg">Bitte bestätige, dass alle Episoden als gesehen markiert werden sollen.</string>
<string name="show_info_label">Informationen anzeigen</string>
<string name="show_feed_settings_label">Zeige Feed-Einstellungen</string>
<string name="feed_info_label">Feed-Informationen</string>
@@ -169,8 +169,8 @@
<item quantity="one">%d Episode gelöscht.</item>
<item quantity="other">%d Episoden gelöscht.</item>
</plurals>
- <string name="mark_as_seen_label">Als gelesen markieren</string>
- <string name="marked_as_seen_label">Als gesehen markiert</string>
+ <string name="remove_new_flag_label">Als gelesen markieren</string>
+ <string name="removed_new_flag_label">Als gesehen markiert</string>
<string name="mark_read_label">Als gespielt markieren</string>
<string name="marked_as_read_label">Als gespielt markiert</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-es-rES/strings.xml b/core/src/main/res/values-es-rES/strings.xml
index 024989498..199eefca7 100644
--- a/core/src/main/res/values-es-rES/strings.xml
+++ b/core/src/main/res/values-es-rES/strings.xml
@@ -75,7 +75,7 @@
<string name="browse_gpoddernet_label">Navegar gpodder.net</string>
<!--Actions on feeds-->
<string name="mark_all_read_label">Marcar todo como leído</string>
- <string name="mark_all_seen_label">Marcar todos como visto</string>
+ <string name="remove_all_new_flags_label">Marcar todos como visto</string>
<string name="show_info_label">Información del programa</string>
<string name="remove_feed_label">Eliminar podcast</string>
<string name="share_link_label">Compartir el enlace de la web</string>
diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml
index 69feafba7..1a60a20b0 100644
--- a/core/src/main/res/values-es/strings.xml
+++ b/core/src/main/res/values-es/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Marcados todos los episodios como reproducidos</string>
<string name="mark_all_read_confirmation_msg">Confirme que quiere marcar todos los episodios como reproducidos.</string>
<string name="mark_all_read_feed_confirmation_msg">Confirme que quiere marcar todos los episodios de este pódcast como reproducidos.</string>
- <string name="mark_all_seen_label">Marcar todos como vistos</string>
- <string name="mark_all_seen_msg">Marcados todos los episodios como vistos</string>
- <string name="mark_all_seen_confirmation_msg">Confirme que quiere marcar todos los episodios como vistos.</string>
+ <string name="remove_all_new_flags_label">Marcar todos como vistos</string>
+ <string name="removed_all_new_flags_msg">Marcados todos los episodios como vistos</string>
+ <string name="remove_all_new_flags_confirmation_msg">Confirme que quiere marcar todos los episodios como vistos.</string>
<string name="show_info_label">Información del programa</string>
<string name="show_feed_settings_label">Mostrar ajustes del pódcast</string>
<string name="feed_info_label">Información del pódcast</string>
@@ -169,8 +169,8 @@
<item quantity="one">%depisodio borrado.</item>
<item quantity="other">%depisodios borrados.</item>
</plurals>
- <string name="mark_as_seen_label">Marcar como visto</string>
- <string name="marked_as_seen_label">Marcado como visto</string>
+ <string name="remove_new_flag_label">Marcar como visto</string>
+ <string name="removed_new_flag_label">Marcado como visto</string>
<string name="mark_read_label">Marcar como reproducido</string>
<string name="marked_as_read_label">Marcado como reproducido</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-et/strings.xml b/core/src/main/res/values-et/strings.xml
index 99e61a5fa..44c9f749b 100644
--- a/core/src/main/res/values-et/strings.xml
+++ b/core/src/main/res/values-et/strings.xml
@@ -91,7 +91,7 @@
<!--Actions on feeds-->
<string name="mark_all_read_label">Märgi kuulatuks</string>
<string name="mark_all_read_msg">Märgi kõik saated esitatuks</string>
- <string name="mark_all_seen_label">Märgi kõik nähtuks</string>
+ <string name="remove_all_new_flags_label">Märgi kõik nähtuks</string>
<string name="show_info_label">Näita infot</string>
<string name="share_label">Jaga...</string>
<string name="share_file_label">Jaga faili</string>
@@ -116,7 +116,7 @@
<string name="stream_label">Voogedastusena</string>
<string name="remove_label">Eemalda</string>
<string name="delete_label">Kustuta</string>
- <string name="marked_as_seen_label">Märgitud nähtuks</string>
+ <string name="removed_new_flag_label">Märgitud nähtuks</string>
<string name="mark_read_label">Märgi esitatuks</string>
<string name="marked_as_read_label">Märgitud kuulatuks</string>
<string name="mark_unread_label">Märgitud kui kuulamata</string>
diff --git a/core/src/main/res/values-fa/strings.xml b/core/src/main/res/values-fa/strings.xml
index dc6e7cb2e..bc530d4de 100644
--- a/core/src/main/res/values-fa/strings.xml
+++ b/core/src/main/res/values-fa/strings.xml
@@ -108,8 +108,8 @@
<string name="mark_all_read_label">علامت گذاری همه به عنوان پخش شده</string>
<string name="mark_all_read_msg">همه قسمت‌ها به عنوان پخش شده علامت‌گذاری شد</string>
<string name="mark_all_read_confirmation_msg">لطفا تأیید کنید که می‌خواهید تمام قسمت‌ها را به عنوان پخش شده علامت بزنید.</string>
- <string name="mark_all_seen_label">علامت گذاری همه به عنوان دیده شده</string>
- <string name="mark_all_seen_confirmation_msg">لطفا تأیید کنید که می‌خواهید تمام قسمت‌ها را به عنوان دیده شده علامت بزنید.</string>
+ <string name="remove_all_new_flags_label">علامت گذاری همه به عنوان دیده شده</string>
+ <string name="remove_all_new_flags_confirmation_msg">لطفا تأیید کنید که می‌خواهید تمام قسمت‌ها را به عنوان دیده شده علامت بزنید.</string>
<string name="show_info_label">نمایش اطلاعات</string>
<string name="show_feed_settings_label">نمایش تنظیمات پادکست</string>
<string name="feed_info_label">اطلاعات پادکست</string>
@@ -145,7 +145,7 @@
<string name="delete_label">حذف</string>
<string name="delete_failed">فایل حذف نشد.! راه اندازی مجدد دستگاه می تواند کمک کند.</string>
<string name="remove_episode_lable">پاک کردن قسمت</string>
- <string name="marked_as_seen_label">علامت گذاری به عنوان دیده شده</string>
+ <string name="removed_new_flag_label">علامت گذاری به عنوان دیده شده</string>
<string name="mark_read_label">علامت گذاری به عنوان پخش شده</string>
<string name="marked_as_read_label">بعنوان پخش شده علامت گذاری شد</string>
<string name="mark_unread_label">علامت گذاری به عنوان پخش نشده</string>
diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml
index 42fe07f68..00ecc8ad3 100644
--- a/core/src/main/res/values-fr/strings.xml
+++ b/core/src/main/res/values-fr/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Tous les épisodes ont été marqués comme lus</string>
<string name="mark_all_read_confirmation_msg">Confirmer le marquage de tous les épisode comme lus</string>
<string name="mark_all_read_feed_confirmation_msg">Confirmer le marquage de tous les épisodes de ce podcast comme lus</string>
- <string name="mark_all_seen_label">Marquer tous les épisodes comme vus</string>
- <string name="mark_all_seen_msg">Tous les épisodes ont été marqués vus</string>
- <string name="mark_all_seen_confirmation_msg">Merci de confirmer que vous voulez marquer tous les épisodes comme vus.</string>
+ <string name="remove_all_new_flags_label">Marquer tous les épisodes comme vus</string>
+ <string name="removed_all_new_flags_msg">Tous les épisodes ont été marqués vus</string>
+ <string name="remove_all_new_flags_confirmation_msg">Merci de confirmer que vous voulez marquer tous les épisodes comme vus.</string>
<string name="show_info_label">Voir les détails</string>
<string name="show_feed_settings_label">Paramètres du podcast...</string>
<string name="feed_info_label">Infos du podcast</string>
@@ -169,8 +169,8 @@
<item quantity="one">%d épisode supprimé.</item>
<item quantity="other">%d épisodes supprimés.</item>
</plurals>
- <string name="mark_as_seen_label">Marquer comme vu</string>
- <string name="marked_as_seen_label">Marqué comme vu</string>
+ <string name="remove_new_flag_label">Marquer comme vu</string>
+ <string name="removed_new_flag_label">Marqué comme vu</string>
<string name="mark_read_label">Marquer comme lu</string>
<string name="marked_as_read_label">Les épisodes ont été marqués comme lus</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-gl-rES/strings.xml b/core/src/main/res/values-gl-rES/strings.xml
index 369d39d4c..9897ec272 100644
--- a/core/src/main/res/values-gl-rES/strings.xml
+++ b/core/src/main/res/values-gl-rES/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Marcáronse todos como reproducidos</string>
<string name="mark_all_read_confirmation_msg">Por favor confirme que quere marcar todos os episodios como reproducidos.</string>
<string name="mark_all_read_feed_confirmation_msg">Por favor, confirme que quere marcar todos os episodios deste podcast como reproducidos.</string>
- <string name="mark_all_seen_label">Marcar como visto</string>
- <string name="mark_all_seen_msg">Marcáronse todos os episodios como vistos</string>
- <string name="mark_all_seen_confirmation_msg">Por favor confirme que quere marcar todos os episodios como vistos.</string>
+ <string name="remove_all_new_flags_label">Marcar como visto</string>
+ <string name="removed_all_new_flags_msg">Marcáronse todos os episodios como vistos</string>
+ <string name="remove_all_new_flags_confirmation_msg">Por favor confirme que quere marcar todos os episodios como vistos.</string>
<string name="show_info_label">Mostrar información</string>
<string name="show_feed_settings_label">Mostrar axustes do podcast</string>
<string name="feed_info_label">Información do podcast</string>
@@ -169,8 +169,8 @@
<item quantity="one">%d episodio eliminado.</item>
<item quantity="other">%d episodios eliminados.</item>
</plurals>
- <string name="mark_as_seen_label">Marcar como visto</string>
- <string name="marked_as_seen_label">Marcar como visto</string>
+ <string name="remove_new_flag_label">Marcar como visto</string>
+ <string name="removed_new_flag_label">Marcar como visto</string>
<string name="mark_read_label">Marcar como reproducido</string>
<string name="marked_as_read_label">Marcado como reproducido</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-h768dp/dimens.xml b/core/src/main/res/values-h768dp/dimens.xml
new file mode 100644
index 000000000..fd744e422
--- /dev/null
+++ b/core/src/main/res/values-h768dp/dimens.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <dimen name="scrubber_vertical_padding">12dp</dimen>
+</resources> \ No newline at end of file
diff --git a/core/src/main/res/values-hi-rIN/strings.xml b/core/src/main/res/values-hi-rIN/strings.xml
index 17a26e125..3b59e0481 100644
--- a/core/src/main/res/values-hi-rIN/strings.xml
+++ b/core/src/main/res/values-hi-rIN/strings.xml
@@ -144,8 +144,8 @@
<string name="remove_label"> हटाएँ</string>
<string name="delete_label">डिलीट</string>
<string name="delete_failed">फ़ाइल डिलीट करने में असमर्थ। डिवाइस को रिबूट करने से मदद मिल सकती है।</string>
- <string name="mark_as_seen_label">देखा गया के रूप में चिह्नित करें</string>
- <string name="marked_as_seen_label">देखा गया के रूप में चिह्नित किया गया</string>
+ <string name="remove_new_flag_label">देखा गया के रूप में चिह्नित करें</string>
+ <string name="removed_new_flag_label">देखा गया के रूप में चिह्नित किया गया</string>
<string name="mark_read_label">चलाया गया के रूप में चिह्नित करें</string>
<string name="marked_as_read_label">चलाया गया के रूप में चिह्नित किया गया</string>
<string name="mark_unread_label">नही चलाया गया के रूप में चिह्नित करें</string>
diff --git a/core/src/main/res/values-hu/strings.xml b/core/src/main/res/values-hu/strings.xml
index 7c252a0db..2d848b1cb 100644
--- a/core/src/main/res/values-hu/strings.xml
+++ b/core/src/main/res/values-hu/strings.xml
@@ -105,8 +105,8 @@
<string name="mark_all_read_label">Az összes megjelölése lejátszottként</string>
<string name="mark_all_read_msg">Az összes epizód lejátszottként megjelölve</string>
<string name="mark_all_read_confirmation_msg">Biztosan megjelölöd az összes epizódot lejátszottként?</string>
- <string name="mark_all_seen_label">Az összes megjelölése megnézettként</string>
- <string name="mark_all_seen_confirmation_msg">Biztosan megjelölöd az összes epizódott megnézettként?</string>
+ <string name="remove_all_new_flags_label">Az összes megjelölése megnézettként</string>
+ <string name="remove_all_new_flags_confirmation_msg">Biztosan megjelölöd az összes epizódott megnézettként?</string>
<string name="show_info_label">Információ mutatása</string>
<string name="feed_settings_label">Podcast beállítások</string>
<string name="share_label">Megosztás…</string>
@@ -132,7 +132,7 @@
<string name="stream_label">Stream-elés</string>
<string name="remove_label">Eltávolítás</string>
<string name="delete_label">Törlés</string>
- <string name="marked_as_seen_label">Megtekintettként megjelölve</string>
+ <string name="removed_new_flag_label">Megtekintettként megjelölve</string>
<string name="mark_read_label">Jelölés játszottnak</string>
<string name="marked_as_read_label">Lejátszottként megjelölve</string>
<string name="mark_unread_label">Jelölés nem játszottnak</string>
diff --git a/core/src/main/res/values-id/strings.xml b/core/src/main/res/values-id/strings.xml
index 62254518d..2f1ffecea 100644
--- a/core/src/main/res/values-id/strings.xml
+++ b/core/src/main/res/values-id/strings.xml
@@ -43,7 +43,7 @@
<!--Actions on feeds-->
<string name="mark_all_read_label">Tandai semua diputar</string>
<string name="mark_all_read_msg">Tandai semua Kisah diputar</string>
- <string name="mark_all_seen_label">Tandai semua dilihat</string>
+ <string name="remove_all_new_flags_label">Tandai semua dilihat</string>
<string name="remove_feed_label">Hapus Podcast</string>
<string name="share_label">Bagikan...</string>
<string name="share_link_label">Bagikan Tautan</string>
diff --git a/core/src/main/res/values-it/strings.xml b/core/src/main/res/values-it/strings.xml
index 31f252d3e..d1e1b596f 100644
--- a/core/src/main/res/values-it/strings.xml
+++ b/core/src/main/res/values-it/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Segnati tutti gli episodi come riprodotti</string>
<string name="mark_all_read_confirmation_msg">Conferma che desideri segnare tutti gli episodi come riprodotti.</string>
<string name="mark_all_read_feed_confirmation_msg">Conferma che desideri segnare come riprodotti tutti gli episodi del podcast.</string>
- <string name="mark_all_seen_label">Segna tutti come visti</string>
- <string name="mark_all_seen_msg">Segna tutti gli episodi come visti</string>
- <string name="mark_all_seen_confirmation_msg">Conferma che desideri segnare tutti gli episodi come visti.</string>
+ <string name="remove_all_new_flags_label">Segna tutti come visti</string>
+ <string name="removed_all_new_flags_msg">Segna tutti gli episodi come visti</string>
+ <string name="remove_all_new_flags_confirmation_msg">Conferma che desideri segnare tutti gli episodi come visti.</string>
<string name="show_info_label">Informazioni</string>
<string name="show_feed_settings_label">Mostra impostazioni podcast</string>
<string name="feed_info_label">Info podcast</string>
@@ -169,8 +169,8 @@
<item quantity="one">%d episodio eliminato.</item>
<item quantity="other">%d episodi eliminati.</item>
</plurals>
- <string name="mark_as_seen_label">Segna come visto</string>
- <string name="marked_as_seen_label">Segna come visto</string>
+ <string name="remove_new_flag_label">Segna come visto</string>
+ <string name="removed_new_flag_label">Segna come visto</string>
<string name="mark_read_label">Segna come riprodotto</string>
<string name="marked_as_read_label">Segnato come riprodotto</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml
index e9d14b899..d73fdd015 100644
--- a/core/src/main/res/values-iw-rIL/strings.xml
+++ b/core/src/main/res/values-iw-rIL/strings.xml
@@ -120,9 +120,9 @@
<string name="mark_all_read_msg">לסמן את כל הפרקים כנוגנו</string>
<string name="mark_all_read_confirmation_msg">נא לאשר שברצונך לסמן את כל הפרקים כנוגנו.</string>
<string name="mark_all_read_feed_confirmation_msg">נא לאשר שברצונך לסמן את הפרקים של הפודקאסט הזה כאילו כבר נוגנו.</string>
- <string name="mark_all_seen_label">לסמן הכול כנצפו</string>
- <string name="mark_all_seen_msg">כל הפרקים סומנו כאילו כבר נוגנו</string>
- <string name="mark_all_seen_confirmation_msg">נא לאשר שברצונך לסמן את כל הפרקים כנצפו.</string>
+ <string name="remove_all_new_flags_label">לסמן הכול כנצפו</string>
+ <string name="removed_all_new_flags_msg">כל הפרקים סומנו כאילו כבר נוגנו</string>
+ <string name="remove_all_new_flags_confirmation_msg">נא לאשר שברצונך לסמן את כל הפרקים כנצפו.</string>
<string name="show_info_label">הצגת מידע</string>
<string name="show_feed_settings_label">הצגת הגדרות פודקאסט</string>
<string name="feed_info_label">פרטי פודקאסט</string>
@@ -177,8 +177,8 @@
<item quantity="many">%d פרקים נמחקו.</item>
<item quantity="other">%d פרקים נמחקו.</item>
</plurals>
- <string name="mark_as_seen_label">עם סימון כנצפה</string>
- <string name="marked_as_seen_label">סימון כנצפה</string>
+ <string name="remove_new_flag_label">עם סימון כנצפה</string>
+ <string name="removed_new_flag_label">סימון כנצפה</string>
<string name="mark_read_label">סימון כנצפה</string>
<string name="marked_as_read_label">סימון כנוגן</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-ja/strings.xml b/core/src/main/res/values-ja/strings.xml
index f749de958..0818b7044 100644
--- a/core/src/main/res/values-ja/strings.xml
+++ b/core/src/main/res/values-ja/strings.xml
@@ -114,9 +114,9 @@
<string name="mark_all_read_msg">すべてのエピソードを再生済にしました</string>
<string name="mark_all_read_confirmation_msg">再生済としてマークするすべてのエピソードを確認してください。</string>
<string name="mark_all_read_feed_confirmation_msg">再生済としてマークするこのポッドキャストのすべてのエピソードを確認してください。</string>
- <string name="mark_all_seen_label">すべて参照済としてマーク</string>
- <string name="mark_all_seen_msg">すべてのエピソードを参照済にしました</string>
- <string name="mark_all_seen_confirmation_msg">参照済としてマークするすべてのエピソードを確認してください。</string>
+ <string name="remove_all_new_flags_label">すべて参照済としてマーク</string>
+ <string name="removed_all_new_flags_msg">すべてのエピソードを参照済にしました</string>
+ <string name="remove_all_new_flags_confirmation_msg">参照済としてマークするすべてのエピソードを確認してください。</string>
<string name="show_info_label">情報を表示</string>
<string name="show_feed_settings_label">ポッドキャスト設定を表示</string>
<string name="feed_info_label">ポッドキャスト情報</string>
@@ -165,8 +165,8 @@
<plurals name="deleted_episode_batch_label">
<item quantity="other">%d エピソードを削除しました。</item>
</plurals>
- <string name="mark_as_seen_label">参照済</string>
- <string name="marked_as_seen_label">参照済としてマーク</string>
+ <string name="remove_new_flag_label">参照済</string>
+ <string name="removed_new_flag_label">参照済としてマーク</string>
<string name="mark_read_label">再生済としてマーク</string>
<string name="marked_as_read_label">再生済としてマークしました</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-ko/strings.xml b/core/src/main/res/values-ko/strings.xml
index c776885ea..7727e40b7 100644
--- a/core/src/main/res/values-ko/strings.xml
+++ b/core/src/main/res/values-ko/strings.xml
@@ -105,9 +105,9 @@
<string name="mark_all_read_msg">모든 에피소드를 재생했다고 표시했습니다</string>
<string name="mark_all_read_confirmation_msg">모든 에피소드를 재생했다고 표시할지 확인하십시오.</string>
<string name="mark_all_read_feed_confirmation_msg">이 피드에 들어 있는 모든 에피소드를 재생했다고 표시할지 확인하십시오.</string>
- <string name="mark_all_seen_label">모두 봤다고 표시</string>
- <string name="mark_all_seen_msg">모든 에피소드를 봤다고 표시했습니다</string>
- <string name="mark_all_seen_confirmation_msg">모든 에피소드를 본 것으로 표시하는지 확인하십시오.</string>
+ <string name="remove_all_new_flags_label">모두 봤다고 표시</string>
+ <string name="removed_all_new_flags_msg">모든 에피소드를 봤다고 표시했습니다</string>
+ <string name="remove_all_new_flags_confirmation_msg">모든 에피소드를 본 것으로 표시하는지 확인하십시오.</string>
<string name="show_info_label">정보 표시</string>
<string name="rename_feed_label">팟캐스트 이름 바꾸기</string>
<string name="remove_feed_label">팟캐스트 제거</string>
@@ -143,7 +143,7 @@
<string name="delete_label">삭제</string>
<string name="delete_failed">파일을 삭제할 수 없습니다. 장치를 재부팅하면 동작할 수도 있습니다.</string>
<string name="remove_episode_lable">에피소드 제거</string>
- <string name="marked_as_seen_label">봤다고 표시했습니다</string>
+ <string name="removed_new_flag_label">봤다고 표시했습니다</string>
<string name="mark_read_label">재생했다고 표시</string>
<string name="marked_as_read_label">재생했다고 표시했습니다</string>
<string name="mark_unread_label">재생하지 않음으로 표시</string>
diff --git a/core/src/main/res/values-lt/strings.xml b/core/src/main/res/values-lt/strings.xml
index f0820eba4..4c70f6f33 100644
--- a/core/src/main/res/values-lt/strings.xml
+++ b/core/src/main/res/values-lt/strings.xml
@@ -113,9 +113,9 @@
<string name="mark_all_read_msg">Visi epizodai pažymėti kaip perklausyti</string>
<string name="mark_all_read_confirmation_msg">Patvirtinkite, jog norite pažymėti visus epizodus kaip perklausytus.</string>
<string name="mark_all_read_feed_confirmation_msg">Patvirtinkite, jog norite pažymėti visus šios tinklalaidės epizodus kaip perklausytus.</string>
- <string name="mark_all_seen_label">Pažymėti visus kaip matytus</string>
- <string name="mark_all_seen_msg">Pažymėti visus epizodus kaip matytus</string>
- <string name="mark_all_seen_confirmation_msg">Patvirtinkite, jog norite pažymėti visus epizodus kaip matytus.</string>
+ <string name="remove_all_new_flags_label">Pažymėti visus kaip matytus</string>
+ <string name="removed_all_new_flags_msg">Pažymėti visus epizodus kaip matytus</string>
+ <string name="remove_all_new_flags_confirmation_msg">Patvirtinkite, jog norite pažymėti visus epizodus kaip matytus.</string>
<string name="show_info_label">Rodyti informaciją</string>
<string name="show_feed_settings_label">Rodyti tinklalaidės nustatymus</string>
<string name="feed_info_label">Tinklalaidės informacija</string>
@@ -157,8 +157,8 @@
<string name="remove_label">Pašalinti</string>
<string name="delete_label">Ištrinti</string>
<string name="delete_failed">Nepavyksta ištrinti failo. Įrenginio paleidimas iš naujo gali padėti.</string>
- <string name="mark_as_seen_label">Pažymėti kaip matytą</string>
- <string name="marked_as_seen_label">Pažymėtas kaip matytas</string>
+ <string name="remove_new_flag_label">Pažymėti kaip matytą</string>
+ <string name="removed_new_flag_label">Pažymėtas kaip matytas</string>
<string name="mark_read_label">Pažymėti kaip perklausytą</string>
<string name="marked_as_read_label">Pažymėtas kaip perklausytas</string>
<string name="mark_unread_label">Pažymėti kaip neperklausytą</string>
diff --git a/core/src/main/res/values-nb/strings.xml b/core/src/main/res/values-nb/strings.xml
index 53489e180..c7684322c 100644
--- a/core/src/main/res/values-nb/strings.xml
+++ b/core/src/main/res/values-nb/strings.xml
@@ -103,8 +103,8 @@
<string name="mark_all_read_label">Marker alle som avspilt</string>
<string name="mark_all_read_msg">Marker alle episoder som avspilt</string>
<string name="mark_all_read_confirmation_msg">Vennligst bekreft at du ønsker å markere alle episoder som avspilt.</string>
- <string name="mark_all_seen_label">Marker alle som sett</string>
- <string name="mark_all_seen_confirmation_msg">Bekreft at du ønsker å markere alle episoder som sett.</string>
+ <string name="remove_all_new_flags_label">Marker alle som sett</string>
+ <string name="remove_all_new_flags_confirmation_msg">Bekreft at du ønsker å markere alle episoder som sett.</string>
<string name="show_info_label">Vis informasjon</string>
<string name="share_label">Del ...</string>
<string name="share_file_label">Del fil</string>
@@ -130,7 +130,7 @@
<string name="remove_label">Fjern</string>
<string name="delete_label">Slett</string>
<string name="delete_failed">Kan ikke slette filen. Omstart av enheten kan hjelpe.</string>
- <string name="marked_as_seen_label">Marker som sett</string>
+ <string name="removed_new_flag_label">Marker som sett</string>
<string name="mark_read_label">Marker som avspilt</string>
<string name="marked_as_read_label">Marker som avspilt</string>
<string name="mark_unread_label">Marker som ikke avspilt</string>
diff --git a/core/src/main/res/values-nl/strings.xml b/core/src/main/res/values-nl/strings.xml
index 90d081bb7..22f9f6045 100644
--- a/core/src/main/res/values-nl/strings.xml
+++ b/core/src/main/res/values-nl/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Alle afleveringen zijn gemarkeerd als afgespeeld</string>
<string name="mark_all_read_confirmation_msg">Bevestig dat je alle afleveringen wilt markeren als afgespeeld.</string>
<string name="mark_all_read_feed_confirmation_msg">Bevestig dat je alle afleveringen van deze podcast wilt markeren als afgespeeld.</string>
- <string name="mark_all_seen_label">Alles markeren als bekeken</string>
- <string name="mark_all_seen_msg">Alle afleveringen zijn gemarkeerd als bekeken</string>
- <string name="mark_all_seen_confirmation_msg">Bevestig dat je alle afleveringen wilt markeren als bekeken.</string>
+ <string name="remove_all_new_flags_label">Alles markeren als bekeken</string>
+ <string name="removed_all_new_flags_msg">Alle afleveringen zijn gemarkeerd als bekeken</string>
+ <string name="remove_all_new_flags_confirmation_msg">Bevestig dat je alle afleveringen wilt markeren als bekeken.</string>
<string name="show_info_label">Informatie tonen</string>
<string name="show_feed_settings_label">Podcast-instellingen tonen</string>
<string name="feed_info_label">Podcast-informatie</string>
@@ -169,8 +169,8 @@
<item quantity="one">%d aflevering verwijderd.</item>
<item quantity="other">%d afleveringen verwijderd.</item>
</plurals>
- <string name="mark_as_seen_label">Markeren als bekeken</string>
- <string name="marked_as_seen_label">Gemarkeerd als bekeken</string>
+ <string name="remove_new_flag_label">Markeren als bekeken</string>
+ <string name="removed_new_flag_label">Gemarkeerd als bekeken</string>
<string name="mark_read_label">Markeren als afgespeeld</string>
<string name="marked_as_read_label">Gemarkeerd als afgespeeld</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-pl-rPL/strings.xml b/core/src/main/res/values-pl-rPL/strings.xml
index 53bce3911..7cbe3015a 100644
--- a/core/src/main/res/values-pl-rPL/strings.xml
+++ b/core/src/main/res/values-pl-rPL/strings.xml
@@ -109,9 +109,9 @@
<string name="mark_all_read_msg">Wszystkie odcinki zaznaczono jako odtworzone</string>
<string name="mark_all_read_confirmation_msg">Proszę potwierdzić, że chcesz oznaczyć wszystkie odcinki jako odtworzone.</string>
<string name="mark_all_read_feed_confirmation_msg">Proszę potwierdzić, że chcesz oznaczyć wszystkie odcinki tego podcastu jako odtworzone.</string>
- <string name="mark_all_seen_label">Oznacz wszystkie jako wyświetlone</string>
- <string name="mark_all_seen_msg">Oznacz wszystkie odcinki jako wyświetlone</string>
- <string name="mark_all_seen_confirmation_msg">Proszę potwierdzić chęć zaznaczenia wszystkich odcinków jako obejrzanych.</string>
+ <string name="remove_all_new_flags_label">Oznacz wszystkie jako wyświetlone</string>
+ <string name="removed_all_new_flags_msg">Oznacz wszystkie odcinki jako wyświetlone</string>
+ <string name="remove_all_new_flags_confirmation_msg">Proszę potwierdzić chęć zaznaczenia wszystkich odcinków jako obejrzanych.</string>
<string name="show_info_label">Pokaż informacje</string>
<string name="show_feed_settings_label">Pokaż ustawienia podcastu</string>
<string name="feed_settings_label">Ustawienia podcastu</string>
@@ -147,8 +147,8 @@
<string name="remove_label">Usuń</string>
<string name="delete_label">Usuń</string>
<string name="delete_failed">Nie można usunąć pliku. Restart urządzenia może w tym pomóc.</string>
- <string name="mark_as_seen_label">Oznacz jako wyświetlone</string>
- <string name="marked_as_seen_label">Oznaczono jako wyświetlone</string>
+ <string name="remove_new_flag_label">Oznacz jako wyświetlone</string>
+ <string name="removed_new_flag_label">Oznaczono jako wyświetlone</string>
<string name="mark_read_label">Oznacz jako odtworzone</string>
<string name="marked_as_read_label">Oznaczone jako odtworzone</string>
<string name="mark_unread_label">Oznacz jako nieodtworzone</string>
diff --git a/core/src/main/res/values-pt-rBR/strings.xml b/core/src/main/res/values-pt-rBR/strings.xml
index 0f85d9eaf..76f838bde 100644
--- a/core/src/main/res/values-pt-rBR/strings.xml
+++ b/core/src/main/res/values-pt-rBR/strings.xml
@@ -111,9 +111,9 @@
<string name="mark_all_read_msg">Marcar todos Episódios como reproduzidos</string>
<string name="mark_all_read_confirmation_msg">Por favor, confirme que você deseja marcar todos os episódios como já reproduzidos.</string>
<string name="mark_all_read_feed_confirmation_msg">Favor confirmar que deseja marcar todos os episódios nesse podcast como já ouvidos.</string>
- <string name="mark_all_seen_label">Marcar todos como vistos</string>
- <string name="mark_all_seen_msg">Todos os episódios marcados como já ouvidos</string>
- <string name="mark_all_seen_confirmation_msg">Confirme se deseja marcar todos os episódios como vistos.</string>
+ <string name="remove_all_new_flags_label">Marcar todos como vistos</string>
+ <string name="removed_all_new_flags_msg">Todos os episódios marcados como já ouvidos</string>
+ <string name="remove_all_new_flags_confirmation_msg">Confirme se deseja marcar todos os episódios como vistos.</string>
<string name="show_info_label">Mostrar informação</string>
<string name="show_feed_settings_label">Exibir configurações do podcast</string>
<string name="feed_info_label">Informações do podcast</string>
@@ -155,8 +155,8 @@
<string name="remove_label">Remover</string>
<string name="delete_label">Deletar</string>
<string name="delete_failed">Não foi possível deletar o arquivo. Experimente reiniciar o dispositivo.</string>
- <string name="mark_as_seen_label">Marcar como ouvido</string>
- <string name="marked_as_seen_label">Marcar como visto</string>
+ <string name="remove_new_flag_label">Marcar como ouvido</string>
+ <string name="removed_new_flag_label">Marcar como visto</string>
<string name="mark_read_label">Marcar como reproduzido</string>
<string name="marked_as_read_label">Marcado como reproduzido</string>
<string name="mark_unread_label">Marcar como não reproduzido</string>
diff --git a/core/src/main/res/values-pt/strings.xml b/core/src/main/res/values-pt/strings.xml
index 39a3d33c6..3ec88af31 100644
--- a/core/src/main/res/values-pt/strings.xml
+++ b/core/src/main/res/values-pt/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Marcar todos os episódios como reproduzidos</string>
<string name="mark_all_read_confirmation_msg">Tem a certeza de que deseja marcar todos os episódios como reproduzidos?</string>
<string name="mark_all_read_feed_confirmation_msg">Tem a certeza de que deseja marcar como reproduzidos todos os episódios deste podcast?</string>
- <string name="mark_all_seen_label">Marcar tudo como reproduzido</string>
- <string name="mark_all_seen_msg">Marcar todos como reproduzidos</string>
- <string name="mark_all_seen_confirmation_msg">Tem a certeza de que deseja marcar todos os episódios como vistos?</string>
+ <string name="remove_all_new_flags_label">Marcar tudo como reproduzido</string>
+ <string name="removed_all_new_flags_msg">Marcar todos como reproduzidos</string>
+ <string name="remove_all_new_flags_confirmation_msg">Tem a certeza de que deseja marcar todos os episódios como vistos?</string>
<string name="show_info_label">Mostrar informações</string>
<string name="show_feed_settings_label">Mostrar definições do podcast</string>
<string name="feed_info_label">Informações do podcast</string>
@@ -169,8 +169,8 @@
<item quantity="one">%d episódio eliminado.</item>
<item quantity="other">%d episódios eliminados.</item>
</plurals>
- <string name="mark_as_seen_label">Marcar como reproduzido</string>
- <string name="marked_as_seen_label">Marcar como reproduzido</string>
+ <string name="remove_new_flag_label">Marcar como reproduzido</string>
+ <string name="removed_new_flag_label">Marcar como reproduzido</string>
<string name="mark_read_label">Marcar como reproduzido</string>
<string name="marked_as_read_label">Marcado como reproduzido</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-ru/strings.xml b/core/src/main/res/values-ru/strings.xml
index 942be0267..a904d3ad9 100644
--- a/core/src/main/res/values-ru/strings.xml
+++ b/core/src/main/res/values-ru/strings.xml
@@ -113,9 +113,9 @@
<string name="mark_all_read_msg">Отметить все выпуски как прослушанные</string>
<string name="mark_all_read_confirmation_msg">Подтвердите, что хотите пометить все эпизоды как прослушанные.</string>
<string name="mark_all_read_feed_confirmation_msg">Пожалуйста, подтвердите желание отметить все выпуски этого подкаста как прослушанные.</string>
- <string name="mark_all_seen_label">Отметить все как просмотренное</string>
- <string name="mark_all_seen_msg">Все выпуски отмечены как просмотренные</string>
- <string name="mark_all_seen_confirmation_msg">Пожалуйста, подтвердите намерение отметить все выпуски как просмотренные.</string>
+ <string name="remove_all_new_flags_label">Отметить все как просмотренное</string>
+ <string name="removed_all_new_flags_msg">Все выпуски отмечены как просмотренные</string>
+ <string name="remove_all_new_flags_confirmation_msg">Пожалуйста, подтвердите намерение отметить все выпуски как просмотренные.</string>
<string name="show_info_label">Показать информацию</string>
<string name="show_feed_settings_label">Показать настройки подкаста</string>
<string name="feed_info_label">Сведения о подкасте</string>
@@ -157,8 +157,8 @@
<string name="remove_label">Удалить</string>
<string name="delete_label">Удалить</string>
<string name="delete_failed">Невозможно удалить файл. Попробуйте перезагрузить устройство.</string>
- <string name="mark_as_seen_label">Просмотрено</string>
- <string name="marked_as_seen_label">Отмечено как просмотренное</string>
+ <string name="remove_new_flag_label">Просмотрено</string>
+ <string name="removed_new_flag_label">Отмечено как просмотренное</string>
<string name="mark_read_label">Отметить как прослушанное</string>
<string name="marked_as_read_label">Помечено как прослушанное</string>
<string name="mark_unread_label">Отметить как непрослушанное</string>
diff --git a/core/src/main/res/values-sv-rSE/strings.xml b/core/src/main/res/values-sv-rSE/strings.xml
index b0fa69b3b..a44834efb 100644
--- a/core/src/main/res/values-sv-rSE/strings.xml
+++ b/core/src/main/res/values-sv-rSE/strings.xml
@@ -116,9 +116,9 @@
<string name="mark_all_read_msg">Markera alla episoder som spelade</string>
<string name="mark_all_read_confirmation_msg">Bekräfta att du verkligen vill markera alla episoder som spelade.</string>
<string name="mark_all_read_feed_confirmation_msg">Bekräfta att du vill markera alla episider i denna podcast som spelade.</string>
- <string name="mark_all_seen_label">Markera alla som sedda</string>
- <string name="mark_all_seen_msg">Markerade alla episoder som sedda</string>
- <string name="mark_all_seen_confirmation_msg">Bekräfta att du vill markera alla episoder som sedda.</string>
+ <string name="remove_all_new_flags_label">Markera alla som sedda</string>
+ <string name="removed_all_new_flags_msg">Markerade alla episoder som sedda</string>
+ <string name="remove_all_new_flags_confirmation_msg">Bekräfta att du vill markera alla episoder som sedda.</string>
<string name="show_info_label">Visa information</string>
<string name="show_feed_settings_label">Visa podcastinställningar</string>
<string name="feed_info_label">Podcastinfo</string>
@@ -169,8 +169,8 @@
<item quantity="one">1%d episod raderad.</item>
<item quantity="other">1%d episder raderade.</item>
</plurals>
- <string name="mark_as_seen_label">Markera som sedd</string>
- <string name="marked_as_seen_label">Markera som sedd</string>
+ <string name="remove_new_flag_label">Markera som sedd</string>
+ <string name="removed_new_flag_label">Markera som sedd</string>
<string name="mark_read_label">Markera som spelad</string>
<string name="marked_as_read_label">Markera som spelad</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-tr/strings.xml b/core/src/main/res/values-tr/strings.xml
index f27b905bd..79ef2fe2c 100644
--- a/core/src/main/res/values-tr/strings.xml
+++ b/core/src/main/res/values-tr/strings.xml
@@ -107,9 +107,9 @@
<string name="mark_all_read_msg">Tüm bölümleri oynatıldı olarak işaretle</string>
<string name="mark_all_read_confirmation_msg">Lütfen tüm bölümleri oynatıldı olarak işaretlemek istediğinizi onaylayın.</string>
<string name="mark_all_read_feed_confirmation_msg">Lütfen bu yayındaki bütün bölümleri oynatıldı olarak işaretlemek istediğinizi onaylayın.</string>
- <string name="mark_all_seen_label">Hepsini görüldü olarak işaretle</string>
- <string name="mark_all_seen_msg">Bütün bölümler görüldü olarak işaretlendi</string>
- <string name="mark_all_seen_confirmation_msg">Lütfen tüm bölümleri görüldü olarak işaretlemek istediğinizi onaylayın.</string>
+ <string name="remove_all_new_flags_label">Hepsini görüldü olarak işaretle</string>
+ <string name="removed_all_new_flags_msg">Bütün bölümler görüldü olarak işaretlendi</string>
+ <string name="remove_all_new_flags_confirmation_msg">Lütfen tüm bölümleri görüldü olarak işaretlemek istediğinizi onaylayın.</string>
<string name="show_info_label">Bilgiyi göster</string>
<string name="show_feed_settings_label">Cepyayın ayarlarını göster</string>
<string name="feed_info_label">Cepyayın bilgisi</string>
@@ -151,8 +151,8 @@
<string name="remove_label">Kaldır</string>
<string name="delete_label">Sil</string>
<string name="delete_failed">Dosya silinemiyor. Cihazı yeniden başlatmak yardımcı olabilir.</string>
- <string name="mark_as_seen_label">Hepsini görüldü olarak işaretle</string>
- <string name="marked_as_seen_label">Görüldü olarak işaretlendi</string>
+ <string name="remove_new_flag_label">Hepsini görüldü olarak işaretle</string>
+ <string name="removed_new_flag_label">Görüldü olarak işaretlendi</string>
<string name="mark_read_label">Oynatıldı olarak işaretle</string>
<string name="marked_as_read_label">Oynatıldı olarak işaretlendi</string>
<string name="mark_unread_label">Oynatılmadı olarak işaretle</string>
diff --git a/core/src/main/res/values-uk-rUA/strings.xml b/core/src/main/res/values-uk-rUA/strings.xml
index d40baba2d..18ba0c6e3 100644
--- a/core/src/main/res/values-uk-rUA/strings.xml
+++ b/core/src/main/res/values-uk-rUA/strings.xml
@@ -120,9 +120,9 @@
<string name="mark_all_read_msg">Позначено всі епізоди як відтворені</string>
<string name="mark_all_read_confirmation_msg">Будь ласка, підтвердіть що ви бажаєте позначити всі епізоди як відтворені.</string>
<string name="mark_all_read_feed_confirmation_msg">Будь ласка, підтвердіть, що ви бажаєте позначити всі епізоди цього подкасту як відтворені. </string>
- <string name="mark_all_seen_label">Позначити всі як переглянуті</string>
- <string name="mark_all_seen_msg">Всі епізоди позначено як переглянуті</string>
- <string name="mark_all_seen_confirmation_msg">Будь ласка, підтвердіть що ви бажаєте позначити всі епізоди як переглянуті.</string>
+ <string name="remove_all_new_flags_label">Позначити всі як переглянуті</string>
+ <string name="removed_all_new_flags_msg">Всі епізоди позначено як переглянуті</string>
+ <string name="remove_all_new_flags_confirmation_msg">Будь ласка, підтвердіть що ви бажаєте позначити всі епізоди як переглянуті.</string>
<string name="show_info_label">Інформація</string>
<string name="show_feed_settings_label">Показати налаштування подкасту</string>
<string name="feed_info_label">Інформація про подкаст</string>
@@ -177,8 +177,8 @@
<item quantity="many">%dепізодів видалено. </item>
<item quantity="other">%d епізодів видалено.</item>
</plurals>
- <string name="mark_as_seen_label">Позначити як переглянутий</string>
- <string name="marked_as_seen_label">Позначено як переглянутий</string>
+ <string name="remove_new_flag_label">Позначити як переглянутий</string>
+ <string name="removed_new_flag_label">Позначено як переглянутий</string>
<string name="mark_read_label">Позначити як відтворений</string>
<string name="marked_as_read_label">Позначено як відтворений</string>
<plurals name="marked_read_batch_label">
diff --git a/core/src/main/res/values-vi/strings.xml b/core/src/main/res/values-vi/strings.xml
index 0982d2b14..86fd4364f 100644
--- a/core/src/main/res/values-vi/strings.xml
+++ b/core/src/main/res/values-vi/strings.xml
@@ -91,8 +91,8 @@
<string name="mark_all_read_label">Đánh dấu đã nghe tất cả</string>
<string name="mark_all_read_msg">Đánh dấu đã nghe tất cả các tập</string>
<string name="mark_all_read_confirmation_msg">Hãy xác nhận bạn muốn đánh dấu đã nghe tất cả các tập.</string>
- <string name="mark_all_seen_label">Đánh dấu đã xem tất cả</string>
- <string name="mark_all_seen_confirmation_msg">Hãy xác nhận bạn muốn đánh dấu đã xem tất cả các tập.</string>
+ <string name="remove_all_new_flags_label">Đánh dấu đã xem tất cả</string>
+ <string name="remove_all_new_flags_confirmation_msg">Hãy xác nhận bạn muốn đánh dấu đã xem tất cả các tập.</string>
<string name="show_info_label">Hiện thông tin</string>
<string name="share_label">Chia sẻ…</string>
<string name="share_feed_url_label">Chia sẻ liên kết feed</string>
@@ -116,7 +116,7 @@
<string name="remove_label">Loại bỏ</string>
<string name="delete_label">Xoá</string>
<string name="remove_episode_lable">Xoá tập này</string>
- <string name="marked_as_seen_label">Đánh dấu đã xem</string>
+ <string name="removed_new_flag_label">Đánh dấu đã xem</string>
<string name="mark_read_label">Đánh dấu đã nghe</string>
<string name="marked_as_read_label">Đã đánh dấu đã nghe</string>
<string name="mark_unread_label">Đánh dấu chưa nghe</string>
diff --git a/core/src/main/res/values-zh-rCN/strings.xml b/core/src/main/res/values-zh-rCN/strings.xml
index f78c6b0ae..0d9188b0e 100644
--- a/core/src/main/res/values-zh-rCN/strings.xml
+++ b/core/src/main/res/values-zh-rCN/strings.xml
@@ -113,8 +113,8 @@
<string name="mark_all_read_label">全部标识已读</string>
<string name="mark_all_read_msg">将所有曲目标记为已播放</string>
<string name="mark_all_read_confirmation_msg">请确认您要将所有曲目标为已播放</string>
- <string name="mark_all_seen_label">所有可见</string>
- <string name="mark_all_seen_confirmation_msg">请确认您要将所有曲目标记为已读。</string>
+ <string name="remove_all_new_flags_label">所有可见</string>
+ <string name="remove_all_new_flags_confirmation_msg">请确认您要将所有曲目标记为已读。</string>
<string name="show_info_label">查看信息</string>
<string name="feed_info_label">播客信息</string>
<string name="feed_settings_label">播客设置</string>
@@ -145,8 +145,8 @@
<string name="remove_label">删除</string>
<string name="delete_label">删除</string>
<string name="delete_failed">无法删除文件。重启可能解决该问题。</string>
- <string name="mark_as_seen_label">标记为已读</string>
- <string name="marked_as_seen_label">标记为已读</string>
+ <string name="remove_new_flag_label">标记为已读</string>
+ <string name="removed_new_flag_label">标记为已读</string>
<string name="mark_read_label">标记已播放</string>
<string name="marked_as_read_label">已标记为已播放</string>
<string name="mark_unread_label">标记未播放</string>
diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/core/src/main/res/values-zh-rTW/strings.xml
index f00904eda..97ecc4872 100644
--- a/core/src/main/res/values-zh-rTW/strings.xml
+++ b/core/src/main/res/values-zh-rTW/strings.xml
@@ -103,8 +103,8 @@
<string name="mark_all_read_label">全部標記為已播放</string>
<string name="mark_all_read_msg">全部劇集標記為已播放</string>
<string name="mark_all_read_confirmation_msg">請確認你要將所有劇集標記為已播放。</string>
- <string name="mark_all_seen_label">標記為已讀</string>
- <string name="mark_all_seen_confirmation_msg">請確認你要將所有劇集標記為已讀。</string>
+ <string name="remove_all_new_flags_label">標記為已讀</string>
+ <string name="remove_all_new_flags_confirmation_msg">請確認你要將所有劇集標記為已讀。</string>
<string name="show_info_label">顯示資料</string>
<string name="share_label">分享</string>
<string name="share_file_label">分享文件</string>
@@ -131,7 +131,7 @@
<string name="delete_label">刪除</string>
<string name="delete_failed">刪除文件失敗。重啟設備試試看。</string>
<string name="remove_episode_lable">移除劇集</string>
- <string name="marked_as_seen_label">標記為已讀</string>
+ <string name="removed_new_flag_label">標記為已讀</string>
<string name="mark_read_label">標記為已播放</string>
<string name="marked_as_read_label">已標記為已播放</string>
<string name="mark_unread_label">標記為未播放</string>
diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml
index 5311d6cd2..eb7f065ce 100644
--- a/core/src/main/res/values/attrs.xml
+++ b/core/src/main/res/values/attrs.xml
@@ -61,6 +61,7 @@
<attr name="ic_known_issues" format="reference" />
<attr name="master_switch_background" format="color"/>
<attr name="currently_playing_background" format="color"/>
+ <attr name="ic_bookmark" format="reference"/>
<!-- Used in itemdescription -->
<attr name="non_transparent_background" format="reference"/>
diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml
index 46da1d68e..cdde0027d 100644
--- a/core/src/main/res/values/dimens.xml
+++ b/core/src/main/res/values/dimens.xml
@@ -40,4 +40,6 @@
<dimen name="media_router_controller_playback_control_start_padding">24dp</dimen>
<dimen name="media_router_controller_bottom_margin">8dp</dimen>
+ <dimen name="scrubber_vertical_padding">0dp</dimen>
+
</resources>
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index 3d7cbfe10..9d64cf549 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -122,15 +122,17 @@
<string name="podcastdirectories_label">Find Podcast in Directory</string>
<string name="podcastdirectories_descr">For new podcasts, you can search iTunes or fyyd, or browse gpodder.net by name, category or popularity.</string>
<string name="browse_gpoddernet_label">Browse gpodder.net</string>
+ <string name="discover">Discover</string>
+ <string name="discover_more">more »</string>
<!-- Actions on feeds -->
<string name="mark_all_read_label">Mark all as played</string>
<string name="mark_all_read_msg">Marked all Episodes as played</string>
<string name="mark_all_read_confirmation_msg">Please confirm that you want to mark all episodes as being played.</string>
<string name="mark_all_read_feed_confirmation_msg">Please confirm that you want to mark all episodes in this podcast as being played.</string>
- <string name="mark_all_seen_label">Mark all as seen</string>
- <string name="mark_all_seen_msg">Marked all episodes as seen</string>
- <string name="mark_all_seen_confirmation_msg">Please confirm that you want to mark all episodes as seen.</string>
+ <string name="remove_all_new_flags_label">Remove all \"new\" flags</string>
+ <string name="removed_all_new_flags_msg">Removed all \"new\" flags</string>
+ <string name="remove_all_new_flags_confirmation_msg">Please confirm that you want to remove the \"new\" flag from all episodes.</string>
<string name="show_info_label">Show information</string>
<string name="show_feed_settings_label">Show podcast settings</string>
<string name="feed_info_label">Podcast info</string>
@@ -182,8 +184,8 @@
<item quantity="one">%d episode deleted.</item>
<item quantity="other">%d episodes deleted.</item>
</plurals>
- <string name="mark_as_seen_label">Mark as seen</string>
- <string name="marked_as_seen_label">Marked as seen</string>
+ <string name="remove_new_flag_label">Remove \"new\" flag</string>
+ <string name="removed_new_flag_label">Removed \"new\" flag</string>
<string name="mark_read_label">Mark as played</string>
<string name="marked_as_read_label">Marked as played</string>
<plurals name="marked_read_batch_label">
@@ -211,7 +213,6 @@
<string name="remove_from_favorite_label">Remove from Favorites</string>
<string name="removed_from_favorites">Removed from Favorites</string>
<string name="visit_website_label">Visit Website</string>
- <string name="support_label">Flattr this</string>
<string name="skip_episode_label">Skip episode</string>
<string name="activate_auto_download">Activate Auto Download</string>
<string name="deactivate_auto_download">Deactivate Auto Download</string>
@@ -305,34 +306,6 @@
<string name="sort_old_to_new">Old to new</string>
<string name="sort_new_to_old">New to old</string>
- <!-- Flattr -->
- <string name="flattr_auth_label">Flattr sign-in</string>
- <string name="flattr_auth_explanation">Press the button below to start the authentication process. You will be forwarded to the flattr login screen in your browser and be asked to give AntennaPod the permission to flattr things. After you have given permission, you will return to this screen automatically.</string>
- <string name="authenticate_label">Authenticate</string>
- <string name="return_home_label">Return to home</string>
- <string name="flattr_auth_success">Authentication was successful! You can now flattr things within the app.</string>
- <string name="no_flattr_token_title">No Flattr token found</string>
- <string name="no_flattr_token_notification_msg">Your flattr account does not seem to be connected to AntennaPod. Tap here to authenticate.</string>
- <string name="no_flattr_token_msg">Your flattr account does not seem to be connected to AntennaPod. You can either connect your account to AntennaPod to flattr things within the app or you can visit the website of the thing to flattr it there.</string>
- <string name="authenticate_now_label">Authenticate</string>
- <string name="action_forbidden_title">Action forbidden</string>
- <string name="action_forbidden_msg">AntennaPod has no permission for this action. The reason for this could be that the access token of AntennaPod to your account has been revoked. You can either re-reauthenticate or visit the website of the thing instead.</string>
- <string name="access_revoked_title">Access revoked</string>
- <string name="access_revoked_info">You have successfully revoked AntennaPod\'s access token to your account. In order to complete the process, you have to remove this app from the list of approved applications in your account settings on the flattr website.</string>
-
- <!-- Flattr -->
- <string name="flattr_click_success">Flattr\'ed one thing!</string>
- <string name="flattr_click_success_count">Flattr\'ed %d things!</string>
- <string name="flattr_click_success_queue">Flattr\'ed: %s.</string>
- <string name="flattr_click_failure_count">Failed to flattr %d things!</string>
- <string name="flattr_click_failure">Not flattr\'ed: %s.</string>
- <string name="flattr_click_enqueued">Thing will be flattr\'ed later</string>
- <string name="flattring_thing">Flattring %s</string>
- <string name="flattring_label">AntennaPod is flattring</string>
- <string name="flattrd_label">AntennaPod has flattr\'ed</string>
- <string name="flattrd_failed_label">AntennaPod flattr failed</string>
- <string name="flattr_retrieving_status">Retrieving flattr\'ed things</string>
-
<!-- Variable Speed -->
<string name="download_plugin_label">Download Plugin</string>
<string name="no_playback_plugin_title">Plugin Not Installed</string>
@@ -344,7 +317,6 @@
<string name="no_items_header_label">No queued episodes</string>
<string name="no_items_label">Add an episode by downloading it, or long press an episode and select \"Add to queue\".</string>
<string name="no_feeds_label">You haven\'t subscribed to any podcasts yet.</string>
- <string name="no_chapters_label">This episode has no chapters.</string>
<string name="no_shownotes_label">This episode has no shownotes.</string>
<string name="no_run_downloads_head_label">No downloads running</string>
<string name="no_run_downloads_label">You can download episodes on the podcast details screen.</string>
@@ -360,6 +332,8 @@
<string name="no_new_episodes_label">When new episodes arrive, they will be shown here.</string>
<string name="no_fav_episodes_head_label">No favorite episodes</string>
<string name="no_fav_episodes_label">You can add episodes to the favorites by long-pressing them.</string>
+ <string name="no_chapters_head_label">No chapters</string>
+ <string name="no_chapters_label">This episode has no chapters.</string>
<!-- Preferences -->
<string name="storage_pref">Storage</string>
@@ -368,8 +342,6 @@
<string name="about_pref">About</string>
<string name="queue_label">Queue</string>
<string name="integrations_label">Integrations</string>
- <string name="flattr_label">Flattr</string>
- <string name="flattr_summary">Micropayment service</string>
<string name="automation">Automation</string>
<string name="download_pref_details">Details</string>
<string name="import_export_pref">Import/Export</string>
@@ -419,15 +391,6 @@
<string name="pref_mobileUpdate_images">Images only</string>
<string name="pref_mobileUpdate_everything">Everything</string>
<string name="refreshing_label">Refreshing</string>
- <string name="flattr_settings_label">Flattr settings</string>
- <string name="pref_flattr_auth_title">Flattr sign-in</string>
- <string name="pref_flattr_auth_sum">Sign in to your flattr account to flattr things directly from the app.</string>
- <string name="pref_flattr_this_app_title">Flattr this App</string>
- <string name="pref_flattr_this_app_sum">Support the development of AntennaPod by flattring it. Thanks!</string>
- <string name="pref_revokeAccess_title">Revoke access</string>
- <string name="pref_revokeAccess_sum">Revoke the access permission to your flattr account for this app.</string>
- <string name="pref_auto_flattr_title">Automatic Flattr</string>
- <string name="pref_auto_flattr_sum">Configure automatic flattring</string>
<string name="user_interface_label">User Interface</string>
<string name="pref_set_theme_title">Select Theme</string>
<string name="pref_nav_drawer_title">Customize Navigation Drawer</string>
@@ -541,12 +504,6 @@
<string name="pref_delete_removes_from_queue_title">Delete removes from Queue</string>
<string name="pref_delete_removes_from_queue_sum">Automatically remove an episode from the queue when it is deleted.</string>
- <!-- Auto-Flattr dialog -->
- <string name="auto_flattr_enable">Enable automatic flattring</string>
- <string name="auto_flattr_after_percent">Flattr episode as soon as %d percent have been played</string>
- <string name="auto_flattr_ater_beginning">Flattr episode when playback starts</string>
- <string name="auto_flattr_ater_end">Flattr episode when playback ends</string>
-
<!-- Search -->
<string name="search_hint">Search for episodes</string>
<string name="found_in_shownotes_label">Found in show notes</string>
@@ -652,7 +609,7 @@
<string name="choose_data_directory">Choose Data Folder</string>
<string name="choose_data_directory_message">Please choose the base of your data folder. AntennaPod will create the appropriate sub-directories.</string>
<string name="choose_data_directory_permission_rationale">Access to external storage is required to change the data folder</string>
- <string name="choose_data_directory_available_space">%1$s free</string>
+ <string name="choose_data_directory_available_space">%1$s of %2$s free</string>
<string name="create_folder_msg">Create new folder with name "%1$s"?</string>
<string name="create_folder_success">Created new folder</string>
<string name="create_folder_error_no_write_access">Cannot write to this folder</string>
@@ -705,10 +662,13 @@
<!-- AntennaPodSP -->
<string name="sp_apps_importing_feeds_msg">Importing subscriptions from single-purpose apps&#8230;</string>
+ <!-- Add podcast fragment -->
+ <string name="search_podcast_hint">Search podcast…</string>
<string name="search_itunes_label">Search iTunes</string>
- <string name="filter">Filter</string>
-
<string name="search_fyyd_label">Search fyyd</string>
+ <string name="advanced_search">Advanced search</string>
+
+ <string name="filter">Filter</string>
<!-- Episodes apply actions -->
<string name="all_label">All</string>
diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml
index d80137ea3..4c69306a9 100644
--- a/core/src/main/res/values/styles.xml
+++ b/core/src/main/res/values/styles.xml
@@ -71,7 +71,7 @@
<item name="ic_question_answer">@drawable/ic_forum_grey600_24dp</item>
<item name="ic_bug">@drawable/ic_bug_grey600_24dp</item>
<item name="ic_known_issues">@drawable/ic_format_list_bulleted_grey600_24dp</item>
-
+ <item name="ic_bookmark">@drawable/ic_bookmark_grey600_24dp</item>
<item name="master_switch_background">@color/master_switch_background_light</item>
<item name="currently_playing_background">@color/highlight_light</item>
@@ -155,6 +155,7 @@
<item name="ic_question_answer">@drawable/ic_baseline_question_answer_white_24dp</item>
<item name="ic_bug">@drawable/ic_bug_white_24dp</item>
<item name="ic_known_issues">@drawable/ic_format_list_bulleted_white_24dp</item>
+ <item name="ic_bookmark">@drawable/ic_bookmark_white_24dp</item>
<item name="master_switch_background">@color/master_switch_background_dark</item>
<item name="currently_playing_background">@color/highlight_dark</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>