diff options
5 files changed, 51 insertions, 19 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java index aa6d80bb0..af3649ed0 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -89,7 +89,6 @@ public class SubscriptionFragment extends Fragment { subscriptionGridLayout.setNumColumns(prefs.getInt(PREF_NUM_COLUMNS, 3)); registerForContextMenu(subscriptionGridLayout); subscriptionAddButton = root.findViewById(R.id.subscriptions_add); - setupEmptyView(); return root; } @@ -154,6 +153,7 @@ public class SubscriptionFragment extends Fragment { subscriptionAdapter = new SubscriptionsAdapter((MainActivity) getActivity(), itemAccess); subscriptionGridLayout.setAdapter(subscriptionAdapter); subscriptionGridLayout.setOnItemClickListener(subscriptionAdapter); + setupEmptyView(); subscriptionAddButton.setOnClickListener(view -> { if (getActivity() instanceof MainActivity) { diff --git a/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java b/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java index 0bfd0247f..a2d8ec091 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java @@ -1,8 +1,10 @@ package de.danoeh.antennapod.view;
import android.content.Context;
+import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.widget.AbsListView;
+import android.widget.ListAdapter;
import androidx.annotation.AttrRes;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
@@ -17,8 +19,9 @@ import de.danoeh.antennapod.R; public class EmptyViewHandler {
private boolean layoutAdded = false;
- private RecyclerView recyclerView;
- private RecyclerView.Adapter adapter;
+ private View list;
+ private ListAdapter listAdapter;
+ private RecyclerView.Adapter recyclerAdapter;
private final Context context;
private final View emptyView;
@@ -60,7 +63,9 @@ public class EmptyViewHandler { }
addToParentView(listView);
layoutAdded = true;
+ this.list = listView;
listView.setEmptyView(emptyView);
+ updateAdapter(listView.getAdapter());
}
public void attachToRecyclerView(RecyclerView recyclerView) {
@@ -69,7 +74,7 @@ public class EmptyViewHandler { }
addToParentView(recyclerView);
layoutAdded = true;
- this.recyclerView = recyclerView;
+ this.list = recyclerView;
updateAdapter(recyclerView.getAdapter());
}
@@ -85,16 +90,27 @@ public class EmptyViewHandler { }
public void updateAdapter(RecyclerView.Adapter adapter) {
- if (this.adapter != null) {
- this.adapter.unregisterAdapterDataObserver(adapterObserver);
+ if (this.recyclerAdapter != null) {
+ this.recyclerAdapter.unregisterAdapterDataObserver(adapterObserver);
}
- this.adapter = adapter;
+ this.recyclerAdapter = adapter;
if (adapter != null) {
adapter.registerAdapterDataObserver(adapterObserver);
}
updateVisibility();
}
+ private void updateAdapter(ListAdapter adapter) {
+ if (this.listAdapter != null) {
+ this.listAdapter.unregisterDataSetObserver(listAdapterObserver);
+ }
+ this.listAdapter = adapter;
+ if (adapter != null) {
+ adapter.registerDataSetObserver(listAdapterObserver);
+ }
+ updateVisibility();
+ }
+
private final SimpleAdapterDataObserver adapterObserver = new SimpleAdapterDataObserver() {
@Override
public void anythingChanged() {
@@ -102,14 +118,22 @@ public class EmptyViewHandler { }
};
+ private final DataSetObserver listAdapterObserver = new DataSetObserver() {
+ public void onChanged() {
+ updateVisibility();
+ }
+ };
+
public void updateVisibility() {
boolean empty;
- if (adapter == null) {
- empty = true;
+ if (recyclerAdapter != null) {
+ empty = recyclerAdapter.getItemCount() == 0;
+ } else if (listAdapter != null) {
+ empty = listAdapter.isEmpty();
} else {
- empty = adapter.getItemCount() == 0;
+ empty = true;
}
- recyclerView.setVisibility(empty ? View.GONE : View.VISIBLE);
+ list.setVisibility(empty ? View.GONE : View.VISIBLE);
emptyView.setVisibility(empty ? View.VISIBLE : View.GONE);
}
}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java index bf990f69d..672cbe9e1 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java @@ -49,7 +49,7 @@ public class AntennapodHttpClient { private static final String TAG = "AntennapodHttpClient"; - private static final int CONNECTION_TIMEOUT = 30000; + private static final int CONNECTION_TIMEOUT = 10000; private static final int READ_TIMEOUT = 30000; private static final int MAX_CONNECTIONS = 8; diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 5f221e92e..95dad1749 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -138,7 +138,7 @@ public class DownloadService extends Service { requester = DownloadRequester.getInstance(); syncExecutor = Executors.newSingleThreadExecutor(r -> { - Thread t = new Thread(r); + Thread t = new Thread(r, "SyncThread"); t.setPriority(Thread.MIN_PRIORITY); return t; }); @@ -146,7 +146,7 @@ public class DownloadService extends Service { downloadExecutor = new ExecutorCompletionService<>( Executors.newFixedThreadPool(UserPreferences.getParallelDownloads(), r -> { - Thread t = new Thread(r); + Thread t = new Thread(r, "DownloadThread"); t.setPriority(Thread.MIN_PRIORITY); return t; } @@ -154,7 +154,7 @@ public class DownloadService extends Service { ); schedExecutor = new ScheduledThreadPoolExecutor(SCHED_EX_POOL_SIZE, r -> { - Thread t = new Thread(r); + Thread t = new Thread(r, "DownloadSchedExecutorThread"); t.setPriority(Thread.MIN_PRIORITY); return t; }, (r, executor) -> Log.w(TAG, "SchedEx rejected submission of new task") @@ -163,11 +163,15 @@ public class DownloadService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { - if (intent != null && - intent.getParcelableArrayListExtra(EXTRA_REQUESTS) != null) { + if (intent != null && intent.getParcelableArrayListExtra(EXTRA_REQUESTS) != null) { + Notification notification = notificationManager.updateNotifications( + requester.getNumberOfDownloads(), downloads); + startForeground(NOTIFICATION_ID, notification); onDownloadQueued(intent); } else if (numberOfDownloads.get() == 0) { stopSelf(); + } else { + Log.d(TAG, "onStartCommand: Unknown intent"); } return Service.START_NOT_STICKY; } @@ -217,7 +221,9 @@ public class DownloadService extends Service { syncExecutor.shutdown(); schedExecutor.shutdown(); cancelNotificationUpdater(); - downloadPostFuture.cancel(true); + if (downloadPostFuture != null) { + downloadPostFuture.cancel(true); + } unregisterReceiver(cancelDownloadReceiver); // if this was the initial gpodder sync, i.e. we just synced the feeds successfully, 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 ea3724adc..96aa9c291 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 @@ -202,7 +202,9 @@ public class DownloadRequester implements DownloadStateProvider { DownloadRequest request = createRequest(feed, null, new File(getFeedfilePath(), getFeedfileName(feed)), true, username, password, lastModified, true, args); - download(context, request); + if (request != null) { + download(context, request); + } } } |