From d3dc7744922fe43d4aa47600190ee54763016d61 Mon Sep 17 00:00:00 2001 From: Grishka Date: Tue, 17 Oct 2023 03:22:23 +0300 Subject: [PATCH] Empty states for home timeline popup submenus (AND-99) --- .../DropdownSubmenuController.java | 15 ++++++- .../HomeTimelineHashtagsMenuController.java | 5 +++ .../HomeTimelineListsMenuController.java | 11 +++++ .../src/main/res/layout/popup_menu_empty.xml | 44 +++++++++++++++++++ mastodon/src/main/res/values/strings.xml | 4 ++ 5 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 mastodon/src/main/res/layout/popup_menu_empty.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/DropdownSubmenuController.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/DropdownSubmenuController.java index bd0ad1f44..ae6538c19 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/DropdownSubmenuController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/DropdownSubmenuController.java @@ -7,17 +7,19 @@ import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityNodeInfo; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.ui.BetterItemAnimator; +import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter; import org.joinmastodon.android.ui.utils.UiUtils; -import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.StringRes; import androidx.recyclerview.widget.LinearLayoutManager; @@ -108,6 +110,17 @@ public abstract class DropdownSubmenuController{ return contentView; } + protected HideableSingleViewRecyclerAdapter createEmptyView(@DrawableRes int icon, @StringRes int title, @StringRes int subtitle){ + View view=dropdownController.getActivity().getLayoutInflater().inflate(R.layout.popup_menu_empty, list, false); + ImageView iconView=view.findViewById(R.id.icon); + TextView titleView=view.findViewById(R.id.title); + TextView subtitleView=view.findViewById(R.id.subtitle); + iconView.setImageResource(icon); + titleView.setText(title); + subtitleView.setText(subtitle); + return new HideableSingleViewRecyclerAdapter(view); + } + protected final class Item{ public final String title; public final boolean hasSubmenu; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineHashtagsMenuController.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineHashtagsMenuController.java index b905cf675..33721ab5b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineHashtagsMenuController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineHashtagsMenuController.java @@ -28,6 +28,7 @@ import me.grishka.appkit.utils.V; public class HomeTimelineHashtagsMenuController extends DropdownSubmenuController{ private HideableSingleViewRecyclerAdapter largeProgressAdapter; + private HideableSingleViewRecyclerAdapter emptyAdapter; private APIRequest currentRequest; public HomeTimelineHashtagsMenuController(ToolbarDropdownMenuController dropdownController){ @@ -39,6 +40,7 @@ public class HomeTimelineHashtagsMenuController extends DropdownSubmenuControlle @Override protected void createView(){ super.createView(); + emptyAdapter=createEmptyView(R.drawable.ic_tag_24px, R.string.no_followed_hashtags_title, R.string.no_followed_hashtags_subtitle); FrameLayout largeProgressView=new FrameLayout(dropdownController.getActivity()); int pad=V.dp(32); largeProgressView.setPadding(0, pad, 0, pad); @@ -47,6 +49,8 @@ public class HomeTimelineHashtagsMenuController extends DropdownSubmenuControlle largeProgressView.addView(progress, new FrameLayout.LayoutParams(V.dp(48), V.dp(48), Gravity.CENTER)); largeProgressAdapter=new HideableSingleViewRecyclerAdapter(largeProgressView); mergeAdapter.addAdapter(0, largeProgressAdapter); + emptyAdapter.setVisible(false); + mergeAdapter.addAdapter(0, emptyAdapter); } @Override @@ -89,6 +93,7 @@ public class HomeTimelineHashtagsMenuController extends DropdownSubmenuControlle } items.add(new Item(R.string.manage_hashtags, false, true, i->onManageTagsClick())); itemsAdapter.notifyItemRangeInserted(prevSize, result.size()+1); + emptyAdapter.setVisible(result.isEmpty()); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineListsMenuController.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineListsMenuController.java index a17ac62a0..d8dd49ef9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineListsMenuController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/HomeTimelineListsMenuController.java @@ -5,6 +5,7 @@ import android.os.Bundle; import org.joinmastodon.android.R; import org.joinmastodon.android.fragments.ManageListsFragment; import org.joinmastodon.android.model.FollowList; +import org.joinmastodon.android.ui.utils.HideableSingleViewRecyclerAdapter; import java.util.ArrayList; import java.util.List; @@ -14,6 +15,7 @@ import me.grishka.appkit.Nav; public class HomeTimelineListsMenuController extends DropdownSubmenuController{ private final List lists; private final HomeTimelineMenuController.Callback callback; + private HideableSingleViewRecyclerAdapter emptyAdapter; public HomeTimelineListsMenuController(ToolbarDropdownMenuController dropdownController, HomeTimelineMenuController.Callback callback){ super(dropdownController); @@ -36,6 +38,15 @@ public class HomeTimelineListsMenuController extends DropdownSubmenuController{ return dropdownController.getActivity().getString(R.string.lists); } + @Override + protected void createView(){ + super.createView(); + emptyAdapter=createEmptyView(R.drawable.ic_list_alt_24px, R.string.no_lists_title, R.string.no_lists_subtitle); + if(lists.isEmpty()){ + mergeAdapter.addAdapter(0, emptyAdapter); + } + } + private void onListSelected(Item item){ callback.onListSelected(item.parentObject); dropdownController.dismiss(); diff --git a/mastodon/src/main/res/layout/popup_menu_empty.xml b/mastodon/src/main/res/layout/popup_menu_empty.xml new file mode 100644 index 000000000..4c61c5c17 --- /dev/null +++ b/mastodon/src/main/res/layout/popup_menu_empty.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 7d5104ca2..e3d844c65 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -641,6 +641,10 @@ Manage the lists %s appears on Remove from list Remove member? + Keep up with interests by following hashtags + Follows will appear here + Organize your home feed with Lists + Yours will appear here %,d post recently %,d posts recently