diff options
Diffstat (limited to 'core/src/main/java')
6 files changed, 66 insertions, 45 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java index 255b95119..bea8d2afd 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java +++ b/core/src/main/java/de/danoeh/antennapod/core/asynctask/FeedRemover.java @@ -3,15 +3,14 @@ package de.danoeh.antennapod.core.asynctask; import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.content.Context; -import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; import android.os.AsyncTask; + +import java.util.concurrent.ExecutionException; + import de.danoeh.antennapod.core.R; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.storage.DBWriter; -import java.util.concurrent.ExecutionException; - /** Removes a feed in the background. */ public class FeedRemover extends AsyncTask<Void, Void, Void> { Context context; @@ -35,12 +34,7 @@ public class FeedRemover extends AsyncTask<Void, Void, Void> { } return null; } - - @Override - protected void onCancelled() { - dialog.dismiss(); - } - + @Override protected void onPostExecute(Void result) { dialog.dismiss(); @@ -50,15 +44,8 @@ public class FeedRemover extends AsyncTask<Void, Void, Void> { protected void onPreExecute() { dialog = new ProgressDialog(context); dialog.setMessage(context.getString(R.string.feed_remover_msg)); - dialog.setOnCancelListener(new OnCancelListener() { - - @Override - public void onCancel(DialogInterface dialog) { - cancel(true); - - } - - }); + dialog.setIndeterminate(true); + dialog.setCancelable(false); dialog.show(); } diff --git a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java index 4d59d75eb..4992252d1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java +++ b/core/src/main/java/de/danoeh/antennapod/core/event/QueueEvent.java @@ -41,6 +41,18 @@ public class QueueEvent { this.position = position; } + public boolean contains(long id) { + if(item != null) { + return item.getId() == id; + } + for(FeedItem item : items) { + if(item.getId() == id) { + return true; + } + } + return false; + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) 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 77db541fa..bd1061fad 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 @@ -59,6 +59,7 @@ public class UserPreferences { // Playback public static final String PREF_PAUSE_ON_HEADSET_DISCONNECT = "prefPauseOnHeadsetDisconnect"; public static final String PREF_UNPAUSE_ON_HEADSET_RECONNECT = "prefUnpauseOnHeadsetReconnect"; + public static final String PREF_UNPAUSE_ON_BLUETOOTH_RECONNECT = "prefUnpauseOnBluetoothReconnect"; public static final String PREF_FOLLOW_QUEUE = "prefFollowQueue"; public static final String PREF_SKIP_KEEPS_EPISODE = "prefSkipKeepsEpisode"; public static final String PREF_AUTO_DELETE = "prefAutoDelete"; @@ -220,6 +221,10 @@ public class UserPreferences { return prefs.getBoolean(PREF_UNPAUSE_ON_HEADSET_RECONNECT, true); } + public static boolean isUnpauseOnBluetoothReconnect() { + return prefs.getBoolean(PREF_UNPAUSE_ON_BLUETOOTH_RECONNECT, false); + } + public static boolean isFollowQueue() { return prefs.getBoolean(PREF_FOLLOW_QUEUE, true); 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 5cef2fe79..ab78387a2 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 @@ -18,6 +18,7 @@ import android.media.MediaPlayer; import android.os.Binder; import android.os.Build; import android.os.IBinder; +import android.os.Vibrator; import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; import android.util.Log; @@ -531,7 +532,7 @@ public class PlaybackService extends Service { @Override public boolean onMediaPlayerError(Object inObj, int what, int extra) { - final String TAG = "PlaybackService.onErrorListener"; + final String TAG = "PlaybackSvc.onErrorLtsn"; Log.w(TAG, "An error has occured: " + what + " " + extra); if (mediaPlayer.getPlayerStatus() == PlayerStatus.PLAYING) { mediaPlayer.pause(true, false); @@ -1022,7 +1023,7 @@ public class PlaybackService extends Service { pauseIfPauseOnDisconnect(); } else if (state == PLUGGED) { Log.d(TAG, "Headset was plugged in during playback."); - unpauseIfPauseOnDisconnect(); + unpauseIfPauseOnDisconnect(false); } } else { Log.e(TAG, "Received invalid ACTION_HEADSET_PLUG intent"); @@ -1038,7 +1039,7 @@ public class PlaybackService extends Service { int state = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, -1); if (state == BluetoothA2dp.STATE_CONNECTED) { Log.d(TAG, "Received bluetooth connection intent"); - unpauseIfPauseOnDisconnect(); + unpauseIfPauseOnDisconnect(true); } } } @@ -1071,10 +1072,20 @@ public class PlaybackService extends Service { } } - private void unpauseIfPauseOnDisconnect() { + /** + * @param bluetooth true if the event for unpausing came from bluetooth + */ + private void unpauseIfPauseOnDisconnect(boolean bluetooth) { if (transientPause) { transientPause = false; - if (UserPreferences.isPauseOnHeadsetDisconnect() && UserPreferences.isUnpauseOnHeadsetReconnect()) { + if (!bluetooth && UserPreferences.isUnpauseOnHeadsetReconnect()) { + mediaPlayer.resume(); + } else if (bluetooth && UserPreferences.isUnpauseOnBluetoothReconnect()){ + // let the user know we've started playback again... + Vibrator v = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE); + if(v != null) { + v.vibrate(500); + } mediaPlayer.resume(); } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java index 32cd538d5..4d56e1365 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java +++ b/core/src/main/java/de/danoeh/antennapod/core/syndication/handler/TypeGetter.java @@ -1,8 +1,7 @@ package de.danoeh.antennapod.core.syndication.handler; import android.util.Log; -import de.danoeh.antennapod.core.BuildConfig; -import de.danoeh.antennapod.core.feed.Feed; + import org.apache.commons.io.input.XmlStreamReader; import org.jsoup.Jsoup; import org.xmlpull.v1.XmlPullParser; @@ -14,6 +13,8 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.Reader; +import de.danoeh.antennapod.core.feed.Feed; + /** Gets the type of a specific feed by reading the root element. */ public class TypeGetter { private static final String TAG = "TypeGetter"; @@ -28,11 +29,13 @@ public class TypeGetter { public Type getType(Feed feed) throws UnsupportedFeedtypeException { XmlPullParserFactory factory; if (feed.getFile_url() != null) { + Reader reader = null; try { factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser xpp = factory.newPullParser(); - xpp.setInput(createReader(feed)); + reader = createReader(feed); + xpp.setInput(reader); int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { @@ -40,38 +43,30 @@ public class TypeGetter { String tag = xpp.getName(); if (tag.equals(ATOM_ROOT)) { feed.setType(Feed.TYPE_ATOM1); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized type Atom"); + Log.d(TAG, "Recognized type Atom"); return Type.ATOM; } else if (tag.equals(RSS_ROOT)) { - String strVersion = xpp.getAttributeValue(null, - "version"); + String strVersion = xpp.getAttributeValue(null, "version"); if (strVersion != null) { - if (strVersion.equals("2.0")) { feed.setType(Feed.TYPE_RSS2); - if (BuildConfig.DEBUG) - Log.d(TAG, "Recognized type RSS 2.0"); + Log.d(TAG, "Recognized type RSS 2.0"); return Type.RSS20; } else if (strVersion.equals("0.91") || strVersion.equals("0.92")) { - if (BuildConfig.DEBUG) - Log.d(TAG, - "Recognized type RSS 0.91/0.92"); + Log.d(TAG, "Recognized type RSS 0.91/0.92"); return Type.RSS091; } } throw new UnsupportedFeedtypeException(Type.INVALID); } else { - if (BuildConfig.DEBUG) - Log.d(TAG, "Type is invalid"); + Log.d(TAG, "Type is invalid"); throw new UnsupportedFeedtypeException(Type.INVALID, tag); } } else { eventType = xpp.next(); } } - } catch (XmlPullParserException e) { e.printStackTrace(); // XML document might actually be a HTML document -> try to parse as HTML @@ -88,10 +83,17 @@ public class TypeGetter { } catch (IOException e) { e.printStackTrace(); + } finally { + if(reader != null) { + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } } - if (BuildConfig.DEBUG) - Log.d(TAG, "Type is invalid"); + Log.d(TAG, "Type is invalid"); throw new UnsupportedFeedtypeException(Type.INVALID); } 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 c0233f684..1a148673c 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 @@ -88,9 +88,13 @@ public class DateUtils { for(String pattern : patterns) { parser.applyPattern(pattern); pos.setIndex(0); - Date result = parser.parse(date, pos); - if(result != null && pos.getIndex() == date.length()) { - return result; + try { + Date result = parser.parse(date, pos); + if (result != null && pos.getIndex() == date.length()) { + return result; + } + } catch(Exception e) { + Log.e(TAG, Log.getStackTraceString(e)); } } |