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 9c8cecd43..62d798cf6 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -310,6 +310,7 @@ public class AllEpisodesFragment extends Fragment { emptyView = new EmptyViewHandler(getContext()); emptyView.attachToRecyclerView(recyclerView); + emptyView.setIcon(R.attr.feed); emptyView.setTitle(R.string.no_all_episodes_head_label); emptyView.setMessage(R.string.no_all_episodes_label); 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 0ffd1a8da..4bebfe4c9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ChaptersFragment.java @@ -15,6 +15,7 @@ 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.danoeh.antennapod.view.EmptyViewHandler; import io.reactivex.Maybe; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -25,6 +26,7 @@ public class ChaptersFragment extends ListFragment { private ChaptersListAdapter adapter; private PlaybackController controller; private Disposable disposable; + private EmptyViewHandler emptyView; @Override @@ -36,6 +38,12 @@ public class ChaptersFragment extends ListFragment { final int vertPadding = getResources().getDimensionPixelSize(R.dimen.list_vertical_padding); lv.setPadding(0, vertPadding, 0, vertPadding); + emptyView = new EmptyViewHandler(getContext()); + emptyView.attachToListView(lv); + emptyView.setIcon(R.attr.ic_bookmark); + emptyView.setTitle(R.string.no_chapters_head_label); + emptyView.setMessage(R.string.no_chapters_label); + adapter = new ChaptersListAdapter(getActivity(), 0, pos -> { Chapter chapter = (Chapter) getListAdapter().getItem(pos); controller.seekToChapter(chapter); @@ -118,10 +126,7 @@ public class ChaptersFragment extends ListFragment { if (adapter != null) { adapter.setMedia(media); adapter.notifyDataSetChanged(); - if (media == null || media.getChapters() == null || media.getChapters().size() == 0) { - setEmptyText(getString(R.string.no_chapters_label)); - } else { - setEmptyText(null); + if (media != null && media.getChapters() != null && media.getChapters().size() != 0) { scrollTo(getCurrentChapter(media)); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java index 36a39f578..705151062 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -101,6 +101,7 @@ public class CompletedDownloadsFragment extends ListFragment { private void addEmptyView() { EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); + emptyView.setIcon(R.attr.av_download); emptyView.setTitle(R.string.no_comp_downloads_head_label); emptyView.setMessage(R.string.no_comp_downloads_label); emptyView.attachToListView(getListView()); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java index 4f7ec4050..26b115b4b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java @@ -70,6 +70,7 @@ public class DownloadLogFragment extends ListFragment { lv.setPadding(0, vertPadding, 0, vertPadding); EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); + emptyView.setIcon(R.attr.av_download); emptyView.setTitle(R.string.no_log_downloads_head_label); emptyView.setMessage(R.string.no_log_downloads_label); emptyView.attachToListView(getListView()); 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 c273a7033..bb029b731 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FavoriteEpisodesFragment.java @@ -50,6 +50,7 @@ public class FavoriteEpisodesFragment extends AllEpisodesFragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = super.onCreateView(inflater, container, savedInstanceState); + emptyView.setIcon(R.attr.ic_unfav); emptyView.setTitle(R.string.no_fav_episodes_head_label); emptyView.setMessage(R.string.no_fav_episodes_label); 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 b63936643..e2060481f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -68,6 +68,7 @@ public class PlaybackHistoryFragment extends ListFragment { lv.setPadding(0, vertPadding, 0, vertPadding); EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); + emptyView.setIcon(R.attr.ic_history); emptyView.setTitle(R.string.no_history_head_label); emptyView.setMessage(R.string.no_history_label); emptyView.attachToListView(getListView()); 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 71b3c27a2..b61484715 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -511,6 +511,7 @@ public class QueueFragment extends Fragment { emptyView = new EmptyViewHandler(getContext()); emptyView.attachToRecyclerView(recyclerView); + emptyView.setIcon(R.attr.stat_playlist); emptyView.setTitle(R.string.no_items_header_label); emptyView.setMessage(R.string.no_items_label); 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 31b9d7b8d..2a7f7d12b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java @@ -50,6 +50,7 @@ public class RunningDownloadsFragment extends ListFragment { setListAdapter(adapter); EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); + emptyView.setIcon(R.attr.av_download); emptyView.setTitle(R.string.no_run_downloads_head_label); emptyView.setMessage(R.string.no_run_downloads_label); emptyView.attachToListView(getListView()); 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 42c11bc8e..8b886e699 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/view/EmptyViewHandler.java @@ -1,9 +1,14 @@ package de.danoeh.antennapod.view; import android.content.Context; +import android.graphics.drawable.Drawable; +import android.support.annotation.AttrRes; +import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; +import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; @@ -15,14 +20,18 @@ public class EmptyViewHandler { private RecyclerView recyclerView; private RecyclerView.Adapter adapter; + private final Context context; private final View emptyView; private final TextView tvTitle; private final TextView tvMessage; + private final ImageView ivIcon; public EmptyViewHandler(Context context) { emptyView = View.inflate(context, R.layout.empty_view_layout, null); + this.context = context; tvTitle = emptyView.findViewById(R.id.emptyViewTitle); tvMessage = emptyView.findViewById(R.id.emptyViewMessage); + ivIcon = emptyView.findViewById(R.id.emptyViewIcon); } public void setTitle(int title) { @@ -33,6 +42,14 @@ public class EmptyViewHandler { tvMessage.setText(message); } + public void setIcon(@AttrRes int iconAttr) { + TypedValue typedValue = new TypedValue(); + context.getTheme().resolveAttribute(iconAttr, typedValue, true); + Drawable d = ContextCompat.getDrawable(context, typedValue.resourceId); + ivIcon.setImageDrawable(d); + ivIcon.setVisibility(View.VISIBLE); + } + public void hide() { emptyView.setVisibility(View.GONE); } diff --git a/app/src/main/res/layout/empty_view_layout.xml b/app/src/main/res/layout/empty_view_layout.xml index 84b171af0..4ccbf45db 100644 --- a/app/src/main/res/layout/empty_view_layout.xml +++ b/app/src/main/res/layout/empty_view_layout.xml @@ -1,31 +1,39 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:gravity="center" + android:layout_centerInParent="true" + android:paddingLeft="40dp" + android:paddingRight="40dp" + xmlns:tools="http://schemas.android.com/tools"> + + + android:id="@+id/emptyViewTitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + tools:text="Title" + android:textSize="16sp" + android:textStyle="bold" + android:paddingBottom="8dp"/> + android:id="@+id/emptyViewMessage" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="14sp" + tools:text="Message" + android:textAlignment="center"/> \ No newline at end of file diff --git a/core/src/main/res/drawable/ic_bookmark_grey600_24dp.xml b/core/src/main/res/drawable/ic_bookmark_grey600_24dp.xml new file mode 100644 index 000000000..d665d42a5 --- /dev/null +++ b/core/src/main/res/drawable/ic_bookmark_grey600_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/core/src/main/res/drawable/ic_bookmark_white_24dp.xml b/core/src/main/res/drawable/ic_bookmark_white_24dp.xml new file mode 100644 index 000000000..02728b731 --- /dev/null +++ b/core/src/main/res/drawable/ic_bookmark_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/core/src/main/res/values/attrs.xml b/core/src/main/res/values/attrs.xml index 5311d6cd2..eb7f065ce 100644 --- a/core/src/main/res/values/attrs.xml +++ b/core/src/main/res/values/attrs.xml @@ -61,6 +61,7 @@ + diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 94f25d023..e1ae9e3d3 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -315,7 +315,6 @@ No queued episodes Add an episode by downloading it, or long press an episode and select \"Add to queue\". You haven\'t subscribed to any podcasts yet. - This episode has no chapters. This episode has no shownotes. No downloads running You can download episodes on the podcast details screen. @@ -331,6 +330,8 @@ When new episodes arrive, they will be shown here. No favorite episodes You can add episodes to the favorites by long-pressing them. + No chapters + This episode has no chapters. Storage diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml index d80137ea3..4c69306a9 100644 --- a/core/src/main/res/values/styles.xml +++ b/core/src/main/res/values/styles.xml @@ -71,7 +71,7 @@ @drawable/ic_forum_grey600_24dp @drawable/ic_bug_grey600_24dp @drawable/ic_format_list_bulleted_grey600_24dp - + @drawable/ic_bookmark_grey600_24dp @color/master_switch_background_light @color/highlight_light @@ -155,6 +155,7 @@ @drawable/ic_baseline_question_answer_white_24dp @drawable/ic_bug_white_24dp @drawable/ic_format_list_bulleted_white_24dp + @drawable/ic_bookmark_white_24dp @color/master_switch_background_dark @color/highlight_dark @style/PreferenceThemeOverlay.v14.Material