summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Lehmann <ByteHamster@users.noreply.github.com>2018-08-06 23:38:37 +0200
committerGitHub <noreply@github.com>2018-08-06 23:38:37 +0200
commit1d265a9c3a6f72c0e1455dd4381505b8bee02b3f (patch)
tree9bae77cdba6dd133fc49796b23e9852b1a938d1a
parent3d61002d88c880dfe02c95836f21f8fccbabec90 (diff)
downloadAntennaPod-1d265a9c3a6f72c0e1455dd4381505b8bee02b3f.zip
Database access threading (#2781)
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/SplashActivity.java49
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java17
-rw-r--r--app/src/main/res/layout/splash.xml14
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/playback/PlaybackService.java6
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/util/playback/PlaybackController.java33
5 files changed, 89 insertions, 30 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/SplashActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/SplashActivity.java
index b92ac8577..73b495a42 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/SplashActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/SplashActivity.java
@@ -1,23 +1,50 @@
package de.danoeh.antennapod.activity;
import android.content.Intent;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.app.AppCompatActivity;
+import android.widget.ProgressBar;
+import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.core.storage.PodDBAdapter;
+import rx.Completable;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
- * Creator: vbarad
- * Date: 2016-12-03
- * Project: AntennaPod
+ * Shows the AntennaPod logo while waiting for the main activity to start
*/
-
public class SplashActivity extends AppCompatActivity {
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.splash);
+
+ ProgressBar progressBar = findViewById(R.id.progressBar);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ Drawable wrapDrawable = DrawableCompat.wrap(progressBar.getIndeterminateDrawable());
+ DrawableCompat.setTint(wrapDrawable, 0xffffffff);
+ progressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
+ } else {
+ progressBar.getIndeterminateDrawable().setColorFilter(0xffffffff, PorterDuff.Mode.SRC_IN);
+ }
- Intent intent = new Intent(this, MainActivity.class);
- startActivity(intent);
- finish();
- }
+ Completable.create(subscriber -> {
+ // Trigger schema updates
+ PodDBAdapter.getInstance().open();
+ PodDBAdapter.getInstance().close();
+ subscriber.onCompleted();
+ })
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(() -> {
+ Intent intent = new Intent(SplashActivity.this, MainActivity.class);
+ startActivity(intent);
+ finish();
+ });
+ }
}
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 b072aeaf2..dc0ea07ff 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
@@ -23,6 +23,9 @@ import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
+import rx.Single;
+import rx.android.schedulers.AndroidSchedulers;
+import rx.schedulers.Schedulers;
/**
* Fragment which is supposed to be displayed outside of the MediaplayerActivity
@@ -127,8 +130,9 @@ public class ExternalPlayerFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
- controller.init();
onPositionObserverUpdate();
+
+ controller.init();
}
@Override
@@ -173,7 +177,14 @@ public class ExternalPlayerFragment extends Fragment {
return false;
}
- Playable media = controller.getMedia();
+ Single.create(subscriber -> subscriber.onSuccess(controller.getMedia()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(media -> updateUi((Playable) media));
+ return true;
+ }
+
+ private void updateUi(Playable media) {
if (media != null) {
txtvTitle.setText(media.getEpisodeTitle());
mFeedName.setText(media.getFeedTitle());
@@ -194,10 +205,8 @@ public class ExternalPlayerFragment extends Fragment {
} else {
butPlay.setVisibility(View.VISIBLE);
}
- return true;
} else {
Log.w(TAG, "loadMediaInfo was called while the media object of playbackService was null!");
- return false;
}
}
diff --git a/app/src/main/res/layout/splash.xml b/app/src/main/res/layout/splash.xml
new file mode 100644
index 000000000..71b6cd15a
--- /dev/null
+++ b/app/src/main/res/layout/splash.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <ProgressBar
+ style="?android:attr/progressBarStyle"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_margin="36dp"
+ android:id="@+id/progressBar"/>
+</RelativeLayout>
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 574e43faa..a7c01e43a 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
@@ -263,6 +263,9 @@ public class PlaybackService extends MediaBrowserServiceCompat {
Log.d(TAG, "Service created.");
isRunning = true;
+ NotificationCompat.Builder notificationBuilder = createBasicNotification();
+ startForeground(NOTIFICATION_ID, notificationBuilder.build());
+
registerReceiver(autoStateUpdated, new IntentFilter("com.google.android.gms.car.media.STATUS"));
registerReceiver(headsetDisconnected, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
registerReceiver(shutdownReceiver, new IntentFilter(ACTION_SHUTDOWN_PLAYBACK_SERVICE));
@@ -311,11 +314,8 @@ public class PlaybackService extends MediaBrowserServiceCompat {
}
flavorHelper.initializeMediaPlayer(PlaybackService.this);
-
mediaSession.setActive(true);
- NotificationCompat.Builder notificationBuilder = createBasicNotification();
- startForeground(NOTIFICATION_ID, notificationBuilder.build());
EventBus.getDefault().post(new ServiceEvent(ServiceEvent.Action.SERVICE_STARTED));
}
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 a3f02d5cc..31067839a 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
@@ -42,9 +42,12 @@ import de.danoeh.antennapod.core.service.playback.PlayerStatus;
import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.playback.Playable.PlayableUtils;
+import rx.Completable;
import rx.Observable;
+import rx.Single;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
+import rx.observers.Subscribers;
import rx.schedulers.Schedulers;
/**
@@ -780,18 +783,24 @@ public abstract class PlaybackController {
}
private void initServiceNotRunning() {
- if (getMedia() == null) {
- return;
- }
- if (getMedia().getMediaType() == MediaType.AUDIO) {
- TypedArray res = activity.obtainStyledAttributes(new int[]{
- de.danoeh.antennapod.core.R.attr.av_play_big});
- getPlayButton().setImageResource(
- res.getResourceId(0, de.danoeh.antennapod.core.R.drawable.ic_play_arrow_grey600_36dp));
- res.recycle();
- } else {
- getPlayButton().setImageResource(R.drawable.ic_av_play_circle_outline_80dp);
- }
+ Single.create(subscriber -> subscriber.onSuccess(getMedia()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe((Object media) -> {
+ if (media == null) {
+ return;
+ }
+
+ if (((Playable) media).getMediaType() == MediaType.AUDIO) {
+ TypedArray res = activity.obtainStyledAttributes(new int[]{
+ de.danoeh.antennapod.core.R.attr.av_play_big});
+ getPlayButton().setImageResource(
+ res.getResourceId(0, de.danoeh.antennapod.core.R.drawable.ic_play_arrow_grey600_36dp));
+ res.recycle();
+ } else {
+ getPlayButton().setImageResource(R.drawable.ic_av_play_circle_outline_80dp);
+ }
+ });
}
/**