Add info banner to the new local timeline
This commit is contained in:
parent
fe0e854e72
commit
edb64fff2e
|
@ -43,6 +43,7 @@ import org.joinmastodon.android.model.Status;
|
||||||
import org.joinmastodon.android.model.TimelineMarkers;
|
import org.joinmastodon.android.model.TimelineMarkers;
|
||||||
import org.joinmastodon.android.ui.displayitems.GapStatusDisplayItem;
|
import org.joinmastodon.android.ui.displayitems.GapStatusDisplayItem;
|
||||||
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
|
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
|
||||||
|
import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper;
|
||||||
import org.joinmastodon.android.ui.viewcontrollers.HomeTimelineMenuController;
|
import org.joinmastodon.android.ui.viewcontrollers.HomeTimelineMenuController;
|
||||||
import org.joinmastodon.android.ui.viewcontrollers.ToolbarDropdownMenuController;
|
import org.joinmastodon.android.ui.viewcontrollers.ToolbarDropdownMenuController;
|
||||||
import org.joinmastodon.android.ui.views.FixedAspectRatioImageView;
|
import org.joinmastodon.android.ui.views.FixedAspectRatioImageView;
|
||||||
|
@ -61,6 +62,7 @@ import me.grishka.appkit.api.Callback;
|
||||||
import me.grishka.appkit.api.ErrorResponse;
|
import me.grishka.appkit.api.ErrorResponse;
|
||||||
import me.grishka.appkit.api.SimpleCallback;
|
import me.grishka.appkit.api.SimpleCallback;
|
||||||
import me.grishka.appkit.utils.CubicBezierInterpolator;
|
import me.grishka.appkit.utils.CubicBezierInterpolator;
|
||||||
|
import me.grishka.appkit.utils.MergeRecyclerAdapter;
|
||||||
import me.grishka.appkit.utils.V;
|
import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
public class HomeTimelineFragment extends StatusListFragment implements ToolbarDropdownMenuController.HostFragment{
|
public class HomeTimelineFragment extends StatusListFragment implements ToolbarDropdownMenuController.HostFragment{
|
||||||
|
@ -77,6 +79,8 @@ public class HomeTimelineFragment extends StatusListFragment implements ToolbarD
|
||||||
private List<FollowList> lists=List.of();
|
private List<FollowList> lists=List.of();
|
||||||
private ListMode listMode=ListMode.FOLLOWING;
|
private ListMode listMode=ListMode.FOLLOWING;
|
||||||
private FollowList currentList;
|
private FollowList currentList;
|
||||||
|
private MergeRecyclerAdapter mergeAdapter;
|
||||||
|
private DiscoverInfoBannerHelper localTimelineBannerHelper;
|
||||||
|
|
||||||
private String maxID;
|
private String maxID;
|
||||||
private String lastSavedMarkerID;
|
private String lastSavedMarkerID;
|
||||||
|
@ -85,6 +89,12 @@ public class HomeTimelineFragment extends StatusListFragment implements ToolbarD
|
||||||
setListLayoutId(R.layout.fragment_timeline);
|
setListLayoutId(R.layout.fragment_timeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState){
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
localTimelineBannerHelper=new DiscoverInfoBannerHelper(DiscoverInfoBannerHelper.BannerType.LOCAL_TIMELINE, accountID);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity){
|
public void onAttach(Activity activity){
|
||||||
super.onAttach(activity);
|
super.onAttach(activity);
|
||||||
|
@ -619,6 +629,25 @@ public class HomeTimelineFragment extends StatusListFragment implements ToolbarD
|
||||||
invalidateOptionsMenu();
|
invalidateOptionsMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected RecyclerView.Adapter getAdapter(){
|
||||||
|
mergeAdapter=new MergeRecyclerAdapter();
|
||||||
|
mergeAdapter.addAdapter(super.getAdapter());
|
||||||
|
return mergeAdapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDataLoaded(List<Status> d, boolean more){
|
||||||
|
if(refreshing){
|
||||||
|
if(listMode==ListMode.LOCAL){
|
||||||
|
localTimelineBannerHelper.maybeAddBanner(list, mergeAdapter);
|
||||||
|
}else{
|
||||||
|
localTimelineBannerHelper.removeBanner(mergeAdapter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.onDataLoaded(d, more);
|
||||||
|
}
|
||||||
|
|
||||||
private String getCurrentListTitle(){
|
private String getCurrentListTitle(){
|
||||||
return switch(listMode){
|
return switch(listMode){
|
||||||
case FOLLOWING -> getString(R.string.timeline_following);
|
case FOLLOWING -> getString(R.string.timeline_following);
|
||||||
|
|
|
@ -22,6 +22,8 @@ public class DiscoverInfoBannerHelper{
|
||||||
private final BannerType type;
|
private final BannerType type;
|
||||||
private final String accountID;
|
private final String accountID;
|
||||||
private static EnumSet<BannerType> bannerTypesToShow=EnumSet.noneOf(BannerType.class);
|
private static EnumSet<BannerType> bannerTypesToShow=EnumSet.noneOf(BannerType.class);
|
||||||
|
private SingleViewRecyclerAdapter bannerAdapter;
|
||||||
|
private boolean added;
|
||||||
|
|
||||||
static{
|
static{
|
||||||
for(BannerType t:BannerType.values()){
|
for(BannerType t:BannerType.values()){
|
||||||
|
@ -40,6 +42,8 @@ public class DiscoverInfoBannerHelper{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void maybeAddBanner(RecyclerView list, MergeRecyclerAdapter adapter){
|
public void maybeAddBanner(RecyclerView list, MergeRecyclerAdapter adapter){
|
||||||
|
if(added)
|
||||||
|
return;
|
||||||
if(bannerTypesToShow.contains(type)){
|
if(bannerTypesToShow.contains(type)){
|
||||||
banner=((Activity)list.getContext()).getLayoutInflater().inflate(R.layout.discover_info_banner, list, false);
|
banner=((Activity)list.getContext()).getLayoutInflater().inflate(R.layout.discover_info_banner, list, false);
|
||||||
TextView text=banner.findViewById(R.id.banner_text);
|
TextView text=banner.findViewById(R.id.banner_text);
|
||||||
|
@ -56,7 +60,8 @@ public class DiscoverInfoBannerHelper{
|
||||||
case LOCAL_TIMELINE -> R.drawable.ic_stream_24px;
|
case LOCAL_TIMELINE -> R.drawable.ic_stream_24px;
|
||||||
case ACCOUNTS -> R.drawable.ic_group_add_24px;
|
case ACCOUNTS -> R.drawable.ic_group_add_24px;
|
||||||
});
|
});
|
||||||
adapter.addAdapter(new SingleViewRecyclerAdapter(banner));
|
adapter.addAdapter(0, bannerAdapter=new SingleViewRecyclerAdapter(banner));
|
||||||
|
added=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +70,13 @@ public class DiscoverInfoBannerHelper{
|
||||||
// bannerTypesToShow is not updated here on purpose so the banner keeps showing until the app is relaunched
|
// bannerTypesToShow is not updated here on purpose so the banner keeps showing until the app is relaunched
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removeBanner(MergeRecyclerAdapter adapter){
|
||||||
|
if(bannerAdapter!=null){
|
||||||
|
adapter.removeAdapter(bannerAdapter);
|
||||||
|
added=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void reset(){
|
public static void reset(){
|
||||||
SharedPreferences prefs=getPrefs();
|
SharedPreferences prefs=getPrefs();
|
||||||
SharedPreferences.Editor e=prefs.edit();
|
SharedPreferences.Editor e=prefs.edit();
|
||||||
|
|
Loading…
Reference in New Issue