diff options
Diffstat (limited to 'core/src')
30 files changed, 224 insertions, 105 deletions
diff --git a/core/src/main/java/com/aocate/media/AndroidMediaPlayer.java b/core/src/main/java/com/aocate/media/AndroidMediaPlayer.java index 17ee74a13..7c2ea3d61 100644 --- a/core/src/main/java/com/aocate/media/AndroidMediaPlayer.java +++ b/core/src/main/java/com/aocate/media/AndroidMediaPlayer.java @@ -14,13 +14,13 @@ package com.aocate.media; -import java.io.IOException; - import android.content.Context; import android.media.MediaPlayer; import android.net.Uri; import android.util.Log; +import java.io.IOException; + public class AndroidMediaPlayer extends MediaPlayerImpl { private final static String AMP_TAG = "AocateAndroidMediaPlayer"; 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 c0f71ed55..8860653a1 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 @@ -350,6 +350,19 @@ public class Feed extends FeedFile implements FlattrThing, PicassoImageResource return false; } + public FeedItem getMostRecentItem() { + // we could sort, but we don't need to, a simple search is fine... + Date mostRecentDate = new Date(0); + FeedItem mostRecentItem = null; + for (FeedItem item : items) { + if (item.getPubDate().after(mostRecentDate)) { + mostRecentDate = item.getPubDate(); + mostRecentItem = item; + } + } + return mostRecentItem; + } + @Override public int getTypeAsInt() { return FEEDFILETYPE_FEED; diff --git a/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java b/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java index 9f1eec754..c8497f509 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/feed/QueueEvent.java @@ -8,7 +8,7 @@ import java.util.List; public class QueueEvent { public enum Action { - ADDED, ADDED_ITEMS, REMOVED, CLEARED, DELETED_MEDIA, SORTED + ADDED, ADDED_ITEMS, REMOVED, CLEARED, DELETED_MEDIA, SORTED, MOVED } public final Action action; 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 022c03ca7..2c863d378 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 @@ -16,6 +16,8 @@ import org.json.JSONException; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -58,10 +60,12 @@ public class UserPreferences implements private static final String PREF_PLAYBACK_SPEED = "prefPlaybackSpeed"; private static final String PREF_PLAYBACK_SPEED_ARRAY = "prefPlaybackSpeedArray"; public static final String PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS = "prefPauseForFocusLoss"; - private static final String PREF_SEEK_DELTA_SECS = "prefSeekDeltaSecs"; + private static final String PREF_FAST_FORWARD_SECS = "prefFastForwardSecs"; + private static final String PREF_REWIND_SECS = "prefRewindSecs"; private static final String PREF_EXPANDED_NOTIFICATION = "prefExpandNotify"; private static final String PREF_PERSISTENT_NOTIFICATION = "prefPersistNotify"; public static final String PREF_QUEUE_ADD_TO_FRONT = "prefQueueAddToFront"; + public static final String PREF_HIDDEN_DRAWER_ITEMS = "prefHiddenDrawerItems"; // TODO: Make this value configurable private static final float PREF_AUTO_FLATTR_PLAYED_DURATION_THRESHOLD_DEFAULT = 0.8f; @@ -93,10 +97,12 @@ public class UserPreferences implements private String playbackSpeed; private String[] playbackSpeedArray; private boolean pauseForFocusLoss; - private int seekDeltaSecs; + private int fastForwardSecs; + private int rewindSecs; private boolean isFreshInstall; private int notifyPriority; private boolean persistNotify; + private List<String> hiddenDrawerItems; private UserPreferences(Context context) { this.context = context; @@ -109,8 +115,7 @@ public class UserPreferences implements * @throws IllegalArgumentException if context is null */ public static void createInstance(Context context) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Creating new instance of UserPreferences"); + Log.d(TAG, "Creating new instance of UserPreferences"); Validate.notNull(context); instance = new UserPreferences(context); @@ -157,7 +162,8 @@ public class UserPreferences implements playbackSpeedArray = readPlaybackSpeedArray(sp.getString( PREF_PLAYBACK_SPEED_ARRAY, null)); pauseForFocusLoss = sp.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false); - seekDeltaSecs = Integer.valueOf(sp.getString(PREF_SEEK_DELTA_SECS, "30")); + fastForwardSecs = sp.getInt(PREF_FAST_FORWARD_SECS, 30); + rewindSecs = sp.getInt(PREF_REWIND_SECS, 30); if (sp.getBoolean(PREF_EXPANDED_NOTIFICATION, false)) { notifyPriority = NotificationCompat.PRIORITY_MAX; } @@ -165,6 +171,7 @@ public class UserPreferences implements notifyPriority = NotificationCompat.PRIORITY_DEFAULT; } persistNotify = sp.getBoolean(PREF_PERSISTENT_NOTIFICATION, false); + hiddenDrawerItems = Arrays.asList(StringUtils.split(sp.getString(PREF_HIDDEN_DRAWER_ITEMS, ""), ',')); } private int readThemeValue(String valueFromPrefs) { @@ -343,9 +350,19 @@ public class UserPreferences implements return instance.playbackSpeedArray; } - public static int getSeekDeltaMs() { + public static int getFastFowardSecs() { instanceAvailable(); - return 1000 * instance.seekDeltaSecs; + return instance.fastForwardSecs; + } + + public static int getRewindSecs() { + instanceAvailable(); + return instance.rewindSecs; + } + + public static List<String> getHiddenDrawerItems() { + instanceAvailable(); + return new ArrayList<String>(instance.hiddenDrawerItems); } /** @@ -429,8 +446,10 @@ public class UserPreferences implements PREF_PLAYBACK_SPEED_ARRAY, null)); } else if (key.equals(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS)) { pauseForFocusLoss = sp.getBoolean(PREF_PAUSE_PLAYBACK_FOR_FOCUS_LOSS, false); - } else if (key.equals(PREF_SEEK_DELTA_SECS)) { - seekDeltaSecs = Integer.valueOf(sp.getString(PREF_SEEK_DELTA_SECS, "30")); + } else if (key.equals(PREF_FAST_FORWARD_SECS)) { + fastForwardSecs = sp.getInt(PREF_FAST_FORWARD_SECS, 30); + } else if (key.equals(PREF_REWIND_SECS)) { + rewindSecs = sp.getInt(PREF_REWIND_SECS, 30); } else if (key.equals(PREF_PAUSE_ON_HEADSET_DISCONNECT)) { pauseOnHeadsetDisconnect = sp.getBoolean(PREF_PAUSE_ON_HEADSET_DISCONNECT, true); } else if (key.equals(PREF_UNPAUSE_ON_HEADSET_RECONNECT)) { @@ -447,9 +466,25 @@ public class UserPreferences implements } } else if (key.equals(PREF_PERSISTENT_NOTIFICATION)) { persistNotify = sp.getBoolean(PREF_PERSISTENT_NOTIFICATION, false); + } else if (key.equals(PREF_HIDDEN_DRAWER_ITEMS)) { + hiddenDrawerItems = Arrays.asList(StringUtils.split(sp.getString(PREF_HIDDEN_DRAWER_ITEMS, ""), ',')); } } + public static void setPrefFastForwardSecs(int secs) { + Log.d(TAG, "setPrefFastForwardSecs(" + secs +")"); + SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(instance.context).edit(); + editor.putInt(PREF_FAST_FORWARD_SECS, secs); + editor.commit(); + } + + public static void setPrefRewindSecs(int secs) { + Log.d(TAG, "setPrefRewindSecs(" + secs +")"); + SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(instance.context).edit(); + editor.putInt(PREF_REWIND_SECS, secs); + editor.commit(); + } + public static void setPlaybackSpeed(String speed) { PreferenceManager.getDefaultSharedPreferences(instance.context).edit() .putString(PREF_PLAYBACK_SPEED, speed).apply(); @@ -509,6 +544,17 @@ public class UserPreferences implements instance.autoFlattrPlayedDurationThreshold = autoFlattrThreshold; } + public static void setHiddenDrawerItems(Context context, List<String> items) { + instanceAvailable(); + instance.hiddenDrawerItems = items; + String str = StringUtils.join(items, ','); + PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()) + .edit() + .putString(PREF_HIDDEN_DRAWER_ITEMS, str) + .commit(); + } + + /** * Return the folder where the app stores all of its data. This method will * return the standard data folder if none has been set by the user. @@ -524,8 +570,7 @@ public class UserPreferences implements .getDefaultSharedPreferences(context.getApplicationContext()); String strDir = prefs.getString(PREF_DATA_FOLDER, null); if (strDir == null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Using default data folder"); + Log.d(TAG, "Using default data folder"); return context.getExternalFilesDir(type); } else { File dataDir = new File(strDir); @@ -556,8 +601,7 @@ public class UserPreferences implements if (!typeDir.exists()) { if (dataDir.canWrite()) { if (!typeDir.mkdir()) { - Log.e(TAG, "Could not create data folder named " - + type); + Log.e(TAG, "Could not create data folder named " + type); return null; } } @@ -569,8 +613,7 @@ public class UserPreferences implements } public static void setDataFolder(String dir) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Result from DirectoryChooser: " + dir); + Log.d(TAG, "Result from DirectoryChooser: " + dir); instanceAvailable(); SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(instance.context); @@ -607,16 +650,13 @@ public class UserPreferences implements IMPORT_DIR); if (importDir != null) { if (importDir.exists()) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Import directory already exists"); + Log.d(TAG, "Import directory already exists"); } else { - if (BuildConfig.DEBUG) - Log.d(TAG, "Creating import directory"); + Log.d(TAG, "Creating import directory"); importDir.mkdir(); } } else { - if (BuildConfig.DEBUG) - Log.d(TAG, "Could not access external storage."); + Log.d(TAG, "Could not access external storage."); } } @@ -625,8 +665,7 @@ public class UserPreferences implements */ public static void restartUpdateAlarm(long triggerAtMillis, long intervalMillis) { instanceAvailable(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Restarting update alarm."); + Log.d(TAG, "Restarting update alarm."); AlarmManager alarmManager = (AlarmManager) instance.context .getSystemService(Context.ALARM_SERVICE); PendingIntent updateIntent = PendingIntent.getBroadcast( @@ -635,11 +674,9 @@ public class UserPreferences implements if (intervalMillis != 0) { alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, updateIntent); - if (BuildConfig.DEBUG) - Log.d(TAG, "Changed alarm to new interval"); + Log.d(TAG, "Changed alarm to new interval"); } else { - if (BuildConfig.DEBUG) - Log.d(TAG, "Automatic update was deactivated"); + Log.d(TAG, "Automatic update was deactivated"); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java index e39197387..6e318dd36 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/GpodnetSyncService.java @@ -176,7 +176,7 @@ public class GpodnetSyncService extends Service { private synchronized void processSubscriptionChanges(List<String> localSubscriptions, GpodnetSubscriptionChange changes) throws DownloadRequestException { for (String downloadUrl : changes.getAdded()) { if (!localSubscriptions.contains(downloadUrl)) { - Feed feed = new Feed(downloadUrl, new Date()); + Feed feed = new Feed(downloadUrl, new Date(0)); DownloadRequester.getInstance().downloadFeed(this, feed); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java index 43c345fec..cab63891b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java @@ -344,11 +344,11 @@ public class PlaybackService extends Service { break; case KeyEvent.KEYCODE_MEDIA_NEXT: case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: - mediaPlayer.seekDelta(UserPreferences.getSeekDeltaMs()); + mediaPlayer.seekDelta(UserPreferences.getFastFowardSecs() * 1000); break; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: case KeyEvent.KEYCODE_MEDIA_REWIND: - mediaPlayer.seekDelta(-UserPreferences.getSeekDeltaMs()); + mediaPlayer.seekDelta(-UserPreferences.getRewindSecs() * 1000); break; case KeyEvent.KEYCODE_MEDIA_STOP: if (status == PlayerStatus.PLAYING) { @@ -481,9 +481,8 @@ public class PlaybackService extends Service { } Intent statusUpdate = new Intent(ACTION_PLAYER_STATUS_CHANGED); - statusUpdate.putExtra(EXTRA_NEW_PLAYER_STATUS, newInfo.playerStatus.ordinal()); + // statusUpdate.putExtra(EXTRA_NEW_PLAYER_STATUS, newInfo.playerStatus.ordinal()); sendBroadcast(statusUpdate); - sendBroadcast(new Intent(ACTION_PLAYER_STATUS_CHANGED)); updateWidget(); refreshRemoteControlClientState(newInfo); bluetoothNotifyChange(newInfo, AVRCP_ACTION_PLAYER_STATUS_CHANGED); @@ -626,7 +625,6 @@ public class PlaybackService extends Service { prepareImmediately = startWhenPrepared = true; } else { Log.d(TAG, "No more episodes available to play"); - prepareImmediately = startWhenPrepared = false; stopForeground(true); stopWidgetUpdater(); @@ -933,7 +931,6 @@ public class PlaybackService extends Service { // Auto flattr if (isAutoFlattrable(media) && (media.getPlayedDuration() > UserPreferences.getAutoFlattrPlayedDurationThreshold() * duration)) { - Log.d(TAG, "saveCurrentPosition: performing auto flattr since played duration " + Integer.toString(media.getPlayedDuration()) + " is " + UserPreferences.getAutoFlattrPlayedDurationThreshold() * 100 + "% of file duration " + Integer.toString(duration)); DBTasks.flattrItemIfLoggedIn(this, item); diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java index f0acc3531..448ab05b9 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceMediaPlayer.java @@ -449,15 +449,15 @@ public class PlaybackServiceMediaPlayer { if (playerStatus == PlayerStatus.PLAYING || playerStatus == PlayerStatus.PAUSED || playerStatus == PlayerStatus.PREPARED) { - if (stream) { - // statusBeforeSeeking = playerStatus; - // setPlayerStatus(PlayerStatus.SEEKING, media); + if (!stream) { + statusBeforeSeeking = playerStatus; + setPlayerStatus(PlayerStatus.SEEKING, media); } mediaPlayer.seekTo(t); } else if (playerStatus == PlayerStatus.INITIALIZED) { media.setPosition(t); - startWhenPrepared.set(true); + startWhenPrepared.set(false); prepare(); } playerLock.unlock(); @@ -534,20 +534,20 @@ public class PlaybackServiceMediaPlayer { * Returns the position of the current media object or INVALID_TIME if the position could not be retrieved. */ public int getPosition() { - if (!playerLock.tryLock()) { - return INVALID_TIME; - } + playerLock.lock(); int retVal = INVALID_TIME; if (playerStatus == PlayerStatus.PLAYING || playerStatus == PlayerStatus.PAUSED - || playerStatus == PlayerStatus.PREPARED) { + || playerStatus == PlayerStatus.PREPARED + || playerStatus == PlayerStatus.SEEKING) { retVal = mediaPlayer.getCurrentPosition(); } else if (media != null && media.getPosition() > 0) { retVal = media.getPosition(); } playerLock.unlock(); + Log.d(TAG, "getPosition() -> " + retVal); return retVal; } @@ -735,6 +735,7 @@ public class PlaybackServiceMediaPlayer { int state; if (playerStatus != null) { + Log.d(TAG, "playerStatus: " + playerStatus.toString()); switch (playerStatus) { case PLAYING: state = PlaybackStateCompat.STATE_PLAYING; @@ -1095,13 +1096,13 @@ public class PlaybackServiceMediaPlayer { @Override public void onFastForward() { super.onFastForward(); - seekDelta(UserPreferences.getSeekDeltaMs()); + seekDelta(UserPreferences.getFastFowardSecs() * 1000); } @Override public void onRewind() { super.onRewind(); - seekDelta(-UserPreferences.getSeekDeltaMs()); + seekDelta(-UserPreferences.getRewindSecs() * 1000); } @Override diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java index cde03adea..fc73c9446 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackServiceTaskManager.java @@ -19,8 +19,10 @@ import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.QueueEvent; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.playback.Playable; + import de.greenrobot.event.EventBus; + /** * Manages the background tasks of PlaybackSerivce, i.e. * the sleep timer, the position saver, the widget updater and @@ -147,9 +149,9 @@ public class PlaybackServiceTaskManager { positionSaverFuture = schedExecutor.scheduleWithFixedDelay(positionSaver, POSITION_SAVER_WAITING_INTERVAL, POSITION_SAVER_WAITING_INTERVAL, TimeUnit.MILLISECONDS); - if (BuildConfig.DEBUG) Log.d(TAG, "Started PositionSaver"); + Log.d(TAG, "Started PositionSaver"); } else { - if (BuildConfig.DEBUG) Log.d(TAG, "Call to startPositionSaver was ignored."); + Log.d(TAG, "Call to startPositionSaver was ignored."); } } 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 9fa17bf72..7846f3dfc 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 @@ -560,7 +560,7 @@ public final class DBTasks { /** * Adds new Feeds to the database or updates the old versions if they already exists. If another Feed with the same * identifying value already exists, this method will add new FeedItems from the new Feed to the existing Feed. - * These FeedItems will be marked as unread. + * These FeedItems will be marked as unread with the exception of the most recent FeedItem. * <p/> * This method can update multiple feeds at once. Submitting a feed twice in the same method call can result in undefined behavior. * <p/> @@ -586,12 +586,16 @@ public final class DBTasks { final Feed savedFeed = searchFeedByIdentifyingValueOrID(context, adapter, newFeed); if (savedFeed == null) { - if (BuildConfig.DEBUG) - Log.d(TAG, - "Found no existing Feed with title " - + newFeed.getTitle() + ". Adding as new one." - ); + Log.d(TAG, "Found no existing Feed with title " + + newFeed.getTitle() + ". Adding as new one."); + // Add a new Feed + // all new feeds will have the most recent item marked as unplayed + FeedItem mostRecent = newFeed.getMostRecentItem(); + if (mostRecent != null) { + mostRecent.setRead(false); + } + newFeedsList.add(newFeed); resultFeeds[feedIdx] = newFeed; } else { 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 bd0cfee5b..8a5becac6 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 @@ -608,8 +608,7 @@ public class DBWriter { adapter.setQueue(queue); if (broadcastUpdate) { - EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.REMOVED, item)); - EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.ADDED, item, to)); + EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.MOVED, item, to)); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java index 6622eab73..fa41fb664 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/DateUtils.java @@ -1,5 +1,7 @@ package de.danoeh.antennapod.core.util; +import android.util.Log; + import org.apache.commons.lang3.StringUtils; import java.text.ParsePosition; @@ -96,6 +98,7 @@ public class DateUtils { return result; } } + Log.d(TAG, "Could not parse '" + date + "'"); return null; } diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java index 17c752bb6..a0d12d3e7 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java @@ -32,13 +32,11 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.Chapter; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.preferences.PlaybackPreferences; -import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.service.playback.PlaybackServiceMediaPlayer; import de.danoeh.antennapod.core.service.playback.PlayerStatus; @@ -174,8 +172,7 @@ public abstract class PlaybackController { * as the arguments of the launch intent. */ private void bindToService() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Trying to connect to service"); + Log.d(TAG, "Trying to connect to service"); AsyncTask<Void, Void, Intent> intentLoader = new AsyncTask<Void, Void, Intent>() { @Override protected Intent doInBackground(Void... voids) { @@ -211,8 +208,7 @@ public abstract class PlaybackController { * played media or null if no last played media could be found. */ private Intent getPlayLastPlayedMediaIntent() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Trying to restore last played media"); + Log.d(TAG, "Trying to restore last played media"); SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(activity.getApplicationContext()); long currentlyPlayingMedia = PlaybackPreferences @@ -240,8 +236,7 @@ public abstract class PlaybackController { return serviceIntent; } } - if (BuildConfig.DEBUG) - Log.d(TAG, "No last played media found"); + Log.d(TAG, "No last played media found"); return null; } @@ -253,8 +248,7 @@ public abstract class PlaybackController { || (positionObserverFuture != null && positionObserverFuture .isDone()) || positionObserverFuture == null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Setting up position observer"); + Log.d(TAG, "Setting up position observer"); positionObserver = new MediaPositionObserver(); positionObserverFuture = schedExecutor.scheduleWithFixedDelay( positionObserver, MediaPositionObserver.WAITING_INTERVALL, @@ -266,8 +260,7 @@ public abstract class PlaybackController { private void cancelPositionObserver() { if (positionObserverFuture != null) { boolean result = positionObserverFuture.cancel(true); - if (BuildConfig.DEBUG) - Log.d(TAG, "PositionObserver cancelled. Result: " + result); + Log.d(TAG, "PositionObserver cancelled. Result: " + result); } } @@ -295,8 +288,7 @@ public abstract class PlaybackController { protected BroadcastReceiver statusUpdate = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Received statusUpdate Intent."); + Log.d(TAG, "Received statusUpdate Intent."); if (isConnectedToPlaybackService()) { PlaybackServiceMediaPlayer.PSMPInfo info = playbackService.getPSMPInfo(); status = info.playerStatus; @@ -353,8 +345,7 @@ public abstract class PlaybackController { } } else { - if (BuildConfig.DEBUG) - Log.d(TAG, "Bad arguments. Won't handle intent"); + Log.d(TAG, "Bad arguments. Won't handle intent"); } } else { bindToService(); @@ -425,6 +416,7 @@ public abstract class PlaybackController { pauseResource = R.drawable.ic_av_pause_circle_outline_80dp; } + Log.d(TAG, "status: " + status.toString()); switch (status) { case ERROR: @@ -470,6 +462,7 @@ public abstract class PlaybackController { updatePlayButtonAppearance(playResource, playText); break; case SEEKING: + onPositionObserverUpdate(); postStatusMsg(R.string.player_seeking_msg); break; case INITIALIZED: @@ -505,8 +498,7 @@ public abstract class PlaybackController { * information has to be refreshed */ void queryService() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Querying service info"); + Log.d(TAG, "Querying service info"); if (playbackService != null) { status = playbackService.getStatus(); media = playbackService.getPlayable(); @@ -614,28 +606,6 @@ public abstract class PlaybackController { }; } - public OnClickListener newOnRevButtonClickListener() { - return new OnClickListener() { - @Override - public void onClick(View v) { - if (status == PlayerStatus.PLAYING) { - playbackService.seekDelta(-UserPreferences.getSeekDeltaMs()); - } - } - }; - } - - public OnClickListener newOnFFButtonClickListener() { - return new OnClickListener() { - @Override - public void onClick(View v) { - if (status == PlayerStatus.PLAYING) { - playbackService.seekDelta(UserPreferences.getSeekDeltaMs()); - } - } - }; - } - public boolean serviceAvailable() { return playbackService != null; } diff --git a/core/src/main/res/drawable-hdpi/ic_feed_grey600_24dp.png b/core/src/main/res/drawable-hdpi/ic_feed_grey600_24dp.png Binary files differindex 46be3e14e..0c3bb0757 100755 --- a/core/src/main/res/drawable-hdpi/ic_feed_grey600_24dp.png +++ b/core/src/main/res/drawable-hdpi/ic_feed_grey600_24dp.png diff --git a/core/src/main/res/drawable-hdpi/ic_feed_white_24dp.png b/core/src/main/res/drawable-hdpi/ic_feed_white_24dp.png Binary files differindex 3d57127f5..667300129 100755 --- a/core/src/main/res/drawable-hdpi/ic_feed_white_24dp.png +++ b/core/src/main/res/drawable-hdpi/ic_feed_white_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_feed_grey600_24dp.png b/core/src/main/res/drawable-mdpi/ic_feed_grey600_24dp.png Binary files differindex 79f082610..d46b325d8 100755 --- a/core/src/main/res/drawable-mdpi/ic_feed_grey600_24dp.png +++ b/core/src/main/res/drawable-mdpi/ic_feed_grey600_24dp.png diff --git a/core/src/main/res/drawable-mdpi/ic_feed_white_24dp.png b/core/src/main/res/drawable-mdpi/ic_feed_white_24dp.png Binary files differindex 15a4b16bf..ac94476c2 100755 --- a/core/src/main/res/drawable-mdpi/ic_feed_white_24dp.png +++ b/core/src/main/res/drawable-mdpi/ic_feed_white_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_feed_grey600_24dp.png b/core/src/main/res/drawable-xhdpi/ic_feed_grey600_24dp.png Binary files differindex 5cb0262ee..b25d64863 100755 --- a/core/src/main/res/drawable-xhdpi/ic_feed_grey600_24dp.png +++ b/core/src/main/res/drawable-xhdpi/ic_feed_grey600_24dp.png diff --git a/core/src/main/res/drawable-xhdpi/ic_feed_white_24dp.png b/core/src/main/res/drawable-xhdpi/ic_feed_white_24dp.png Binary files differindex 5f34b0492..3c3e74c1d 100755 --- a/core/src/main/res/drawable-xhdpi/ic_feed_white_24dp.png +++ b/core/src/main/res/drawable-xhdpi/ic_feed_white_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_feed_grey600_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_feed_grey600_24dp.png Binary files differindex 01ef2ee4d..aacf24d28 100755 --- a/core/src/main/res/drawable-xxhdpi/ic_feed_grey600_24dp.png +++ b/core/src/main/res/drawable-xxhdpi/ic_feed_grey600_24dp.png diff --git a/core/src/main/res/drawable-xxhdpi/ic_feed_white_24dp.png b/core/src/main/res/drawable-xxhdpi/ic_feed_white_24dp.png Binary files differindex 6dd465852..625dbaa1f 100755 --- a/core/src/main/res/drawable-xxhdpi/ic_feed_white_24dp.png +++ b/core/src/main/res/drawable-xxhdpi/ic_feed_white_24dp.png diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml index 44421240b..2dbe4e8d4 100644 --- a/core/src/main/res/values-es/strings.xml +++ b/core/src/main/res/values-es/strings.xml @@ -88,6 +88,7 @@ <string name="remove_episode_lable">Quitar episodio</string> <string name="mark_read_label">Marcar como leído</string> <string name="mark_unread_label">Marcar como no leído</string> + <string name="marked_as_read_label">Marcado como leído</string> <string name="add_to_queue_label">Añadir a la cola</string> <string name="remove_from_queue_label">Quitar de la cola</string> <string name="visit_website_label">Visitar el sitio web</string> diff --git a/core/src/main/res/values-it-rIT/strings.xml b/core/src/main/res/values-it-rIT/strings.xml index 52873d892..69bab7326 100644 --- a/core/src/main/res/values-it-rIT/strings.xml +++ b/core/src/main/res/values-it-rIT/strings.xml @@ -60,7 +60,7 @@ <string name="auto_download_label">Includi nei download automatici</string> <!--'Add Feed' Activity labels--> <string name="feedurl_label">URL del feed</string> - <string name="etxtFeedurlHint">URL del feed o del sito web</string> + <string name="etxtFeedurlHint">www.example.com/feed</string> <string name="txtvfeedurl_label">Aggiungi un Podcast tramite URL</string> <string name="podcastdirectories_label">Trova un podcast nella directory</string> <string name="podcastdirectories_descr">Puoi cercare dei nuovi podcast in base al nome, alla categoria o alla popolarità nella directory di gpodder.net.</string> @@ -85,6 +85,7 @@ <string name="remove_episode_lable">Rimuovi l\'episodio</string> <string name="mark_read_label">Segna come letto</string> <string name="mark_unread_label">Segna come non letto</string> + <string name="marked_as_read_label">Segnato come letto</string> <string name="add_to_queue_label">Aggiungi alla coda</string> <string name="remove_from_queue_label">Rimuovi dalla coda</string> <string name="visit_website_label">Visita il sito</string> @@ -225,6 +226,7 @@ <string name="pref_autodl_wifi_filter_sum">Abilita il download automatico solo per alcune reti Wi-Fi selezionate.</string> <string name="pref_automatic_download_on_battery_title">Scarica quando la batteria non è in carica</string> <string name="pref_automatic_download_on_battery_sum">Permetti il download automatico quando la batteria non è in carica</string> + <string name="pref_parallel_downloads_title">Download paralleli</string> <string name="pref_episode_cache_title">Cache degli episodi</string> <string name="pref_theme_title_light">Light</string> <string name="pref_theme_title_dark">Dark</string> @@ -356,4 +358,5 @@ <string name="authentication_descr">Cambia il tuo nome utente e la tua password per questo podcast e i suoi episodi.</string> <!--AntennaPodSP--> <string name="sp_apps_importing_feeds_msg">Importazione di sottoscrizioni da applicazioni monouso in corso...</string> + <string name="search_itunes_label">Cerca su iTunes</string> </resources> diff --git a/core/src/main/res/values-iw-rIL/strings.xml b/core/src/main/res/values-iw-rIL/strings.xml index dd129457d..b52bb4144 100644 --- a/core/src/main/res/values-iw-rIL/strings.xml +++ b/core/src/main/res/values-iw-rIL/strings.xml @@ -58,6 +58,7 @@ <string name="close_label">סגור</string> <string name="retry_label">נסה שוב</string> <string name="auto_download_label">כלול בהורדות אוטומטיות</string> + <string name="parallel_downloads_suffix">\u0020הורדות במקביל</string> <!--'Add Feed' Activity labels--> <string name="feedurl_label">כתובת הזנה</string> <string name="etxtFeedurlHint">כתובת של הזנה או אתר אינטרנט</string> @@ -68,6 +69,8 @@ <!--Actions on feeds--> <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_read_feed_confirmation_msg">אנא אשר שאתה רוצה לסמן את כל פרקים בהזנה זו כנקראים.</string> <string name="show_info_label">הצג מידע</string> <string name="remove_feed_label">הסר פודקאסט</string> <string name="share_link_label">שתף קישור אתר</string> @@ -85,6 +88,7 @@ <string name="remove_episode_lable">הסר פרק</string> <string name="mark_read_label">סמן כנקרא</string> <string name="mark_unread_label">סמן כלא נקרא</string> + <string name="marked_as_read_label">סומן כנקרא</string> <string name="add_to_queue_label">הוסף לתור</string> <string name="remove_from_queue_label">הסר מהתור</string> <string name="visit_website_label">בקר באתר</string> @@ -150,6 +154,7 @@ <string name="duration">משך</string> <string name="ascending">בסדר עולה</string> <string name="descending">בסדר יורד</string> + <string name="clear_queue_confirmation_msg">אנא אשר שאתה רוצה לנקות את התור מכל הפרקים שבו</string> <!--Flattr--> <string name="flattr_auth_label">כניסה ל-Fattr</string> <string name="flattr_auth_explanation">לחץ על הכפתור למטה כדי להתחיל את תהליך האימות. אתה תועבר למסך כניסת flattr בדפדפן שלך ותתבקש לתת לאנטנה-פוד רשות לתרום באמצעות flattr. לאחר שקבלת אישור, תוכל לחזור למסך זה באופן אוטומטי.</string> @@ -226,6 +231,7 @@ <string name="pref_autodl_wifi_filter_sum">אפשר הורדה אוטומטית דרך רשתות אלחוטייות נבחרות.</string> <string name="pref_automatic_download_on_battery_title">הורדה כשלא טוען</string> <string name="pref_automatic_download_on_battery_sum">אפשר הורדה אוטומטית כשהסוללה אינה נטענת</string> + <string name="pref_parallel_downloads_title">הורדות במקביל</string> <string name="pref_episode_cache_title">מטמון פרקים</string> <string name="pref_theme_title_light">בהיר</string> <string name="pref_theme_title_dark">כהה</string> @@ -250,6 +256,8 @@ <string name="pref_persistNotify_title">פקדי הפעלה קבועים</string> <string name="pref_persistNotify_sum">שמר בקרי הודעה ומסך נעילה בעת השהיית השמעה.</string> <string name="pref_expand_notify_unsupport_toast">גרסאות אנדרויד לפני 4.1 לא תומכות בהודעות מורחבות.</string> + <string name="pref_queueAddToFront_sum">הוסף פרקים חדשים לראש התור.</string> + <string name="pref_queueAddToFront_title">הוסף לראש התור.</string> <!--Auto-Flattr dialog--> <string name="auto_flattr_enable">הפעל תרומות flattr אוטומטיות</string> <string name="auto_flattr_after_percent">תרום באמצעות flattr כשנוגן %d אחוזים מהפרק</string> @@ -264,6 +272,9 @@ <string name="found_in_title_label">נמצא בכותרת</string> <!--OPML import and export--> <string name="opml_import_txtv_button_lable">קבצי OPML יאפשרו לכך לנייד פודקאסטים מלוכד פודקאסטים אחד למשנו.</string> + <string name="opml_import_explanation_1">בחר נתיב קובץ ספציפי במערכת הקבצים המקומית.</string> + <string name="opml_import_explanation_2">השתמש ביישומים חיצוניים כמו Dropbox, Google Drive או מנהל הקבצים האהוב עליך לפתוח קובץ OPML.</string> + <string name="opml_import_explanation_3">יישומים רבים כמו Google Mail, Dropbox, Google Drive ורוב מנהלי הקבצים יכולים <i>לפתוח</i> קבצי OPML <i>עם</i> אנטנה-פוד.</string> <string name="start_import_label">התחל יבוא</string> <string name="opml_import_label">יבוא OPML</string> <string name="opml_directory_error">שגיאה!</string> @@ -272,6 +283,8 @@ <string name="opml_import_error_dir_empty">ספריית היבוא ריקה.</string> <string name="select_all_label">בחר הכל</string> <string name="deselect_all_label">בטל בחירות</string> + <string name="choose_file_from_filesystem">ממערכת הקבצים המקומית</string> + <string name="choose_file_from_external_application">השתמש באפליקציה חיצונית</string> <string name="opml_export_label">יצוא OPML</string> <string name="exporting_label">מייצא...</string> <string name="export_error_label">שגיאת יצוא</string> @@ -357,4 +370,5 @@ <string name="authentication_descr">שנה את שם המשתמש והסיסמה שלך לפודקאסט ופרקים שלו.</string> <!--AntennaPodSP--> <string name="sp_apps_importing_feeds_msg">מייבא רישום מאפליקציות יעודיות...</string> + <string name="search_itunes_label">חפש בiTunes</string> </resources> diff --git a/core/src/main/res/values-ko/strings.xml b/core/src/main/res/values-ko/strings.xml index 8e8a264f4..7132031e4 100644 --- a/core/src/main/res/values-ko/strings.xml +++ b/core/src/main/res/values-ko/strings.xml @@ -58,16 +58,19 @@ <string name="close_label">닫기</string> <string name="retry_label">다시 시도</string> <string name="auto_download_label">자동 다운로드에 포함</string> + <string name="parallel_downloads_suffix">\u0020동시 다운로드</string> <!--'Add Feed' Activity labels--> <string name="feedurl_label">피드 URL</string> <string name="etxtFeedurlHint">피드의 URL 또는 홈페이지</string> <string name="txtvfeedurl_label">URL로 팟캐스트를 추가</string> <string name="podcastdirectories_label">디렉터리에서 팟캐스트 찾기</string> - <string name="podcastdirectories_descr">gpodder.net 디렉터리에서 이름, 분류, 인기에 따라 새 팟캐스트를 검색할 수 있습니다</string> + <string name="podcastdirectories_descr">gpodder.net 디렉터리에서 이름, 분류, 인기에 따라 새 팟캐스트를 검색할 수 있고, iTunes 스토어에서 검색할 수도 있습니다.</string> <string name="browse_gpoddernet_label">gpodder.net 둘러보기</string> <!--Actions on feeds--> <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_read_feed_confirmation_msg">이 피드의 에피소드 모두를 읽은 것으로 표시하는지 확인하십시오.</string> <string name="show_info_label">정보 표시</string> <string name="remove_feed_label">팟캐스트 제거</string> <string name="share_link_label">홈페이지 링크 공유</string> @@ -85,6 +88,7 @@ <string name="remove_episode_lable">에피소드 제거</string> <string name="mark_read_label">읽은 것으로 표시</string> <string name="mark_unread_label">읽지 않은 것으로 표시</string> + <string name="marked_as_read_label">읽은 것으로 표시</string> <string name="add_to_queue_label">대기열에 추가</string> <string name="remove_from_queue_label">대기열에서 제거</string> <string name="visit_website_label">홈페이지 보기</string> @@ -150,6 +154,7 @@ <string name="duration">기간</string> <string name="ascending">오름차순</string> <string name="descending">내림차순</string> + <string name="clear_queue_confirmation_msg">내부의 모든 에피소드 대기열을 지울지 확인하십시오.</string> <!--Flattr--> <string name="flattr_auth_label">Flattr 로그인</string> <string name="flattr_auth_explanation">인증 절차를 시작하려면 아래 버튼을 누르십시오. 브라우저의 Flattr 로그인 화면으로 이동하고, 안테나팟에 Flattr를 사용을 허락 여부를 물어봅니다. 허락을 하면 자동으로 이 화면으로 돌아옵니다.</string> @@ -225,6 +230,7 @@ <string name="pref_autodl_wifi_filter_sum">선택한 Wi-Fi 네트워크에 대해서만 자동 다운로드를 허용합니다.</string> <string name="pref_automatic_download_on_battery_title">충전하지 않을 때 다운로드</string> <string name="pref_automatic_download_on_battery_sum">배터리 충전 중이 아닐 때 자동 다운로드 허용</string> + <string name="pref_parallel_downloads_title">동시 다운로드</string> <string name="pref_episode_cache_title">에피소드 임시 저장</string> <string name="pref_theme_title_light">밝게</string> <string name="pref_theme_title_dark">어둡게</string> @@ -249,6 +255,8 @@ <string name="pref_persistNotify_title">재생 조작 고정</string> <string name="pref_persistNotify_sum">재생이 일시 중지했을 때에도 알림과 잠금 화면의 조작 기능 유지</string> <string name="pref_expand_notify_unsupport_toast">안드로이드 4.1 전 버전에서는 알림 확장을 지원하지 않습니다.</string> + <string name="pref_queueAddToFront_sum">새 에피소드를 대기열 앞에 추가합니다.</string> + <string name="pref_queueAddToFront_title">대기열 앞에 추가</string> <!--Auto-Flattr dialog--> <string name="auto_flattr_enable">자동 flattr 사용</string> <string name="auto_flattr_after_percent">%d 퍼센트를 재생하면 에피소드에 flattr합니다</string> @@ -263,6 +271,9 @@ <string name="found_in_title_label">제목에서 발견</string> <!--OPML import and export--> <string name="opml_import_txtv_button_lable">OPML 파일을 이용하면 팟캐스트 목록을 한 팟캐스트 프로그램에서 다른 팟캐스트 프로그램으로 옮길 수 있습니다.</string> + <string name="opml_import_explanation_1">로컬 파일시스템의 특정 파일 경로를 선택하십시오.</string> + <string name="opml_import_explanation_2">OPML 파일을 여는데 Dropbox, Google Drive, 또는 파일 관리자 와 같은 외부 앱을 사용합니다.</string> + <string name="opml_import_explanation_3">Google Mail, Dropbox, Google Drive 및 대부분의 파일 관리자는 OPML 파일을 안테나팟<i>으로</i> <i>열 수</i> 있습니다.</string> <string name="start_import_label">가져오기 시작</string> <string name="opml_import_label">OPML 가져오기</string> <string name="opml_directory_error">오류!</string> @@ -271,6 +282,8 @@ <string name="opml_import_error_dir_empty">가져오기 디렉터리가 비어 있습니다.</string> <string name="select_all_label">모두 선택</string> <string name="deselect_all_label">모두 선택 해제</string> + <string name="choose_file_from_filesystem">로컬 파일시스템에서</string> + <string name="choose_file_from_external_application">외부 앱 사용</string> <string name="opml_export_label">OPML 내보내기</string> <string name="exporting_label">내보내는 중...</string> <string name="export_error_label">내보내기 오류</string> @@ -356,4 +369,5 @@ <string name="authentication_descr">이 팟캐스트와 에피소드에 대한 사용자 이름과 비밀번호를 바꿉니다.</string> <!--AntennaPodSP--> <string name="sp_apps_importing_feeds_msg">단일 용도 앱에서 구독 정보를 가져옵니다...</string> + <string name="search_itunes_label">iTunes 검색</string> </resources> diff --git a/core/src/main/res/values-ru/strings.xml b/core/src/main/res/values-ru/strings.xml index 8e209a5ad..e08e40e56 100644 --- a/core/src/main/res/values-ru/strings.xml +++ b/core/src/main/res/values-ru/strings.xml @@ -58,20 +58,26 @@ <string name="close_label">Закрыть</string> <string name="retry_label">Повторить</string> <string name="auto_download_label">Добавить в автозагрузки</string> + <string name="parallel_downloads_suffix">\u0020одновременных загрузок</string> <!--'Add Feed' Activity labels--> <string name="feedurl_label">URL канала</string> + <string name="etxtFeedurlHint">www.example.com/feed</string> <string name="txtvfeedurl_label">Добавить подкаст по URL</string> <string name="podcastdirectories_label">Найти подкаст в каталоге</string> + <string name="podcastdirectories_descr">Вы можете искать новые подкасты по имени, категории или популярности в каталоге gpodder.net и в магазине iTunes.</string> <string name="browse_gpoddernet_label">Просмотр gpodder.net</string> <!--Actions on feeds--> <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_read_feed_confirmation_msg">Подтвердите, что хотите пометить все эпизоды в этом канале как прослушанные.</string> <string name="show_info_label">Показать информацию</string> <string name="remove_feed_label">Удалить подкаст</string> <string name="share_link_label">Поделиться ссылкой на сайт</string> <string name="share_source_label">Ссылка на канал</string> <string name="feed_delete_confirmation_msg">Подтвердите удаление канала и всех выпусков, загруженных с этого канала.</string> <string name="feed_remover_msg">Удаление канала</string> + <string name="load_complete_feed">Обновить весь канал</string> <!--actions on feeditems--> <string name="download_label">Загрузить</string> <string name="play_label">Воспроизвести</string> @@ -82,6 +88,7 @@ <string name="remove_episode_lable">Удалить</string> <string name="mark_read_label">Отметить как прочитанное</string> <string name="mark_unread_label">Отметить как непрочитанное</string> + <string name="marked_as_read_label">Помечено как прослушанное</string> <string name="add_to_queue_label">Добавить в очередь</string> <string name="remove_from_queue_label">Удалить из очереди</string> <string name="visit_website_label">Посетить сайт</string> @@ -146,6 +153,7 @@ <string name="duration">По продолжительности</string> <string name="ascending">По возрастанию</string> <string name="descending">По убыванию</string> + <string name="clear_queue_confirmation_msg">Подтвердите, что хотите очистить очередь от ВСЕХ эпизодов.</string> <!--Flattr--> <string name="flattr_auth_label">Авторизоваться в Flattr</string> <string name="flattr_auth_explanation">Нажмите кнопку, чтобы начать процесс авторизации. Вы будете перенаправлены на сайт Flattr, где нужно будет разрешить AntennaPod использовать ваш аккаунт. После этого вы автоматически будете перенаправлены обратно.</string> @@ -218,6 +226,7 @@ <string name="pref_autodl_wifi_filter_sum">Разрешать автоматическую загрузку только для выбранных сетей Wi-Fi.</string> <string name="pref_automatic_download_on_battery_title">Загружать без зарядки</string> <string name="pref_automatic_download_on_battery_sum">Разрешать автоматическую загрузку когда батарея не заряжается</string> + <string name="pref_parallel_downloads_title">Одновременные загрузки</string> <string name="pref_episode_cache_title">Кэш выпусков</string> <string name="pref_theme_title_light">Светлая</string> <string name="pref_theme_title_dark">Тёмная</string> @@ -243,6 +252,9 @@ <string name="pref_persistNotify_sum">Сохранять уведомление и кнопки воспроизведения на экране блокировки во время паузы.</string> <string name="pref_expand_notify_unsupport_toast">Версии Android ниже 4.1 не поддерживают расширенные уведомления.</string> <!--Auto-Flattr dialog--> + <string name="auto_flattr_after_percent">Поддерживать через Flattr эпизоды, прослушанные на %d процентов</string> + <string name="auto_flattr_ater_beginning">Поддерживать эпизод через Flattr в начале воспроизведения</string> + <string name="auto_flattr_ater_end">Поддерживать эпизод через Flattr в конце воспроизведения</string> <!--Search--> <string name="search_hint">Поиск каналов или выпусков</string> <string name="found_in_shownotes_label">Найдено в описании выпуска</string> @@ -252,6 +264,7 @@ <string name="found_in_title_label">Найдено в заголовке</string> <!--OPML import and export--> <string name="opml_import_txtv_button_lable">OPML файлы позволяют перемещать ваши подкасты из одного менеджера подкастов в другой.</string> + <string name="opml_import_explanation_1">Укажите путь к файлу на устройстве</string> <string name="start_import_label">Начать импорт</string> <string name="opml_import_label">Импорт OPML</string> <string name="opml_directory_error">Ошибка</string> @@ -282,6 +295,7 @@ <string name="gpodnetauth_login_title">Войти</string> <string name="gpodnetauth_login_descr">Добро пожаловать в процесс авторизации на gpodder.net. Сначала введите вашу информацию для авторизации:</string> <string name="gpodnetauth_login_butLabel">Войти</string> + <string name="gpodnetauth_login_register">Если у вас ещё нет аккаунта, вы можете создать его здесь:\nhttps://gpodder.net/register/</string> <string name="username_label">Имя пользователя</string> <string name="password_label">Пароль</string> <string name="gpodnetauth_device_title">Выбор устройства</string> @@ -342,4 +356,5 @@ <string name="authentication_label">Авторизация</string> <!--AntennaPodSP--> <string name="sp_apps_importing_feeds_msg">Импорт подписок из одноцелевых приложений…</string> + <string name="search_itunes_label">Поиск в iTunes</string> </resources> diff --git a/core/src/main/res/values-tr/strings.xml b/core/src/main/res/values-tr/strings.xml index 52b92157e..265a9025c 100644 --- a/core/src/main/res/values-tr/strings.xml +++ b/core/src/main/res/values-tr/strings.xml @@ -58,14 +58,19 @@ <string name="close_label">Kapat</string> <string name="retry_label">Yeniden dene</string> <string name="auto_download_label">Otomatik indirmelere dahil et</string> + <string name="parallel_downloads_suffix">\u0020paralel indirmeler</string> <!--'Add Feed' Activity labels--> <string name="feedurl_label">Besleme Adresi</string> + <string name="etxtFeedurlHint">www.example.com/feed</string> <string name="txtvfeedurl_label">URL ile cep yayını ekle</string> <string name="podcastdirectories_label">Dizinde cep yayını bul</string> + <string name="podcastdirectories_descr">gdpodder.net dizininde yeni cep yayınlarını isme, kategoriye veya popülerliğe göre arayabilirsiniz veya iTunes mağazasında arama yapabilirsiniz.</string> <string name="browse_gpoddernet_label">gpodder.net\'e gözat</string> <!--Actions on feeds--> <string name="mark_all_read_label">Hepsini okundu olarak işaretle</string> <string name="mark_all_read_msg">Tüm bölümler okundu olarak işaretlendi</string> + <string name="mark_all_read_confirmation_msg">Lütfen tüm bölümleri okundu olarak işaretlemek istediğinizi onaylayın.</string> + <string name="mark_all_read_feed_confirmation_msg">Lütfen bu besleme içindeki tüm bölümleri okundu olarak işaretlemek istediğinizi onaylayın.</string> <string name="show_info_label">Bilgiyi göster</string> <string name="remove_feed_label">Cep yayını kaldır</string> <string name="share_link_label">Web sayfası bağlantısı paylaş</string> @@ -83,6 +88,7 @@ <string name="remove_episode_lable">Bölümü kaldır</string> <string name="mark_read_label">Okundu olarak işaretle</string> <string name="mark_unread_label">Okunmadı olarak işaretle</string> + <string name="marked_as_read_label">Okundu olarak işaretlendi</string> <string name="add_to_queue_label">Kuyruğa Ekle</string> <string name="remove_from_queue_label">Kuyruktan Kaldır</string> <string name="visit_website_label">Siteyi Ziyaret Et</string> @@ -148,6 +154,7 @@ <string name="duration">Süre</string> <string name="ascending">Artan</string> <string name="descending">Azalan</string> + <string name="clear_queue_confirmation_msg">Lütfen içerisindeki BÜTÜN ölümlerle birlikte kuyruğu temizleme isteğinizi onaylayın.</string> <!--Flattr--> <string name="flattr_auth_label">Flattr giriş</string> <string name="flattr_auth_explanation">Yetkilendirme işlemini başlatmak için aşağıdaki butona basın. Tarayıcınızda flattr giriş ekranına yönlendirileceksiniz ve AntennaPod\'un flattr ile etkileşime girebilmesi için izniniz istenecek. İzin verdikten sonra otomatik olarak bu ekrana döneceksiniz.</string> @@ -223,6 +230,7 @@ <string name="pref_autodl_wifi_filter_sum">Seçilen kablosuz ağlar için otomatik indirmeye izin ver.</string> <string name="pref_automatic_download_on_battery_title">Şarj olmuyorken indir</string> <string name="pref_automatic_download_on_battery_sum">Pil şarj olmuyorken otomatik indirmeye izin ver</string> + <string name="pref_parallel_downloads_title">Paralel indirmeler</string> <string name="pref_episode_cache_title">Bölüm ön belleği</string> <string name="pref_theme_title_light">Aydınlık</string> <string name="pref_theme_title_dark">Karanlık</string> @@ -247,6 +255,8 @@ <string name="pref_persistNotify_title">Kalıcı oynatma kontrolleri</string> <string name="pref_persistNotify_sum">Çalma duraklatıldığında bildirim ve ekran kilidi ayarlarını sakla.</string> <string name="pref_expand_notify_unsupport_toast">Android 4.1 öncesi sürümler genişletilmiş bildirimleri desteklememektedir.</string> + <string name="pref_queueAddToFront_sum">Yeni bölümleri kuyruğun önüne ekle.</string> + <string name="pref_queueAddToFront_title">Kuyruğun önüne ekle.</string> <!--Auto-Flattr dialog--> <string name="auto_flattr_enable">Otomatik Flattr\'lamayı etkinleştir</string> <string name="auto_flattr_after_percent">Bölümün yüzde %d kısmı oynatıldığında Flattr\'la</string> @@ -261,6 +271,9 @@ <string name="found_in_title_label">Başlıkta bulundu</string> <!--OPML import and export--> <string name="opml_import_txtv_button_lable">OPML dosyaları cep yayınlarını bir cihazdan diğerine aktarmanıza yarar.</string> + <string name="opml_import_explanation_1">Yerel dosya sisteminden belirli bir yol seçin.</string> + <string name="opml_import_explanation_2">OPML dosyasını açmak için harici uygulamalardan Dropbox, Google Drive veya kendi favori dosya yöneticinizi kullanın.</string> + <string name="opml_import_explanation_3">Google Mail, Dropbox, Google Drive gibi birçok uygulama ve çoğu dosya yöneticisi OPML dosyalarını AntennaPod <i>ile</i> <i>açabilir.</i></string> <string name="start_import_label">İçe aktarmayı başlat</string> <string name="opml_import_label">OPML içe aktar</string> <string name="opml_directory_error">HATA!</string> @@ -269,9 +282,12 @@ <string name="opml_import_error_dir_empty">İça aktarma dizini boş</string> <string name="select_all_label">Hepsini seç</string> <string name="deselect_all_label">Tüm seçimleri geri al</string> + <string name="choose_file_from_filesystem">Yerel dosya sisteminden</string> + <string name="choose_file_from_external_application">Harici uygulama kullan</string> <string name="opml_export_label">OPML dışa aktar</string> <string name="exporting_label">Dışa aktarılıyor...</string> <string name="export_error_label">Dışa aktarma hatası</string> + <string name="opml_export_success_title">Opml dışa aktarma başarılı.</string> <string name="opml_export_success_sum">.opml dosyasy yazıldı: \u0020</string> <!--Sleep timer--> <string name="set_sleeptimer_label">Zamanlayıcıyı ayarla</string> @@ -353,4 +369,5 @@ <string name="authentication_descr">Bu cep yayını ve içerdiği bölümler için kullanıcı adı şifreyi değiştir.</string> <!--AntennaPodSP--> <string name="sp_apps_importing_feeds_msg">Üyelikler tek-amaçlı uygulamalardan içe aktarılıyor...</string> + <string name="search_itunes_label">iTunes\'da Arama</string> </resources> diff --git a/core/src/main/res/values-uk-rUA/strings.xml b/core/src/main/res/values-uk-rUA/strings.xml index 9ceab72f6..1602e6253 100644 --- a/core/src/main/res/values-uk-rUA/strings.xml +++ b/core/src/main/res/values-uk-rUA/strings.xml @@ -58,6 +58,7 @@ <string name="close_label">Закрити</string> <string name="retry_label">Повторити знову</string> <string name="auto_download_label">Включити до автозавантаження</string> + <string name="parallel_downloads_suffix">\u0020паралельні завантаження</string> <!--'Add Feed' Activity labels--> <string name="feedurl_label">Посилання на канал</string> <string name="etxtFeedurlHint">URL канала або сайта</string> @@ -68,6 +69,8 @@ <!--Actions on feeds--> <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_read_feed_confirmation_msg">Будь ласка, підтвердіть що ви бажаєте позначити всі епізоди цього канала як прочитані.</string> <string name="show_info_label">Інформація</string> <string name="remove_feed_label">Видалити подкаст</string> <string name="share_link_label">Поділитися URL сайту</string> @@ -85,6 +88,7 @@ <string name="remove_episode_lable">Видалити епізод</string> <string name="mark_read_label">Позначити як переглянутий</string> <string name="mark_unread_label">Позначити як не переглянутий</string> + <string name="marked_as_read_label">Позначено як прочитане</string> <string name="add_to_queue_label">Додати до черги</string> <string name="remove_from_queue_label">Видалити з черги</string> <string name="visit_website_label">Відкрити сайт</string> @@ -150,6 +154,7 @@ <string name="duration">За тривалістю</string> <string name="ascending">За зростанням</string> <string name="descending">За спаданням</string> + <string name="clear_queue_confirmation_msg">Будь ласка, підтвердіть що ви бажаєте вилучити всі епізоди з черги.</string> <!--Flattr--> <string name="flattr_auth_label">Увійти до Flattr</string> <string name="flattr_auth_explanation">Нажміть цю кнопку для початку авторізації. Буде відкрито flattr в браузері, буде запит на дозвіл доступу Antennapod до flattr. Після надання доступу ви повернетесь до цього екрану автоматично</string> @@ -225,6 +230,7 @@ <string name="pref_autodl_wifi_filter_sum">Дозволити автоматичне завантаження тільки в цих Wi-Fi мережах</string> <string name="pref_automatic_download_on_battery_title">Завантаження без зарядного пристрою</string> <string name="pref_automatic_download_on_battery_sum">Дозволити завантаження коли зарядний пристрій не підключено</string> + <string name="pref_parallel_downloads_title">Паралельні завантаження</string> <string name="pref_episode_cache_title">Кеш епізодів</string> <string name="pref_theme_title_light">Світла</string> <string name="pref_theme_title_dark">Темна</string> @@ -249,6 +255,8 @@ <string name="pref_persistNotify_title">Завжди показувати елементи керування відтворенням</string> <string name="pref_persistNotify_sum">Показувати повідомлення та елементи керування на lockscreen в режимі паузи.</string> <string name="pref_expand_notify_unsupport_toast">Android до версії 4.1 не підтримує розширені повідомлення.</string> + <string name="pref_queueAddToFront_sum">Додавати нові епізоди до початку черги.</string> + <string name="pref_queueAddToFront_title">Додавати в початок черги.</string> <!--Auto-Flattr dialog--> <string name="auto_flattr_enable">Включити автоматичне заохочення авторів через сервіс flattr</string> <string name="auto_flattr_after_percent">Заохотити автора через Flattr щойно %d відсотків епізода було відтворено</string> @@ -263,6 +271,9 @@ <string name="found_in_title_label">Знайдено у назві</string> <!--OPML import and export--> <string name="opml_import_txtv_button_lable">OPML файли дозволяют вам перенести подкасти з однієї программи до іншої</string> + <string name="opml_import_explanation_1">Виберіть локальну папку.</string> + <string name="opml_import_explanation_2">Вибрати OPML файл за допомогою таких додатків як Dropbox, Google Drive або файловий менеджер.</string> + <string name="opml_import_explanation_3">Багато додатків таких як Google Mail, Dropbox, Google Drive та більшість файлових менеджерів здатні <i>відкрити</i> OPML файли <i>для</i> AntennaPod.</string> <string name="start_import_label">Почати імпорт</string> <string name="opml_import_label">OPML імпорт</string> <string name="opml_directory_error">Помилка!</string> @@ -271,6 +282,8 @@ <string name="opml_import_error_dir_empty">Директорія імпорту пуста</string> <string name="select_all_label">Обрати все</string> <string name="deselect_all_label">Убрати виділення</string> + <string name="choose_file_from_filesystem">З локальної файлової системи</string> + <string name="choose_file_from_external_application">За допомогою додатка</string> <string name="opml_export_label">OPML экспорт</string> <string name="exporting_label">Експорт ...</string> <string name="export_error_label">Помилка експорту</string> @@ -356,4 +369,5 @@ <string name="authentication_descr">Змінити ваші логін та пароль для подкаста та епізодів</string> <!--AntennaPodSP--> <string name="sp_apps_importing_feeds_msg">Імпорт подкастів з інших програм...</string> + <string name="search_itunes_label">Пошук в iTunes</string> </resources> diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index 4bb29ac85..ccf14d329 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -10,7 +10,7 @@ </string-array> - <string-array name="seek_delta_values"> + <integer-array name="seek_delta_values"> <item>5</item> <item>10</item> <item>15</item> @@ -18,7 +18,7 @@ <item>30</item> <item>45</item> <item>60</item> - </string-array> + </integer-array> <string-array name="update_intervall_options"> <item>Manual</item> @@ -118,6 +118,7 @@ <string-array name="autodl_select_networks_default_values"> <item>0</item> </string-array> + <string-array name="theme_options"> <item>@string/pref_theme_title_light</item> <item>@string/pref_theme_title_dark</item> @@ -126,4 +127,14 @@ <item>0</item> <item>1</item> </string-array> + + <string-array name="nav_drawer_titles"> + <item>@string/queue_label</item> + <item>@string/new_episodes_label</item> + <item>@string/all_episodes_label</item> + <item>@string/downloads_label</item> + <item>@string/playback_history_label</item> + <item>@string/add_feed_label</item> + </string-array> + </resources> diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml index 81a55142a..c46537b3e 100644 --- a/core/src/main/res/values/dimens.xml +++ b/core/src/main/res/values/dimens.xml @@ -16,10 +16,10 @@ <dimen name="thumbnail_length_downloaded_item">64dp</dimen> <dimen name="thumbnail_length_onlinefeedview">100dp</dimen> <dimen name="feeditemlist_header_height">132dp</dimen> - <dimen name="thumbnail_length_navlist">42dp</dimen> + <dimen name="thumbnail_length_navlist">40dp</dimen> <dimen name="listview_secondary_button_width">48dp</dimen> <dimen name="drawer_width">280dp</dimen> - <dimen name="listitem_iconwithtext_height">56dp</dimen> + <dimen name="listitem_iconwithtext_height">48dp</dimen> <dimen name="listitem_iconwithtext_textleftpadding">14dp</dimen> <dimen name="listitem_iconwithtext_textverticalpadding">16dp</dimen> diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index bdb3ad606..f162bb353 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -32,6 +32,7 @@ <!-- Main activity --> <string name="drawer_open">Open menu</string> <string name="drawer_close">Close menu</string> + <string name="drawer_preferences">Drawer Preferences</string> <!-- Webview actions --> <string name="open_in_browser_label">Open in browser</string> @@ -48,6 +49,7 @@ <string name="cancel_label">Cancel</string> <string name="author_label">Author</string> <string name="language_label">Language</string> + <string name="url_label">URL</string> <string name="podcast_settings_label">Settings</string> <string name="cover_label">Picture</string> <string name="error_label">Error</string> @@ -245,6 +247,8 @@ <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_items_title">Change navigation drawer</string> + <string name="pref_nav_drawer_items_sum">Change which items appear in the navigation drawer.</string> <string name="pref_set_theme_sum">Change the appearance of AntennaPod.</string> <string name="pref_automatic_download_title">Automatic download</string> <string name="pref_automatic_download_sum">Configure the automatic download of episodes.</string> @@ -268,8 +272,8 @@ <string name="pref_gpodnet_setlogin_information_sum">Change the login information for your gpodder.net account.</string> <string name="pref_playback_speed_title">Playback Speeds</string> <string name="pref_playback_speed_sum">Customize the speeds available for variable speed audio playback</string> - <string name="pref_seek_delta_title">Seek time</string> - <string name="pref_seek_delta_sum">Seek this many seconds when rewinding or fast-forwarding</string> + <string name="pref_fast_forward">Fast forward time</string> + <string name="pref_rewind">Rewind time</string> <string name="pref_gpodnet_sethostname_title">Set hostname</string> <string name="pref_gpodnet_sethostname_use_default_host">Use default host</string> <string name="pref_expandNotify_title">Expand Notification</string> |