summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java83
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java11
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java9
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java8
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java19
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java18
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java33
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java11
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java66
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java49
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java21
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java15
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java23
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java14
-rw-r--r--app/src/main/res/layout/cover_fragment.xml85
-rw-r--r--app/src/main/res/menu/episodes.xml4
25 files changed, 291 insertions, 239 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
index 8be57a074..c9f0527e1 100644
--- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
@@ -1,6 +1,9 @@
package de.test.antennapod.service.playback;
import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.runner.AndroidJUnit4;
import android.test.InstrumentationTestCase;
import java.util.ArrayList;
@@ -16,38 +19,47 @@ import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.service.playback.PlaybackServiceTaskManager;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.playback.Playable;
-import de.greenrobot.event.EventBus;
+import org.greenrobot.eventbus.EventBus;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static junit.framework.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
/**
* Test class for PlaybackServiceTaskManager
*/
-public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
+@RunWith(AndroidJUnit4.class)
+public class PlaybackServiceTaskManagerTest {
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
+ @After
+ public void tearDown() {
PodDBAdapter.deleteDatabase();
}
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
+ @Before
+ public void setUp() {
// create new database
- PodDBAdapter.init(getInstrumentation().getTargetContext());
+ Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ PodDBAdapter.init(context);
PodDBAdapter.deleteDatabase();
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
adapter.close();
}
+ @Test
public void testInit() {
- PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(getInstrumentation().getTargetContext(), defaultPSTM);
+ Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(context, defaultPSTM);
pstm.shutdown();
}
private List<FeedItem> writeTestQueue(String pref) {
- final Context c = getInstrumentation().getTargetContext();
final int NUM_ITEMS = 10;
Feed f = new Feed(0, null, "title", "link", "d", null, null, null, null, "id", null, "null", "url", false);
f.setItems(new ArrayList<>());
@@ -66,8 +78,9 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
return f.getItems();
}
+ @Test
public void testGetQueueWriteBeforeCreation() throws InterruptedException {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
List<FeedItem> queue = writeTestQueue("a");
assertNotNull(queue);
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
@@ -80,8 +93,9 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
public void testGetQueueWriteAfterCreation() throws InterruptedException {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
List<FeedItem> testQueue = pstm.getQueue();
@@ -111,8 +125,9 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
public void testStartPositionSaver() throws InterruptedException {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
final int NUM_COUNTDOWNS = 2;
final int TIMEOUT = 3 * PlaybackServiceTaskManager.POSITION_SAVER_WAITING_INTERVAL;
final CountDownLatch countDownLatch = new CountDownLatch(NUM_COUNTDOWNS);
@@ -152,16 +167,18 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
public void testIsPositionSaverActive() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.startPositionSaver();
assertTrue(pstm.isPositionSaverActive());
pstm.shutdown();
}
+ @Test
public void testCancelPositionSaver() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.startPositionSaver();
pstm.cancelPositionSaver();
@@ -169,8 +186,9 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
public void testStartWidgetUpdater() throws InterruptedException {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
final int NUM_COUNTDOWNS = 2;
final int TIMEOUT = 3 * PlaybackServiceTaskManager.WIDGET_UPDATER_NOTIFICATION_INTERVAL;
final CountDownLatch countDownLatch = new CountDownLatch(NUM_COUNTDOWNS);
@@ -210,16 +228,18 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
public void testIsWidgetUpdaterActive() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.startWidgetUpdater();
assertTrue(pstm.isWidgetUpdaterActive());
pstm.shutdown();
}
+ @Test
public void testCancelWidgetUpdater() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.startWidgetUpdater();
pstm.cancelWidgetUpdater();
@@ -227,8 +247,9 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
public void testCancelAllTasksNoTasksStarted() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.cancelAllTasks();
assertFalse(pstm.isPositionSaverActive());
@@ -237,8 +258,10 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
+ @UiThreadTest
public void testCancelAllTasksAllTasksStarted() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.startWidgetUpdater();
pstm.startPositionSaver();
@@ -250,8 +273,10 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
+ @UiThreadTest
public void testSetSleepTimer() throws InterruptedException {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
final long TIME = 2000;
final long TIMEOUT = 2 * TIME;
final CountDownLatch countDownLatch = new CountDownLatch(1);
@@ -294,8 +319,10 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
+ @UiThreadTest
public void testDisableSleepTimer() throws InterruptedException {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
final long TIME = 1000;
final long TIMEOUT = 2 * TIME;
final CountDownLatch countDownLatch = new CountDownLatch(1);
@@ -336,16 +363,20 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
pstm.shutdown();
}
+ @Test
+ @UiThreadTest
public void testIsSleepTimerActivePositive() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.setSleepTimer(10000, false, false);
assertTrue(pstm.isSleepTimerActive());
pstm.shutdown();
}
+ @Test
+ @UiThreadTest
public void testIsSleepTimerActiveNegative() {
- final Context c = getInstrumentation().getTargetContext();
+ final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext();
PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM);
pstm.setSleepTimer(10000, false, false);
pstm.disableSleepTimer();
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
index 9a60b04b8..8e0064079 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
@@ -7,6 +7,7 @@ import android.support.test.espresso.intent.Intents;
import android.support.test.filters.FlakyTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
+import android.view.Gravity;
import android.widget.ListView;
import com.robotium.solo.Solo;
import com.robotium.solo.Timeout;
@@ -17,6 +18,7 @@ import de.danoeh.antennapod.activity.PreferenceActivity;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
+import de.danoeh.antennapod.dialog.RatingDialog;
import de.danoeh.antennapod.fragment.DownloadsFragment;
import de.danoeh.antennapod.fragment.EpisodesFragment;
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
@@ -36,6 +38,8 @@ import static android.support.test.InstrumentationRegistry.getInstrumentation;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.longClick;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.contrib.DrawerMatchers.isClosed;
import static android.support.test.espresso.intent.Intents.intended;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
@@ -76,6 +80,9 @@ public class MainActivityTest {
prefs = context.getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE);
prefs.edit().putBoolean(MainActivity.PREF_IS_FIRST_LAUNCH, false).commit();
+ RatingDialog.init(context);
+ RatingDialog.saveRated();
+
solo = new Solo(getInstrumentation(), mActivityRule.getActivity());
}
@@ -89,7 +96,9 @@ public class MainActivityTest {
}
private void openNavDrawer() {
- onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
+ onView(withId(R.id.drawer_layout))
+ .check(matches(isClosed(Gravity.LEFT)))
+ .perform(DrawerActions.open());
}
@Test
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
index ff5374268..263790c2f 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
@@ -27,9 +27,9 @@ import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
import de.danoeh.antennapod.fragment.ExternalPlayerFragment;
-import de.greenrobot.event.EventBus;
import de.test.antennapod.util.service.download.HTTPBin;
import de.test.antennapod.util.syndication.feedgenerator.RSS2Generator;
+import org.greenrobot.eventbus.EventBus;
/**
* Utility methods for UI tests.
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java
index 5dd4a357b..1bcdada44 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/AboutActivity.java
@@ -1,7 +1,9 @@
package de.danoeh.antennapod.activity;
+import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Color;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
@@ -54,12 +56,15 @@ public class AboutActivity extends AppCompatActivity {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
- if (!url.startsWith("http")) {
+ if (url.startsWith("http")) {
+ Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
+ startActivity(browserIntent);
+ return true;
+ } else {
url = url.replace("file:///android_asset/", "");
loadAsset(url);
return true;
}
- return false;
}
});
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index 3bbe206f8..0b9735f59 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -43,7 +43,6 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
import de.danoeh.antennapod.core.event.MessageEvent;
import de.danoeh.antennapod.core.event.ProgressEvent;
import de.danoeh.antennapod.core.event.QueueEvent;
-import de.danoeh.antennapod.core.event.ServiceEvent;
import de.danoeh.antennapod.core.feed.EventDistributor;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
@@ -68,11 +67,13 @@ import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
import de.danoeh.antennapod.fragment.QueueFragment;
import de.danoeh.antennapod.fragment.SubscriptionFragment;
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
/**
* The activity that is shown when the user launches the app.
@@ -765,6 +766,7 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
}
+ @Subscribe
public void onEvent(QueueEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
// we are only interested in the number of queue items, not download status or position
@@ -776,6 +778,7 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi
loadData();
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(ProgressEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
switch(event.action) {
@@ -794,6 +797,7 @@ public class MainActivity extends CastEnabledActivity implements NavDrawerActivi
}
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(MessageEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
View parentLayout = findViewById(R.id.drawer_layout);
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
index 86d4ec642..154c7c148 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
@@ -38,7 +38,6 @@ import com.joanzapata.iconify.fonts.FontAwesomeIcons;
import java.util.Locale;
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.event.ServiceEvent;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.feed.MediaType;
@@ -661,15 +660,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
StorageUtils.checkStorageAvailability(this);
}
- public void onEventMainThread(ServiceEvent event) {
- Log.d(TAG, "onEvent(" + event + ")");
- if (event.action == ServiceEvent.Action.SERVICE_STARTED) {
- if (controller != null) {
- controller.init();
- }
- }
- }
-
/**
* Called by 'handleStatus()' when the PlaybackService is waiting for
* a video surface.
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java
index 4a1dae3e9..7b2ab3249 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java
@@ -7,7 +7,6 @@ import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
@@ -34,7 +33,6 @@ import com.viewpagerindicator.CirclePageIndicator;
import java.util.List;
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.adapter.ChaptersListAdapter;
import de.danoeh.antennapod.adapter.NavListAdapter;
import de.danoeh.antennapod.core.asynctask.FeedRemover;
import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
@@ -62,11 +60,13 @@ import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
import de.danoeh.antennapod.fragment.QueueFragment;
import de.danoeh.antennapod.fragment.SubscriptionFragment;
import de.danoeh.antennapod.menuhandler.NavDrawerActivity;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
/**
* Activity for playing files that do not require a video surface.
@@ -108,12 +108,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem
private Disposable disposable;
@Override
- protected void onPause() {
- super.onPause();
- EventBus.getDefault().unregister(this);
- }
-
- @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportPostponeEnterTransition();
@@ -127,6 +121,7 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem
disposable.dispose();
}
EventDistributor.getInstance().unregister(contentUpdate);
+ EventBus.getDefault().unregister(this);
saveCurrentFragment();
}
@@ -176,10 +171,9 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem
}
@Override
- protected void onResume() {
- super.onResume();
+ protected void onStart() {
+ super.onStart();
AutoUpdateManager.checkShouldRefreshFeeds(getApplicationContext());
-
EventDistributor.getInstance().register(contentUpdate);
EventBus.getDefault().register(this);
loadData();
@@ -443,6 +437,7 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem
}, error -> Log.e(TAG, Log.getStackTraceString(error)));
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(MessageEvent event) {
Log.d(TAG, "onEvent(" + event + ")");
View parentLayout = findViewById(R.id.drawer_layout);
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
index 145908e97..35c423a47 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
@@ -31,6 +31,9 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import org.apache.commons.lang3.StringUtils;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@@ -68,7 +71,6 @@ import de.danoeh.antennapod.core.util.URLChecker;
import de.danoeh.antennapod.core.util.syndication.FeedDiscoverer;
import de.danoeh.antennapod.core.util.syndication.HtmlToPlainText;
import de.danoeh.antennapod.dialog.AuthenticationDialog;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@@ -123,6 +125,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
}
};
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
setSubscribeButtonState(feed);
@@ -193,24 +196,19 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
}
@Override
- protected void onResume() {
- super.onResume();
+ protected void onStart() {
+ super.onStart();
isPaused = false;
EventDistributor.getInstance().register(listener);
EventBus.getDefault().register(this);
}
@Override
- protected void onPause() {
- super.onPause();
+ protected void onStop() {
+ super.onStop();
isPaused = true;
EventDistributor.getInstance().unregister(listener);
EventBus.getDefault().unregister(this);
- }
-
- @Override
- protected void onStop() {
- super.onStop();
if (downloader != null && !downloader.isFinished()) {
downloader.cancel();
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
index fa5012b74..78cc15b2c 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
@@ -47,7 +47,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
*/
private boolean videoControlsShowing = true;
private boolean videoSurfaceCreated = false;
- private boolean playbackStoppedUponExitVideo = false;
private boolean destroyingDueToReload = false;
private VideoControlsHider videoControlsHider = new VideoControlsHider(this);
@@ -78,7 +77,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
protected void onResume() {
super.onResume();
- playbackStoppedUponExitVideo = false;
if (TextUtils.equals(getIntent().getAction(), Intent.ACTION_VIEW)) {
playExternalMedia(getIntent(), MediaType.VIDEO);
} else if (PlaybackService.isCasting()) {
@@ -93,32 +91,12 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
protected void onStop() {
- stopPlaybackIfUserPreferencesSpecified(); // MUST be called before super.onStop(), while it still has member variable controller
super.onStop();
if (!PictureInPictureUtil.isInPictureInPictureMode(this)) {
videoControlsHider.stop();
}
}
- void stopPlaybackIfUserPreferencesSpecified() {
- // to avoid the method being called twice during leaving Videoplayer
- // , which will double-pause the media
- // (it is usually first called by surfaceHolderCallback.surfaceDestroyed(),
- // then VideoplayerActivity.onStop() , but sometimes VideoplayerActivity.onStop()
- // will first be invoked.)
- if (playbackStoppedUponExitVideo) {
- return;
- }
- playbackStoppedUponExitVideo = true;
-
- if (controller != null && !destroyingDueToReload
- && UserPreferences.getVideoBackgroundBehavior()
- != UserPreferences.VideoBackgroundBehavior.CONTINUE_PLAYING) {
- Log.v(TAG, "stop video playback per UserPreference");
- controller.notifyVideoSurfaceAbandoned();
- }
- }
-
@Override
public void onUserLeaveHint () {
if (!PictureInPictureUtil.isInPictureInPictureMode(this) && UserPreferences.getVideoBackgroundBehavior()
@@ -297,12 +275,13 @@ public class VideoplayerActivity extends MediaplayerActivity {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
- Log.d(TAG, "Videosurface was destroyed." );
- Log.v(TAG, " hasController=" + (controller != null)
- + " , destroyingDueToReload=" + destroyingDueToReload
- + " , videoBackgroundBehavior=" + UserPreferences.getVideoBackgroundBehavior());
+ Log.d(TAG, "Videosurface was destroyed");
videoSurfaceCreated = false;
- stopPlaybackIfUserPreferencesSpecified();
+ if (controller != null && !destroyingDueToReload
+ && UserPreferences.getVideoBackgroundBehavior()
+ != UserPreferences.VideoBackgroundBehavior.CONTINUE_PLAYING) {
+ controller.notifyVideoSurfaceAbandoned();
+ }
}
};
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java
index f54b9266e..1286d9dc7 100644
--- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java
+++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java
@@ -1,6 +1,8 @@
package de.danoeh.antennapod.adapter;
import android.content.Context;
+import android.support.annotation.NonNull;
+import android.content.Intent;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
@@ -28,7 +30,7 @@ import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
*/
public class DefaultActionButtonCallback implements ActionButtonCallback {
- private static final String TAG = "DefaultActionBtnCb";
+ private static final String TAG = "DefaultActionButtonCallback";
private final Context context;
@@ -82,9 +84,13 @@ public class DefaultActionButtonCallback implements ActionButtonCallback {
}
} else { // media is downloaded
if (media.isCurrentlyPlaying()) {
+ new PlaybackServiceStarter(context, media)
+ .startWhenPrepared(true)
+ .shouldStream(false)
+ .start();
IntentUtils.sendLocalBroadcast(context, PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE);
} else if (media.isCurrentlyPaused()) {
- new PlaybackServiceStarter(context, media) // need to start the service in case it's been stopped by system.
+ new PlaybackServiceStarter(context, media)
.startWhenPrepared(true)
.shouldStream(false)
.start();
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java
index ece184035..24656ed29 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/RatingDialog.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
import android.util.Log;
import com.afollestad.materialdialogs.MaterialDialog;
@@ -73,7 +74,8 @@ public class RatingDialog {
return mPreferences.getBoolean(KEY_RATED, false);
}
- private static void saveRated() {
+ @VisibleForTesting
+ public static void saveRated() {
mPreferences
.edit()
.putBoolean(KEY_RATED, true)
diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
index 4b8601ec6..dc056a3f9 100644
--- a/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
+++ b/app/src/main/java/de/danoeh/antennapod/dialog/SleepTimerDialog.java
@@ -18,7 +18,7 @@ import com.afollestad.materialdialogs.MaterialDialog;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.event.MessageEvent;
import de.danoeh.antennapod.core.preferences.SleepTimerPreferences;
-import de.greenrobot.event.EventBus;
+import org.greenrobot.eventbus.EventBus;
public abstract class SleepTimerDialog {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
index f2ae47ac4..48b891631 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java
@@ -51,12 +51,15 @@ import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
+
import de.danoeh.antennapod.view.EmptyViewHandler;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
/**
* Shows unread or recently published episodes
@@ -107,12 +110,12 @@ public class AllEpisodesFragment extends Fragment {
if (viewsCreated && itemsLoaded) {
onFragmentLoaded();
}
+ EventBus.getDefault().register(this);
}
@Override
public void onResume() {
super.onResume();
- EventBus.getDefault().registerSticky(this);
loadItems();
registerForContextMenu(recyclerView);
}
@@ -120,7 +123,6 @@ public class AllEpisodesFragment extends Fragment {
@Override
public void onPause() {
super.onPause();
- EventBus.getDefault().unregister(this);
saveScrollPosition();
unregisterForContextMenu(recyclerView);
}
@@ -128,6 +130,7 @@ public class AllEpisodesFragment extends Fragment {
@Override
public void onStop() {
super.onStop();
+ EventBus.getDefault().unregister(this);
EventDistributor.getInstance().unregister(contentUpdate);
if (disposable != null) {
disposable.dispose();
@@ -430,6 +433,7 @@ public class AllEpisodesFragment extends Fragment {
};
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(FeedItemEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if (episodes == null) {
@@ -456,6 +460,7 @@ public class AllEpisodesFragment extends Fragment {
return true;
}
+ @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
DownloaderUpdate update = event.update;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
index 8f2073ed0..0ffd1a8da 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java
@@ -2,22 +2,29 @@ package de.danoeh.antennapod.fragment;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
+import android.util.Log;
import android.view.View;
import android.widget.ListView;
+import java.util.List;
+import java.util.ListIterator;
+
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.ChaptersListAdapter;
-import de.danoeh.antennapod.core.event.ServiceEvent;
import de.danoeh.antennapod.core.feed.Chapter;
import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
-import de.greenrobot.event.EventBus;
+import io.reactivex.Maybe;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
public class ChaptersFragment extends ListFragment {
private static final String TAG = "ChaptersFragment";
private ChaptersListAdapter adapter;
private PlaybackController controller;
+ private Disposable disposable;
@Override
@@ -42,10 +49,7 @@ public class ChaptersFragment extends ListFragment {
controller = new PlaybackController(getActivity(), false) {
@Override
public boolean loadMediaInfo() {
- if (getMedia() == null) {
- return false;
- }
- onMediaChanged(getMedia());
+ ChaptersFragment.this.loadMediaInfo();
return true;
}
@@ -55,22 +59,59 @@ public class ChaptersFragment extends ListFragment {
}
};
controller.init();
- onMediaChanged(controller.getMedia());
- EventBus.getDefault().register(this);
+
+ loadMediaInfo();
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+
+ if (disposable != null) {
+ disposable.dispose();
+ }
}
@Override
public void onStop() {
super.onStop();
- EventBus.getDefault().unregister(this);
controller.release();
controller = null;
}
- public void onEventMainThread(ServiceEvent event) {
- if (event.action == ServiceEvent.Action.SERVICE_STARTED && controller != null) {
- controller.init();
+ private void scrollTo(int position) {
+ getListView().setSelection(position);
+ }
+
+ private int getCurrentChapter(Playable media) {
+ int currentPosition = controller.getPosition();
+
+ List<Chapter> chapters = media.getChapters();
+ for (final ListIterator<Chapter> it = chapters.listIterator(); it.hasNext(); ) {
+ Chapter chapter = it.next();
+ if (chapter.getStart() > currentPosition) {
+ return it.previousIndex() - 1;
+ }
+ }
+ return chapters.size() - 1;
+ }
+
+ private void loadMediaInfo() {
+ if (disposable != null) {
+ disposable.dispose();
}
+ disposable = Maybe.create(emitter -> {
+ Playable media = controller.getMedia();
+ if (media != null) {
+ emitter.onSuccess(media);
+ } else {
+ emitter.onComplete();
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(media -> onMediaChanged((Playable) media),
+ error -> Log.e(TAG, Log.getStackTraceString(error)));
}
private void onMediaChanged(Playable media) {
@@ -81,6 +122,7 @@ public class ChaptersFragment extends ListFragment {
setEmptyText(getString(R.string.no_chapters_label));
} else {
setEmptyText(null);
+ scrollTo(getCurrentChapter(media));
}
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
index 88d748c5a..7fd61d3ad 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/CoverFragment.java
@@ -1,6 +1,7 @@
package de.danoeh.antennapod.fragment;
import android.os.Bundle;
+import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
@@ -13,11 +14,13 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.event.ServiceEvent;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
-import de.greenrobot.event.EventBus;
+import io.reactivex.Maybe;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
/**
* Displays the cover and the title of a FeedItem.
@@ -31,6 +34,7 @@ public class CoverFragment extends Fragment {
private TextView txtvEpisodeTitle;
private ImageView imgvCover;
private PlaybackController controller;
+ private Disposable disposable;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -44,11 +48,24 @@ public class CoverFragment extends Fragment {
}
private void loadMediaInfo() {
- Playable media = controller.getMedia();
- if (media == null) {
- Log.w(TAG, "loadMediaInfo was called while media was null");
- return;
+ if (disposable != null) {
+ disposable.dispose();
}
+ disposable = Maybe.create(emitter -> {
+ Playable media = controller.getMedia();
+ if (media != null) {
+ emitter.onSuccess(media);
+ } else {
+ emitter.onComplete();
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(media -> displayMediaInfo((Playable) media),
+ error -> Log.e(TAG, Log.getStackTraceString(error)));
+ }
+
+ private void displayMediaInfo(@NonNull Playable media) {
txtvPodcastTitle.setText(media.getFeedTitle());
txtvEpisodeTitle.setText(media.getEpisodeTitle());
Glide.with(this)
@@ -73,9 +90,6 @@ public class CoverFragment extends Fragment {
controller = new PlaybackController(getActivity(), false) {
@Override
public boolean loadMediaInfo() {
- if (getMedia() == null) {
- return false;
- }
CoverFragment.this.loadMediaInfo();
return true;
}
@@ -83,20 +97,21 @@ public class CoverFragment extends Fragment {
};
controller.init();
loadMediaInfo();
- EventBus.getDefault().register(this);
- }
-
- public void onEventMainThread(ServiceEvent event) {
- if (event.action == ServiceEvent.Action.SERVICE_STARTED && controller != null) {
- controller.init();
- }
}
@Override
public void onStop() {
super.onStop();
- EventBus.getDefault().unregister(this);
controller.release();
controller = null;
}
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+
+ if (disposable != null) {
+ disposable.dispose();
+ }
+ }
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
index dca574984..348c73b92 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
@@ -24,7 +24,6 @@ import de.danoeh.antennapod.core.glide.ApGlideSettings;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
-import de.greenrobot.event.EventBus;
import io.reactivex.Maybe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@@ -92,13 +91,6 @@ public class ExternalPlayerFragment extends Fragment {
loadMediaInfo();
}
- public void onEventMainThread(ServiceEvent event) {
- Log.d(TAG, "onEvent(" + event + ")");
- if (event.action == ServiceEvent.Action.SERVICE_STARTED) {
- controller.init();
- }
- }
-
private PlaybackController setupPlaybackController() {
return new PlaybackController(getActivity(), true) {
@@ -146,7 +138,6 @@ public class ExternalPlayerFragment extends Fragment {
controller = setupPlaybackController();
controller.init();
loadMediaInfo();
- EventBus.getDefault().register(this);
}
@Override
@@ -156,7 +147,6 @@ public class ExternalPlayerFragment extends Fragment {
controller.release();
controller = null;
}
- EventBus.getDefault().unregister(this);
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java
index d4a662d43..d362d5c0b 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java
@@ -18,6 +18,8 @@ import de.danoeh.antennapod.core.event.FavoritesEvent;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
/**
@@ -37,6 +39,7 @@ public class FavoriteEpisodesFragment extends AllEpisodesFragment {
@Override
protected String getPrefName() { return PREF_NAME; }
+ @Subscribe
public void onEvent(FavoritesEvent event) {
Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]");
loadItems();
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
index 9cee59531..ed591d21c 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
@@ -28,7 +28,6 @@ import android.widget.Toast;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MediaplayerInfoActivity;
-import de.danoeh.antennapod.core.event.ServiceEvent;
import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.IntentUtils;
@@ -36,7 +35,6 @@ import de.danoeh.antennapod.core.util.NetworkUtils;
import de.danoeh.antennapod.core.util.ShareUtils;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
import de.danoeh.antennapod.core.util.playback.Timeline;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@@ -310,19 +308,11 @@ public class ItemDescriptionFragment extends Fragment {
};
controller.init();
load();
- EventBus.getDefault().register(this);
- }
-
- public void onEventMainThread(ServiceEvent event) {
- if (event.action == ServiceEvent.Action.SERVICE_STARTED && controller != null) {
- controller.init();
- }
}
@Override
public void onStop() {
super.onStop();
- EventBus.getDefault().unregister(this);
controller.release();
controller = null;
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
index e114ef405..2b8b2aa33 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java
@@ -68,11 +68,13 @@ import de.danoeh.antennapod.core.util.playback.Timeline;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.view.OnSwipeGesture;
import de.danoeh.antennapod.view.SwipeGestureDetector;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
/**
* Displays information about a FeedItem and actions.
@@ -266,10 +268,15 @@ public class ItemFragment extends Fragment implements OnSwipeGesture {
}
@Override
+ public void onStart() {
+ super.onStart();
+ EventDistributor.getInstance().register(contentUpdate);
+ EventBus.getDefault().register(this);
+ }
+
+ @Override
public void onResume() {
super.onResume();
- EventDistributor.getInstance().register(contentUpdate);
- EventBus.getDefault().registerSticky(this);
if(itemsLoaded) {
progbarLoading.setVisibility(View.GONE);
updateAppearance();
@@ -277,8 +284,8 @@ public class ItemFragment extends Fragment implements OnSwipeGesture {
}
@Override
- public void onPause() {
- super.onPause();
+ public void onStop() {
+ super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
EventBus.getDefault().unregister(this);
}
@@ -537,6 +544,7 @@ public class ItemFragment extends Fragment implements OnSwipeGesture {
((MainActivity)getActivity()).loadChildFragment(fragment);
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(FeedItemEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
for(FeedItem item : event.items) {
@@ -547,6 +555,7 @@ public class ItemFragment extends Fragment implements OnSwipeGesture {
}
}
+ @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
DownloaderUpdate update = event.update;
@@ -592,7 +601,7 @@ public class ItemFragment extends Fragment implements OnSwipeGesture {
private FeedItem loadInBackground() {
FeedItem feedItem = DBReader.getFeedItem(feedItems[feedItemPos]);
if (feedItem != null) {
- Timeline t = new Timeline(getActivity(), feedItem);
+ Timeline t = new Timeline(getContext(), feedItem);
webviewData = t.processShownotes(false);
}
return feedItem;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
index 726de8369..3d6e0a458 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java
@@ -68,11 +68,13 @@ import de.danoeh.antennapod.dialog.RenameFeedDialog;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.FeedMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
/**
* Displays a list of FeedItems.
@@ -143,6 +145,8 @@ public class ItemlistFragment extends ListFragment {
@Override
public void onStart() {
super.onStart();
+ EventDistributor.getInstance().register(contentUpdate);
+ EventBus.getDefault().register(this);
if (viewsCreated && itemsLoaded) {
onFragmentLoaded();
}
@@ -151,16 +155,14 @@ public class ItemlistFragment extends ListFragment {
@Override
public void onResume() {
super.onResume();
- EventDistributor.getInstance().register(contentUpdate);
- EventBus.getDefault().registerSticky(this);
((MainActivity)getActivity()).getSupportActionBar().setTitle("");
updateProgressBarVisibility();
loadItems();
}
@Override
- public void onPause() {
- super.onPause();
+ public void onStop() {
+ super.onStop();
EventDistributor.getInstance().unregister(contentUpdate);
EventBus.getDefault().unregister(this);
if(disposable != null) {
@@ -359,6 +361,7 @@ public class ItemlistFragment extends ListFragment {
activity.getSupportActionBar().setTitle(feed.getTitle());
}
+ @Subscribe
public void onEvent(FeedEvent event) {
Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]");
if(event.feedId == feedID) {
@@ -366,6 +369,7 @@ public class ItemlistFragment extends ListFragment {
}
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(FeedItemEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if(feed == null || feed.getItems() == null || adapter == null) {
@@ -380,6 +384,7 @@ public class ItemlistFragment extends ListFragment {
}
}
+ @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
DownloaderUpdate update = event.update;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
index e8f35b180..efa727ca0 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java
@@ -31,11 +31,13 @@ import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.view.EmptyViewHandler;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
public class PlaybackHistoryFragment extends ListFragment {
@@ -91,29 +93,18 @@ public class PlaybackHistoryFragment extends ListFragment {
}
-
- @Override
- public void onResume() {
- super.onResume();
- EventBus.getDefault().registerSticky(this);
- loadItems();
- }
-
@Override
public void onStart() {
super.onStart();
EventDistributor.getInstance().register(contentUpdate);
- }
-
- @Override
- public void onPause() {
- super.onPause();
- EventBus.getDefault().unregister(this);
+ EventBus.getDefault().register(this);
+ loadItems();
}
@Override
public void onStop() {
super.onStop();
+ EventBus.getDefault().unregister(this);
EventDistributor.getInstance().unregister(contentUpdate);
if(disposable != null) {
disposable.dispose();
@@ -135,6 +126,7 @@ public class PlaybackHistoryFragment extends ListFragment {
viewsCreated = false;
}
+ @Subscribe(sticky = true)
public void onEvent(DownloadEvent event) {
Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]");
DownloaderUpdate update = event.update;
@@ -193,6 +185,7 @@ public class PlaybackHistoryFragment extends ListFragment {
}
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(FeedItemEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if(playbackHistory == null) {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
index 13580be4f..36d0811b3 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java
@@ -52,12 +52,15 @@ import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.QueueSorter;
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
+
import de.danoeh.antennapod.view.EmptyViewHandler;
-import de.greenrobot.event.EventBus;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
/**
* Shows all items in the queue
@@ -105,7 +108,7 @@ public class QueueFragment extends Fragment {
}
loadItems(true);
EventDistributor.getInstance().register(contentUpdate);
- EventBus.getDefault().registerSticky(this);
+ EventBus.getDefault().register(this);
}
@Override
@@ -124,6 +127,7 @@ public class QueueFragment extends Fragment {
}
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(QueueEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if (queue == null) {
@@ -162,6 +166,7 @@ public class QueueFragment extends Fragment {
onFragmentLoaded(false);
}
+ @Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(FeedItemEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
if (queue == null) {
@@ -182,6 +187,7 @@ public class QueueFragment extends Fragment {
}
}
+ @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEventMainThread(DownloadEvent event) {
Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]");
DownloaderUpdate update = event.update;
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
index 3c40b542c..718502ea2 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java
@@ -21,7 +21,8 @@ import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.core.storage.DownloadRequester;
import de.danoeh.antennapod.view.EmptyViewHandler;
-import de.greenrobot.event.EventBus;
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
/**
* Displays all running downloads and provides actions to cancel them
@@ -54,14 +55,14 @@ public class RunningDownloadsFragment extends ListFragment {
}
@Override
- public void onResume() {
- super.onResume();
- EventBus.getDefault().registerSticky(this);
+ public void onStart() {
+ super.onStart();
+ EventBus.getDefault().register(this);
}
@Override
- public void onPause() {
- super.onPause();
+ public void onStop() {
+ super.onStop();
EventBus.getDefault().unregister(this);
}
@@ -72,6 +73,7 @@ public class RunningDownloadsFragment extends ListFragment {
adapter = null;
}
+ @Subscribe(sticky = true)
public void onEvent(DownloadEvent event) {
Log.d(TAG, "onEvent() called with: " + "event = [" + event + "]");
DownloaderUpdate update = event.update;
diff --git a/app/src/main/res/layout/cover_fragment.xml b/app/src/main/res/layout/cover_fragment.xml
index b1e93a195..fec7be26c 100644
--- a/app/src/main/res/layout/cover_fragment.xml
+++ b/app/src/main/res/layout/cover_fragment.xml
@@ -1,70 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
-
-<android.support.percent.PercentRelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:padding="8dp">
+
+ <TextView
+ android:id="@+id/txtvPodcastTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:ellipsize="end"
+ android:gravity="center"
+ android:maxLines="2"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textIsSelectable="true"
+ tools:text="Podcast" />
<ImageView
android:id="@+id/imgvCover"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_centerInParent="true"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.5"
android:contentDescription="@string/cover_label"
android:scaleType="fitCenter"
- app:layout_aspectRatio="100%"
- app:layout_widthPercent="82%"
android:transitionName="coverTransition"
tools:src="@android:drawable/sym_def_app_icon" />
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:orientation="vertical"
- android:layout_above="@id/imgvCover">
-
- <TextView
- android:id="@+id/txtvPodcastTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dp"
- android:layout_marginRight="8dp"
- android:layout_marginStart="8dp"
- android:layout_marginEnd="8dp"
- android:gravity="center"
- android:maxLines="2"
- android:ellipsize="end"
- android:text="Podcast"
- android:textIsSelectable="true"
- android:textColor="?android:attr/textColorSecondary" />
-
- </LinearLayout>
-
- <LinearLayout
+ <TextView
+ android:id="@+id/txtvEpisodeTitle"
android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:ellipsize="end"
android:gravity="center"
- android:orientation="vertical"
- android:layout_below="@id/imgvCover">
-
- <TextView
- android:id="@+id/txtvEpisodeTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dp"
- android:layout_marginRight="8dp"
- android:layout_marginStart="8dp"
- android:layout_marginEnd="8dp"
- android:gravity="center"
- android:maxLines="2"
- android:ellipsize="end"
- android:text="Episode"
- android:textIsSelectable="true"
- android:textColor="?android:attr/textColorPrimary" />
-
- </LinearLayout>
+ android:maxLines="2"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textIsSelectable="true"
+ tools:text="Episode" />
-</android.support.percent.PercentRelativeLayout>
+</LinearLayout>
diff --git a/app/src/main/res/menu/episodes.xml b/app/src/main/res/menu/episodes.xml
index bbaabcd8b..e21aac04e 100644
--- a/app/src/main/res/menu/episodes.xml
+++ b/app/src/main/res/menu/episodes.xml
@@ -6,7 +6,7 @@
<item
android:id="@+id/action_search"
android:icon="?attr/action_search"
- custom:showAsAction="always"
+ custom:showAsAction="collapseActionView|ifRoom"
custom:actionViewClass="android.support.v7.widget.SearchView"
android:title="@string/search_label"/>
@@ -14,7 +14,7 @@
android:id="@+id/refresh_item"
android:title="@string/refresh_label"
android:menuCategory="container"
- custom:showAsAction="always"
+ custom:showAsAction="ifRoom"
android:icon="?attr/navigation_refresh"/>
<item