summaryrefslogtreecommitdiff
path: root/core/src/main/java/de
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/de')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/Feed.java38
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/feed/FeedItem.java3
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/LocalPSMP.java24
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java24
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DBReader.java25
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java4
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java22
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java29
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java11
9 files changed, 82 insertions, 98 deletions
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 ac23f3d3d..746dd43c4 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
@@ -1,6 +1,5 @@
package de.danoeh.antennapod.core.feed;
-import android.content.Context;
import android.database.Cursor;
import android.support.annotation.Nullable;
import android.text.TextUtils;
@@ -21,9 +20,9 @@ import de.danoeh.antennapod.core.util.flattr.FlattrThing;
* @author daniel
*/
public class Feed extends FeedFile implements FlattrThing, ImageResource {
+
public static final int FEEDFILETYPE_FEED = 0;
public static final String TYPE_RSS2 = "rss";
- public static final String TYPE_RSS091 = "rss";
public static final String TYPE_ATOM1 = "atom";
/* title as defined by the feed */
@@ -221,33 +220,6 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
return feed;
}
-
- /**
- * Returns true if at least one item in the itemlist is unread.
- *
- */
- public boolean hasNewItems() {
- for (FeedItem item : items) {
- if (item.isNew()) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns true if at least one item in the itemlist is unread.
- *
- */
- public boolean hasUnplayedItems() {
- for (FeedItem item : items) {
- if (!item.isNew() && !item.isPlayed()) {
- return true;
- }
- }
- return false;
- }
-
/**
* Returns the number of FeedItems.
*
@@ -294,6 +266,9 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
public void updateFromOther(Feed other) {
// don't update feed's download_url, we do that manually if redirected
// see AntennapodHttpClient
+ if (other.image != null) {
+ this.image = other.image;
+ }
if (other.feedTitle != null) {
feedTitle = other.feedTitle;
}
@@ -330,6 +305,9 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
if (super.compareWithOther(other)) {
return true;
}
+ if(other.image != null && !TextUtils.equals(image.download_url, other.image.download_url)) {
+ return true;
+ }
if (!TextUtils.equals(feedTitle, other.feedTitle)) {
return true;
}
@@ -511,7 +489,7 @@ public class Feed extends FeedFile implements FlattrThing, ImageResource {
return preferences;
}
- public void savePreferences(Context context) {
+ public void savePreferences() {
DBWriter.setFeedPreferences(preferences);
}
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 ee7a738d0..66c4b10d0 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
@@ -177,6 +177,9 @@ public class FeedItem extends FeedComponent implements ShownotesProvider, Flattr
public void updateFromOther(FeedItem other) {
super.updateFromOther(other);
+ if (other.image != null) {
+ this.image = other.image;
+ }
if (other.title != null) {
title = other.title;
}
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 f395dfb32..11cd21db5 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
@@ -300,7 +300,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
/**
* Called after media player has been prepared. This method is executed on the caller's thread.
*/
- void onPrepared(final boolean startWhenPrepared) {
+ private void onPrepared(final boolean startWhenPrepared) {
playerLock.lock();
if (playerStatus != PlayerStatus.PREPARING) {
@@ -688,18 +688,22 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
media = playable;
}
- private IPlayer createMediaPlayer() {
+ private void createMediaPlayer() {
if (mediaPlayer != null) {
mediaPlayer.release();
}
- if (media == null || media.getMediaType() == MediaType.VIDEO) {
+ if(media == null) {
+ mediaPlayer = null;
+ return;
+ }
+ if (media.getMediaType() == MediaType.VIDEO) {
mediaPlayer = new VideoPlayer();
} else {
mediaPlayer = new AudioPlayer(context);
}
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK);
- return setMediaPlayerListeners(mediaPlayer);
+ setMediaPlayerListeners(mediaPlayer);
}
private final AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@@ -855,14 +859,20 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
if (mp == null || media == null) {
return mp;
}
- if (media.getMediaType() == MediaType.VIDEO) {
+ if (mp instanceof VideoPlayer) {
+ if (media.getMediaType() != MediaType.VIDEO) {
+ Log.w(TAG, "video player, but media type is " + media.getMediaType());
+ }
VideoPlayer vp = (VideoPlayer) mp;
vp.setOnCompletionListener(videoCompletionListener);
vp.setOnSeekCompleteListener(videoSeekCompleteListener);
vp.setOnErrorListener(videoErrorListener);
vp.setOnBufferingUpdateListener(videoBufferingUpdateListener);
vp.setOnInfoListener(videoInfoListener);
- } else {
+ } else if (mp instanceof AudioPlayer) {
+ if (media.getMediaType() != MediaType.AUDIO) {
+ Log.w(TAG, "audio player, but media type is " + media.getMediaType());
+ }
AudioPlayer ap = (AudioPlayer) mp;
ap.setOnCompletionListener(audioCompletionListener);
ap.setOnSeekCompleteListener(audioSeekCompleteListener);
@@ -870,6 +880,8 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
ap.setOnBufferingUpdateListener(audioBufferingUpdateListener);
ap.setOnInfoListener(audioInfoListener);
ap.setOnSpeedAdjustmentAvailableChangedListener(audioSetSpeedAbilityListener);
+ } else {
+ Log.w(TAG, "Unknown media player: " + mp);
}
return mp;
}
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 c3e6b55ba..3166dd743 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
@@ -133,6 +133,12 @@ public class PlaybackService extends MediaBrowserServiceCompat {
*/
public static final String ACTION_RESUME_PLAY_CURRENT_EPISODE = "action.de.danoeh.antennapod.core.service.resumePlayCurrentEpisode";
+ /**
+ * Custom action used by Android Wear
+ */
+ private static final String CUSTOM_ACTION_FAST_FORWARD = "action.de.danoeh.antennapod.core.service.fastForward";
+ private static final String CUSTOM_ACTION_REWIND = "action.de.danoeh.antennapod.core.service.rewind";
+
/**
* Used in NOTIFICATION_TYPE_RELOAD.
@@ -1083,6 +1089,14 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
sessionState.setActions(capabilities);
+
+ flavorHelper.sessionStateAddActionForWear(sessionState,
+ CUSTOM_ACTION_REWIND, getString(R.string.rewind_label), android.R.drawable.ic_media_rew);
+ flavorHelper.sessionStateAddActionForWear(sessionState,
+ CUSTOM_ACTION_FAST_FORWARD, getString(R.string.fast_forward_label), android.R.drawable.ic_media_ff);
+
+ flavorHelper.mediaSessionSetExtraForWear(mediaSession);
+
mediaSession.setPlaybackState(sessionState.build());
}
@@ -1761,6 +1775,16 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
return false;
}
+
+ @Override
+ public void onCustomAction(String action, Bundle extra) {
+ Log.d(TAG, "onCustomAction(" + action + ")");
+ if (CUSTOM_ACTION_FAST_FORWARD.equals(action)) {
+ onFastForward();
+ } else if (CUSTOM_ACTION_REWIND.equals(action)) {
+ onRewind();
+ }
+ }
};
private SharedPreferences.OnSharedPreferenceChangeListener prefListener =
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 32c642de2..a2ecd0a52 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
@@ -372,30 +372,6 @@ public final class DBReader {
}
/**
- * Loads a list of FeedItems whose 'read'-attribute is set to false.
- *
- * @return A list of FeedItems whose 'read'-attribute it set to false.
- */
- public static List<FeedItem> getUnreadItemsList() {
- Log.d(TAG, "getUnreadItemsList() called");
-
- PodDBAdapter adapter = PodDBAdapter.getInstance();
- adapter.open();
- Cursor cursor = null;
- try {
- cursor = adapter.getUnreadItemsCursor();
- List<FeedItem> items = extractItemlistFromCursor(adapter, cursor);
- loadAdditionalFeedItemListData(items);
- return items;
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- adapter.close();
- }
- }
-
- /**
* Loads a list of FeedItems that are considered new.
* Excludes items from feeds that do not have keep updated enabled.
*
@@ -929,6 +905,7 @@ public final class DBReader {
Cursor cursor = adapter.getImageCursor(ids);
int imageCount = cursor.getCount();
if (imageCount == 0) {
+ cursor.close();
return Collections.emptyMap();
}
Map<Long, FeedImage> result = new ArrayMap<>(imageCount);
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java
index 04afc504b..7051d7f4d 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java
@@ -345,9 +345,7 @@ public class DownloadRequester {
// Try to generate the filename by the item title
if (media.getItem() != null && media.getItem().getTitle() != null) {
String title = media.getItem().getTitle();
- // Delete reserved characters
- titleBaseFilename = title.replaceAll("[^a-zA-Z0-9 ._()-]", "");
- titleBaseFilename = titleBaseFilename.trim();
+ titleBaseFilename = FileNameGenerator.generateFileName(title);
}
String URLBaseFilename = URLUtil.guessFileName(media.getDownload_url(),
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 7bb727d68..dc8692866 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
@@ -1249,15 +1249,6 @@ public class PodDBAdapter {
return db.rawQuery(query, null);
}
- /**
- * Returns a cursor which contains all feed items in the unread items list.
- * The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection.
- */
- public final Cursor getUnreadItemsCursor() {
- return db.query(TABLE_NAME_FEED_ITEMS, FEEDITEM_SEL_FI_SMALL, KEY_READ
- + "<" + FeedItem.PLAYED, null, null, null, KEY_PUBDATE + " DESC");
- }
-
public void setFeedItems(int state) {
setFeedItems(Integer.MIN_VALUE, state, 0);
}
@@ -1283,19 +1274,6 @@ public class PodDBAdapter {
}
/**
- * Returns a cursor which contains all items of a feed that are considered new.
- * The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection.
- */
- public final Cursor getNewItemsIdsCursor(long feedId) {
- final String query = "SELECT " + KEY_ID
- + " FROM " + TABLE_NAME_FEED_ITEMS
- + " WHERE " + KEY_FEED + "=" + feedId
- + " AND " + KEY_READ + "=" + FeedItem.NEW
- + " ORDER BY " + KEY_PUBDATE + " DESC";
- return db.rawQuery(query, null);
- }
-
- /**
* Returns a cursor which contains all feed items that are considered new.
* Excludes those feeds that do not have 'Keep Updated' enabled.
* The returned cursor uses the FEEDITEM_SEL_FI_SMALL selection.
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java
index 30c2e62f2..8da176c82 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java
@@ -1,18 +1,21 @@
package de.danoeh.antennapod.core.util;
+import org.apache.commons.lang3.ArrayUtils;
+
import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/** Generates valid filenames for a given string. */
public class FileNameGenerator {
- private static final char[] ILLEGAL_CHARACTERS = { '/', '\\', '?', '%',
- '*', ':', '|', '"', '<', '>', '\n' };
- static {
- Arrays.sort(ILLEGAL_CHARACTERS);
- }
+ private static final char[] validChars = (
+ "abcdefghijklmnopqrstuvwxyz" +
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
+ "0123456789" +
+ " _-").toCharArray();
private FileNameGenerator() {
-
}
/**
@@ -20,17 +23,17 @@ public class FileNameGenerator {
* characters of the given string.
*/
public static String generateFileName(String string) {
- StringBuilder builder = new StringBuilder();
+ StringBuilder buf = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
- if (Arrays.binarySearch(ILLEGAL_CHARACTERS, c) < 0) {
- builder.append(c);
+ if(Character.isSpaceChar(c) && (buf.length() == 0 || Character.isSpaceChar(buf.charAt(buf.length()-1)))) {
+ continue;
+ }
+ if (ArrayUtils.contains(validChars, c)) {
+ buf.append(c);
}
}
- return builder.toString().replaceFirst(" *$","");
+ return buf.toString().trim();
}
- public static long generateLong(final String str) {
- return str.hashCode();
- }
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java b/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java
index 35916a604..887c0055c 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/util/ShareUtils.java
@@ -3,9 +3,13 @@ package de.danoeh.antennapod.core.util;
import android.content.Context;
import android.content.Intent;
+import android.net.Uri;
import de.danoeh.antennapod.core.R;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+
+import java.io.File;
/** Utility methods for sharing data */
public class ShareUtils {
@@ -58,4 +62,11 @@ public class ShareUtils {
shareLink(context, text);
}
+ public static void shareFeedItemFile(Context context, FeedMedia media) {
+ Intent i = new Intent(Intent.ACTION_SEND);
+ i.setType(media.getMime_type());
+ i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(media.getLocalMediaUrl())));
+ i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ context.startActivity(Intent.createChooser(i, context.getString(R.string.share_file_label)));
+ }
}