Add favorite subreddits to the navigation drawer. Add favorite and subscriptions header to the navigation drawer.

This commit is contained in:
Alex Ning 2020-09-24 22:27:05 +08:00
parent 0c251c972c
commit 73c4ead2c0
5 changed files with 96 additions and 20 deletions

View File

@ -678,13 +678,12 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
sectionsPagerAdapter.setSubscribedSubreddits(subscribedSubredditData);
}
});
if (mShowFavoriteSubscribedSubreddits) {
subscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(this, subscribedSubredditData -> {
if (sectionsPagerAdapter != null) {
sectionsPagerAdapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
}
});
}
subscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(this, subscribedSubredditData -> {
adapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
if (mShowFavoriteSubscribedSubreddits && sectionsPagerAdapter != null) {
sectionsPagerAdapter.setFavoriteSubscribedSubreddits(subscribedSubredditData);
}
});
accountViewModel = new ViewModelProvider(this,
new AccountViewModel.Factory(getApplication(), mRedditDataRoomDatabase, mAccountName)).get(AccountViewModel.class);

View File

@ -50,8 +50,9 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
private static final int VIEW_TYPE_MENU_GROUP_TITLE = 1;
private static final int VIEW_TYPE_MENU_ITEM = 2;
private static final int VIEW_TYPE_DIVIDER = 3;
private static final int VIEW_TYPE_SUBSCRIBED_SUBREDDIT = 4;
private static final int VIEW_TYPE_ACCOUNT = 5;
private static final int VIEW_TYPE_FAVORITE_SUBSCRIBED_SUBREDDIT = 4;
private static final int VIEW_TYPE_SUBSCRIBED_SUBREDDIT = 5;
private static final int VIEW_TYPE_ACCOUNT = 6;
private static final int CURRENT_MENU_ITEMS = 17;
private AppCompatActivity appCompatActivity;
@ -66,6 +67,7 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
private ItemClickListener itemClickListener;
private boolean isLoggedIn;
private boolean isInMainPage = true;
private ArrayList<SubscribedSubredditData> favoriteSubscribedSubreddits;
private ArrayList<SubscribedSubredditData> subscribedSubreddits;
private ArrayList<Account> accounts;
private int primaryTextColor;
@ -94,14 +96,24 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
secondaryTextColor = customThemeWrapper.getSecondaryTextColor();
dividerColor = customThemeWrapper.getDividerColor();
primaryIconColor = customThemeWrapper.getPrimaryIconColor();
favoriteSubscribedSubreddits = new ArrayList<>();
subscribedSubreddits = new ArrayList<>();
}
@Override
public int getItemViewType(int position) {
if (isInMainPage) {
if (isLoggedIn) {
if (position >= CURRENT_MENU_ITEMS) {
return VIEW_TYPE_SUBSCRIBED_SUBREDDIT;
if (position == CURRENT_MENU_ITEMS) {
return VIEW_TYPE_MENU_GROUP_TITLE;
} else if (!favoriteSubscribedSubreddits.isEmpty() && position == CURRENT_MENU_ITEMS + favoriteSubscribedSubreddits.size() + 1) {
return VIEW_TYPE_MENU_GROUP_TITLE;
} else if (position > CURRENT_MENU_ITEMS) {
if (!favoriteSubscribedSubreddits.isEmpty() && position <= CURRENT_MENU_ITEMS + favoriteSubscribedSubreddits.size()) {
return VIEW_TYPE_FAVORITE_SUBSCRIBED_SUBREDDIT;
} else {
return VIEW_TYPE_SUBSCRIBED_SUBREDDIT;
}
} else if (position == 0) {
return VIEW_TYPE_NAV_HEADER;
} else if (position == 1 || position == 6 || position == 12) {
@ -153,6 +165,9 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
case VIEW_TYPE_ACCOUNT:
return new AccountViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_nav_drawer_account, parent, false));
case VIEW_TYPE_FAVORITE_SUBSCRIBED_SUBREDDIT:
return new FavoriteSubscribedThingViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_nav_drawer_subscribed_thing, parent, false));
default:
return new SubscribedThingViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_nav_drawer_subscribed_thing, parent, false));
@ -234,6 +249,12 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
((MenuGroupTitleViewHolder) holder).titleTextView.setText(R.string.label_post);
} else if (position == 12) {
((MenuGroupTitleViewHolder) holder).titleTextView.setText(R.string.label_preferences);
} else {
if (!favoriteSubscribedSubreddits.isEmpty() && position == CURRENT_MENU_ITEMS) {
((MenuGroupTitleViewHolder) holder).titleTextView.setText(R.string.favorites);
} else {
((MenuGroupTitleViewHolder) holder).titleTextView.setText(R.string.subscriptions);
}
}
} else if (holder instanceof MenuItemViewHolder) {
int stringId = 0;
@ -383,8 +404,29 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
((MenuItemViewHolder) holder).itemView.setOnClickListener(view -> itemClickListener.onMenuClick(finalStringId));
}
}
} else if (holder instanceof FavoriteSubscribedThingViewHolder) {
SubscribedSubredditData subreddit = favoriteSubscribedSubreddits.get(position - CURRENT_MENU_ITEMS - 1);
String subredditName = subreddit.getName();
String iconUrl = subreddit.getIconUrl();
((FavoriteSubscribedThingViewHolder) holder).subredditNameTextView.setText(subredditName);
if (iconUrl != null && !iconUrl.equals("")) {
glide.load(iconUrl)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(glide.load(R.drawable.subreddit_default_icon)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
.into(((FavoriteSubscribedThingViewHolder) holder).iconGifImageView);
} else {
glide.load(R.drawable.subreddit_default_icon)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.into(((FavoriteSubscribedThingViewHolder) holder).iconGifImageView);
}
((FavoriteSubscribedThingViewHolder) holder).itemView.setOnClickListener(view -> {
itemClickListener.onSubscribedSubredditClick(subredditName);
});
} else if (holder instanceof SubscribedThingViewHolder) {
SubscribedSubredditData subreddit = subscribedSubreddits.get(position - CURRENT_MENU_ITEMS);
SubscribedSubredditData subreddit = favoriteSubscribedSubreddits.isEmpty() ? subscribedSubreddits.get(position - CURRENT_MENU_ITEMS - 1)
: subscribedSubreddits.get(position - CURRENT_MENU_ITEMS - favoriteSubscribedSubreddits.size() - 2);
String subredditName = subreddit.getName();
String iconUrl = subreddit.getIconUrl();
((SubscribedThingViewHolder) holder).subredditNameTextView.setText(subredditName);
@ -418,11 +460,8 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
if (!(checkIsInMainPage && isInMainPage)) {
notifyItemRangeRemoved(1, getItemCount() - 1);
if (isLoggedIn) {
if (subscribedSubreddits != null) {
notifyItemRangeInserted(1, subscribedSubreddits.size() + CURRENT_MENU_ITEMS - 1);
} else {
notifyItemRangeInserted(1, CURRENT_MENU_ITEMS - 1);
}
notifyItemRangeInserted(1, (favoriteSubscribedSubreddits.isEmpty() ? 0 : favoriteSubscribedSubreddits.size() + 1)
+ (subscribedSubreddits.isEmpty() ? 0 : subscribedSubreddits.size() + 1) + CURRENT_MENU_ITEMS - 1);
} else {
notifyItemRangeInserted(1, 2);
}
@ -453,8 +492,9 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
public int getItemCount() {
if (isInMainPage) {
if (isLoggedIn) {
if (subscribedSubreddits != null) {
return CURRENT_MENU_ITEMS + subscribedSubreddits.size();
if (!(favoriteSubscribedSubreddits.isEmpty() && subscribedSubreddits.isEmpty())) {
return CURRENT_MENU_ITEMS + (favoriteSubscribedSubreddits.isEmpty() ? 0 : favoriteSubscribedSubreddits.size() + 1)
+ (subscribedSubreddits.isEmpty() ? 0 : subscribedSubreddits.size() + 1);
}
return CURRENT_MENU_ITEMS - 1;
} else {
@ -485,6 +525,13 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
}
}
public void setFavoriteSubscribedSubreddits(List<SubscribedSubredditData> favoriteSubscribedSubreddits) {
this.favoriteSubscribedSubreddits = (ArrayList<SubscribedSubredditData>) favoriteSubscribedSubreddits;
if (isInMainPage) {
notifyDataSetChanged();
}
}
public void setSubscribedSubreddits(List<SubscribedSubredditData> subscribedSubreddits) {
this.subscribedSubreddits = (ArrayList<SubscribedSubredditData>) subscribedSubreddits;
if (isInMainPage) {
@ -564,6 +611,19 @@ public class NavigationDrawerRecyclerViewAdapter extends RecyclerView.Adapter<Re
}
}
class FavoriteSubscribedThingViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.thing_icon_gif_image_view_item_nav_drawer_subscribed_thing)
GifImageView iconGifImageView;
@BindView(R.id.thing_name_text_view_item_nav_drawer_subscribed_thing)
TextView subredditNameTextView;
FavoriteSubscribedThingViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
subredditNameTextView.setTextColor(primaryTextColor);
}
}
class SubscribedThingViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.thing_icon_gif_image_view_item_nav_drawer_subscribed_thing)
GifImageView iconGifImageView;

View File

@ -99,6 +99,8 @@ public class CustomizeMainPageTabsFragment extends Fragment {
View divider4;
@BindView(R.id.more_tabs_group_summary_customize_main_page_tabs_fragment)
TextView moreTabsGroupSummaryTextView;
@BindView(R.id.more_tabs_info_text_view_customize_main_page_tabs_fragment)
TextView moreTabsInfoTextView;
@BindView(R.id.show_subscribed_subreddits_linear_layout_customize_main_page_tabs_fragment)
LinearLayout showSubscribedSubredditsLinearLayout;
@BindView(R.id.show_subscribed_subreddits_switch_material_customize_main_page_tabs_fragment)
@ -156,6 +158,7 @@ public class CustomizeMainPageTabsFragment extends Fragment {
tab3TypeLinearLayout.setVisibility(View.GONE);
divider4.setVisibility(View.GONE);
moreTabsGroupSummaryTextView.setVisibility(View.GONE);
moreTabsInfoTextView.setVisibility(View.GONE);
showSubscribedSubredditsLinearLayout.setVisibility(View.GONE);
showFavoriteSubscribedSubredditsLinearLayout.setVisibility(View.GONE);

View File

@ -447,6 +447,19 @@
android:textSize="?attr/font_default"
android:fontFamily="?attr/font_family" />
<TextView
android:id="@+id/more_tabs_info_text_view_customize_main_page_tabs_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:drawablePadding="32dp"
android:text="@string/settings_more_tabs_info_summary"
android:textColor="@color/settingsSubtitleColor"
android:gravity="center_vertical"
android:textSize="?attr/font_default"
android:fontFamily="?attr/font_family"
app:drawableStartCompat="@drawable/ic_info_preference_24dp" />
<LinearLayout
android:id="@+id/show_favorite_subscribed_subreddits_linear_layout_customize_main_page_tabs_fragment"
android:layout_width="match_parent"

View File

@ -341,7 +341,7 @@
<string name="settings_start_autoplay_visible_area_offset_landscape_title">Autoplay Videos Visible Area Offset (Landscape)</string>
<string name="settings_start_autoplay_visible_area_offset_landscape_summary">Start autoplaying videos when %1$d%% of them are visible</string>
<string name="settings_immersive_interface_title">Immersive Interface</string>
<string name="settings_immersive_interface_summary">Does Not Apply to All Pages\nMay Not Work On Android 11</string>
<string name="settings_immersive_interface_summary">Does Not Apply to All Pages</string>
<string name="settings_immersive_interface_ignore_nav_bar_title">Ignore Navigation Bar in Immersive Interface</string>
<string name="settings_immersive_interface_ignore_nav_bar_summary">Prevent the Bottom Navigation Bar Having Extra Padding</string>
<string name="settings_customize_tabs_in_main_page_title">Customize Tabs in Main Page</string>
@ -453,6 +453,7 @@
<string name="settings_tab_2_summary">Tab 2</string>
<string name="settings_tab_3_summary">Tab 3</string>
<string name="settings_more_tabs_summary">More Tabs</string>
<string name="settings_more_tabs_info_summary">Enabling the following options will cause an unintended behaviour:\nTabs may lose all the content after switching to others. This is the same as refreshing the page.</string>
<string name="settings_more_tabs_show_favorite_subscribed_subreddits_title">Show Favorite Subscribed Subreddits</string>
<string name="settings_more_tabs_show_subscribed_subreddits_title">Show Subscribed Subreddits</string>
<string name="settings_tab_title">Title</string>