Merge pull request #3278 from ByteHamster/empty-view

Updated empty views
This commit is contained in:
H. Lehmann 2019-07-22 19:05:39 +02:00 committed by GitHub
commit eaa1527fac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 79 additions and 29 deletions

View File

@ -310,6 +310,7 @@ public class AllEpisodesFragment extends Fragment {
emptyView = new EmptyViewHandler(getContext()); emptyView = new EmptyViewHandler(getContext());
emptyView.attachToRecyclerView(recyclerView); emptyView.attachToRecyclerView(recyclerView);
emptyView.setIcon(R.attr.feed);
emptyView.setTitle(R.string.no_all_episodes_head_label); emptyView.setTitle(R.string.no_all_episodes_head_label);
emptyView.setMessage(R.string.no_all_episodes_label); emptyView.setMessage(R.string.no_all_episodes_label);

View File

@ -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.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController; import de.danoeh.antennapod.core.util.playback.PlaybackController;
import de.danoeh.antennapod.view.EmptyViewHandler;
import io.reactivex.Maybe; import io.reactivex.Maybe;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
@ -25,6 +26,7 @@ public class ChaptersFragment extends ListFragment {
private ChaptersListAdapter adapter; private ChaptersListAdapter adapter;
private PlaybackController controller; private PlaybackController controller;
private Disposable disposable; private Disposable disposable;
private EmptyViewHandler emptyView;
@Override @Override
@ -36,6 +38,12 @@ public class ChaptersFragment extends ListFragment {
final int vertPadding = getResources().getDimensionPixelSize(R.dimen.list_vertical_padding); final int vertPadding = getResources().getDimensionPixelSize(R.dimen.list_vertical_padding);
lv.setPadding(0, vertPadding, 0, vertPadding); 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 -> { adapter = new ChaptersListAdapter(getActivity(), 0, pos -> {
Chapter chapter = (Chapter) getListAdapter().getItem(pos); Chapter chapter = (Chapter) getListAdapter().getItem(pos);
controller.seekToChapter(chapter); controller.seekToChapter(chapter);
@ -118,10 +126,7 @@ public class ChaptersFragment extends ListFragment {
if (adapter != null) { if (adapter != null) {
adapter.setMedia(media); adapter.setMedia(media);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
if (media == null || media.getChapters() == null || media.getChapters().size() == 0) { if (media != null && media.getChapters() != null && media.getChapters().size() != 0) {
setEmptyText(getString(R.string.no_chapters_label));
} else {
setEmptyText(null);
scrollTo(getCurrentChapter(media)); scrollTo(getCurrentChapter(media));
} }
} }

View File

@ -101,6 +101,7 @@ public class CompletedDownloadsFragment extends ListFragment {
private void addEmptyView() { private void addEmptyView() {
EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); EmptyViewHandler emptyView = new EmptyViewHandler(getActivity());
emptyView.setIcon(R.attr.av_download);
emptyView.setTitle(R.string.no_comp_downloads_head_label); emptyView.setTitle(R.string.no_comp_downloads_head_label);
emptyView.setMessage(R.string.no_comp_downloads_label); emptyView.setMessage(R.string.no_comp_downloads_label);
emptyView.attachToListView(getListView()); emptyView.attachToListView(getListView());

View File

@ -70,6 +70,7 @@ public class DownloadLogFragment extends ListFragment {
lv.setPadding(0, vertPadding, 0, vertPadding); lv.setPadding(0, vertPadding, 0, vertPadding);
EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); EmptyViewHandler emptyView = new EmptyViewHandler(getActivity());
emptyView.setIcon(R.attr.av_download);
emptyView.setTitle(R.string.no_log_downloads_head_label); emptyView.setTitle(R.string.no_log_downloads_head_label);
emptyView.setMessage(R.string.no_log_downloads_label); emptyView.setMessage(R.string.no_log_downloads_label);
emptyView.attachToListView(getListView()); emptyView.attachToListView(getListView());

View File

@ -50,6 +50,7 @@ public class FavoriteEpisodesFragment extends AllEpisodesFragment {
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = super.onCreateView(inflater, container, savedInstanceState); View root = super.onCreateView(inflater, container, savedInstanceState);
emptyView.setIcon(R.attr.ic_unfav);
emptyView.setTitle(R.string.no_fav_episodes_head_label); emptyView.setTitle(R.string.no_fav_episodes_head_label);
emptyView.setMessage(R.string.no_fav_episodes_label); emptyView.setMessage(R.string.no_fav_episodes_label);

View File

@ -68,6 +68,7 @@ public class PlaybackHistoryFragment extends ListFragment {
lv.setPadding(0, vertPadding, 0, vertPadding); lv.setPadding(0, vertPadding, 0, vertPadding);
EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); EmptyViewHandler emptyView = new EmptyViewHandler(getActivity());
emptyView.setIcon(R.attr.ic_history);
emptyView.setTitle(R.string.no_history_head_label); emptyView.setTitle(R.string.no_history_head_label);
emptyView.setMessage(R.string.no_history_label); emptyView.setMessage(R.string.no_history_label);
emptyView.attachToListView(getListView()); emptyView.attachToListView(getListView());

View File

@ -511,6 +511,7 @@ public class QueueFragment extends Fragment {
emptyView = new EmptyViewHandler(getContext()); emptyView = new EmptyViewHandler(getContext());
emptyView.attachToRecyclerView(recyclerView); emptyView.attachToRecyclerView(recyclerView);
emptyView.setIcon(R.attr.stat_playlist);
emptyView.setTitle(R.string.no_items_header_label); emptyView.setTitle(R.string.no_items_header_label);
emptyView.setMessage(R.string.no_items_label); emptyView.setMessage(R.string.no_items_label);

View File

@ -50,6 +50,7 @@ public class RunningDownloadsFragment extends ListFragment {
setListAdapter(adapter); setListAdapter(adapter);
EmptyViewHandler emptyView = new EmptyViewHandler(getActivity()); EmptyViewHandler emptyView = new EmptyViewHandler(getActivity());
emptyView.setIcon(R.attr.av_download);
emptyView.setTitle(R.string.no_run_downloads_head_label); emptyView.setTitle(R.string.no_run_downloads_head_label);
emptyView.setMessage(R.string.no_run_downloads_label); emptyView.setMessage(R.string.no_run_downloads_label);
emptyView.attachToListView(getListView()); emptyView.attachToListView(getListView());

View File

@ -1,9 +1,14 @@
package de.danoeh.antennapod.view; package de.danoeh.antennapod.view;
import android.content.Context; 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.support.v7.widget.RecyclerView;
import android.util.TypedValue;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView; import android.widget.ListView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
@ -15,14 +20,18 @@ public class EmptyViewHandler {
private RecyclerView recyclerView; private RecyclerView recyclerView;
private RecyclerView.Adapter adapter; private RecyclerView.Adapter adapter;
private final Context context;
private final View emptyView; private final View emptyView;
private final TextView tvTitle; private final TextView tvTitle;
private final TextView tvMessage; private final TextView tvMessage;
private final ImageView ivIcon;
public EmptyViewHandler(Context context) { public EmptyViewHandler(Context context) {
emptyView = View.inflate(context, R.layout.empty_view_layout, null); emptyView = View.inflate(context, R.layout.empty_view_layout, null);
this.context = context;
tvTitle = emptyView.findViewById(R.id.emptyViewTitle); tvTitle = emptyView.findViewById(R.id.emptyViewTitle);
tvMessage = emptyView.findViewById(R.id.emptyViewMessage); tvMessage = emptyView.findViewById(R.id.emptyViewMessage);
ivIcon = emptyView.findViewById(R.id.emptyViewIcon);
} }
public void setTitle(int title) { public void setTitle(int title) {
@ -33,6 +42,14 @@ public class EmptyViewHandler {
tvMessage.setText(message); 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() { public void hide() {
emptyView.setVisibility(View.GONE); emptyView.setVisibility(View.GONE);
} }

View File

@ -1,31 +1,39 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent" android:layout_width="match_parent"
android:orientation="vertical" android:layout_height="match_parent"
android:gravity="center" android:orientation="vertical"
android:layout_centerInParent="true" android:gravity="center"
xmlns:tools="http://schemas.android.com/tools"> android:layout_centerInParent="true"
android:paddingLeft="40dp"
android:paddingRight="40dp"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/emptyViewIcon"
android:layout_width="40dp"
android:layout_height="40dp"
android:paddingBottom="8dp"
android:visibility="gone"
tools:src="@drawable/ic_feed_grey600_24dp"
tools:visibility="visible"/>
<TextView <TextView
android:id="@+id/emptyViewTitle" android:id="@+id/emptyViewTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingLeft="10dp" tools:text="Title"
android:paddingRight="10dp" android:textSize="16sp"
tools:text="empty" android:textStyle="bold"
android:textSize="20sp" android:paddingBottom="8dp"/>
android:textStyle="bold"
android:paddingBottom="10dp"/>
<TextView <TextView
android:id="@+id/emptyViewMessage" android:id="@+id/emptyViewMessage"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="15sp" android:textSize="14sp"
tools:text="empty" tools:text="Message"
android:paddingLeft="15dp" android:textAlignment="center"/>
android:paddingRight="15dp"
android:textAlignment="center"/>
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#b4b4b4"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFb4b4b4" android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFFFF" android:pathData="M17,3H7c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>

View File

@ -61,6 +61,7 @@
<attr name="ic_known_issues" format="reference" /> <attr name="ic_known_issues" format="reference" />
<attr name="master_switch_background" format="color"/> <attr name="master_switch_background" format="color"/>
<attr name="currently_playing_background" format="color"/> <attr name="currently_playing_background" format="color"/>
<attr name="ic_bookmark" format="reference"/>
<!-- Used in itemdescription --> <!-- Used in itemdescription -->
<attr name="non_transparent_background" format="reference"/> <attr name="non_transparent_background" format="reference"/>

View File

@ -315,7 +315,6 @@
<string name="no_items_header_label">No queued episodes</string> <string name="no_items_header_label">No queued episodes</string>
<string name="no_items_label">Add an episode by downloading it, or long press an episode and select \"Add to queue\".</string> <string name="no_items_label">Add an episode by downloading it, or long press an episode and select \"Add to queue\".</string>
<string name="no_feeds_label">You haven\'t subscribed to any podcasts yet.</string> <string name="no_feeds_label">You haven\'t subscribed to any podcasts yet.</string>
<string name="no_chapters_label">This episode has no chapters.</string>
<string name="no_shownotes_label">This episode has no shownotes.</string> <string name="no_shownotes_label">This episode has no shownotes.</string>
<string name="no_run_downloads_head_label">No downloads running</string> <string name="no_run_downloads_head_label">No downloads running</string>
<string name="no_run_downloads_label">You can download episodes on the podcast details screen.</string> <string name="no_run_downloads_label">You can download episodes on the podcast details screen.</string>
@ -331,6 +330,8 @@
<string name="no_new_episodes_label">When new episodes arrive, they will be shown here.</string> <string name="no_new_episodes_label">When new episodes arrive, they will be shown here.</string>
<string name="no_fav_episodes_head_label">No favorite episodes</string> <string name="no_fav_episodes_head_label">No favorite episodes</string>
<string name="no_fav_episodes_label">You can add episodes to the favorites by long-pressing them.</string> <string name="no_fav_episodes_label">You can add episodes to the favorites by long-pressing them.</string>
<string name="no_chapters_head_label">No chapters</string>
<string name="no_chapters_label">This episode has no chapters.</string>
<!-- Preferences --> <!-- Preferences -->
<string name="storage_pref">Storage</string> <string name="storage_pref">Storage</string>

View File

@ -71,7 +71,7 @@
<item name="ic_question_answer">@drawable/ic_forum_grey600_24dp</item> <item name="ic_question_answer">@drawable/ic_forum_grey600_24dp</item>
<item name="ic_bug">@drawable/ic_bug_grey600_24dp</item> <item name="ic_bug">@drawable/ic_bug_grey600_24dp</item>
<item name="ic_known_issues">@drawable/ic_format_list_bulleted_grey600_24dp</item> <item name="ic_known_issues">@drawable/ic_format_list_bulleted_grey600_24dp</item>
<item name="ic_bookmark">@drawable/ic_bookmark_grey600_24dp</item>
<item name="master_switch_background">@color/master_switch_background_light</item> <item name="master_switch_background">@color/master_switch_background_light</item>
<item name="currently_playing_background">@color/highlight_light</item> <item name="currently_playing_background">@color/highlight_light</item>
@ -155,6 +155,7 @@
<item name="ic_question_answer">@drawable/ic_baseline_question_answer_white_24dp</item> <item name="ic_question_answer">@drawable/ic_baseline_question_answer_white_24dp</item>
<item name="ic_bug">@drawable/ic_bug_white_24dp</item> <item name="ic_bug">@drawable/ic_bug_white_24dp</item>
<item name="ic_known_issues">@drawable/ic_format_list_bulleted_white_24dp</item> <item name="ic_known_issues">@drawable/ic_format_list_bulleted_white_24dp</item>
<item name="ic_bookmark">@drawable/ic_bookmark_white_24dp</item>
<item name="master_switch_background">@color/master_switch_background_dark</item> <item name="master_switch_background">@color/master_switch_background_dark</item>
<item name="currently_playing_background">@color/highlight_dark</item> <item name="currently_playing_background">@color/highlight_dark</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item> <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>