protected BaseRecyclerAdapter(BaseAniDroidActivity context, List <T> items, RecyclerCardType cardType) : base(context) { Items = items ?? throw new ArgumentNullException(nameof(items)); CardType = cardType; DefaultIconColor = ColorStateList.ValueOf(new Color(context.GetThemedColor(Resource.Attribute.Secondary_Dark))); FavoriteIconColor = ColorStateList.ValueOf(new Color(ContextCompat.GetColor(context, Resource.Color.Favorite_Red))); }
public MediaListRecyclerAdapter(BaseAniDroidActivity context, MediaListGroup mediaListGroup, RecyclerCardType cardType, Func <AniList.Models.MediaModels.MediaList, MediaListViewModel> createViewModelFunc, MediaListItemViewType viewType, bool highlightPriorityItems, bool useLongClickForEpisodeAdd, Action <MediaListViewModel, Action> episodeAddAction = null) : base(context, mediaListGroup.Entries.Select(createViewModelFunc).ToList(), cardType) { CreateViewModelFunc = createViewModelFunc; _isCustomList = mediaListGroup.IsCustomList; _listName = mediaListGroup.Name; _listStatus = mediaListGroup.Status; _unfilteredItems = Items; _viewType = viewType; _highlightPriorityItems = highlightPriorityItems; _priorityBackgroundColor = ColorStateList.ValueOf(new Color(Context.GetThemedColor(Resource.Attribute.ListItem_Priority))); _upToDateTitleColor = ColorStateList.ValueOf(new Color(Context.GetThemedColor(Resource.Attribute.ListItem_UpToDate))); _slightlyBehindTitleColor = ColorStateList.ValueOf(new Color(Context.GetThemedColor(Resource.Attribute.ListItem_SlightlyBehind))); _behindTitleColor = ColorStateList.ValueOf(new Color(Context.GetThemedColor(Resource.Attribute.ListItem_Behind))); _veryBehindTitleColor = ColorStateList.ValueOf(new Color(Context.GetThemedColor(Resource.Attribute.ListItem_VeryBehind))); ClickAction = (viewModel, position) => MediaActivity.StartActivity(Context, viewModel.Model.Media?.Id ?? 0, BaseAniDroidActivity.ObjectBrowseRequestCode); // leave this as the non-edit action so we can leave the presenter out LongClickAction = (viewModel, position) => Context.DisplaySnackbarMessage(viewModel.Model.Media?.Title?.UserPreferred, Snackbar.LengthLong); if (episodeAddAction != null) { if (useLongClickForEpisodeAdd) { ButtonLongClickAction = (viewModel, pos, callback) => episodeAddAction.Invoke(viewModel as MediaListViewModel, callback); ButtonClickAction = (viewModel, pos, callback) => Toast.MakeText(Context.ApplicationContext, Context.GetString(Resource.String.MediaList_LongPressEnabledAlert), ToastLength.Short).Show(); } else { ButtonClickAction = (viewModel, pos, callback) => episodeAddAction.Invoke(viewModel as MediaListViewModel, callback); } } if (_viewType != MediaListItemViewType.Normal) { CardType = RecyclerCardType.Custom; CustomCardUseItemDecoration = true; } }
public StudioEdgeRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <StudioEdge>, IAniListError> > enumerable, RecyclerCardType cardType, Func <StudioEdge, StudioEdgeViewModel> createViewModelFunc) : base(context, enumerable, cardType, createViewModelFunc) { ClickAction = (viewModel, position) => StudioActivity.StartActivity(Context, viewModel.Model?.Node?.Id ?? 0, BaseAniDroidActivity.ObjectBrowseRequestCode); }
public MediaEdgeRecyclerAdapter(BaseAniDroidActivity context, List <MediaEdgeViewModel> items, RecyclerCardType cardType) : base(context, items, cardType) { SetDefaultClickActions(); }
public MediaEdgeRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <MediaEdge>, IAniListError> > enumerable, RecyclerCardType cardType, Func <MediaEdge, MediaEdgeViewModel> createViewModelFunc) : base(context, enumerable, cardType, createViewModelFunc) { SetDefaultClickActions(); }
protected LazyLoadingRecyclerViewAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <T>, IAniListError> > enumerable, RecyclerCardType cardType) : base(context, new List <T> { null }, cardType) { _asyncEnumerable = enumerable; _asyncEnumerator = enumerable.GetAsyncEnumerator(); }
public MediaListRecyclerAdapter(BaseAniDroidActivity context, RecyclerCardType cardType, IAsyncEnumerable <OneOf <IPagedData <AniList.Models.MediaModels.MediaList>, IAniListError> > enumerable, Func <AniList.Models.MediaModels.MediaList, MediaListViewModel> createViewModelFunc) : base(context, enumerable, cardType, createViewModelFunc) { }
public ReviewRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <Review>, IAniListError> > enumerable, RecyclerCardType cardType, Func <Review, ReviewViewModel> createViewModelFunc) : base(context, enumerable, cardType, createViewModelFunc) { ClickAction = (viewModel, position) => { Toast.MakeText(Application.Context, "In-app review viewing coming Soon™", ToastLength.Short).Show(); var intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse($"https://anilist.co/review/{viewModel.Model.Id}")); Context.StartActivity(intent); }; }
public CharacterRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <Character>, IAniListError> > enumerable, RecyclerCardType cardType, Func <Character, CharacterViewModel> createViewModelFunc) : base(context, enumerable, cardType, createViewModelFunc) { ClickAction = (viewModel, position) => CharacterActivity.StartActivity(Context, viewModel.Model.Id, BaseAniDroidActivity.ObjectBrowseRequestCode); }
public RecommendationEdgeRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <ConnectionEdge <Recommendation> >, IAniListError> > enumerable, RecyclerCardType cardType, Func <ConnectionEdge <Recommendation>, RecommendationEdgeViewModel> createViewModelFunc) : base(context, enumerable, cardType, createViewModelFunc) { SetDefaultClickActions(); ValidateItemFunc = rec => rec.Node?.MediaRecommendation != null; }
protected AniDroidRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <TModel>, IAniListError> > enumerable, RecyclerCardType cardType, Func <TModel, T> createViewModelFunc) : this(context, new List <T> { null }, cardType) { CreateViewModelFunc = createViewModelFunc; _asyncEnumerable = enumerable; _asyncEnumerator = enumerable.GetAsyncEnumerator(); }
protected void BindViewHolderByType(RecyclerView.ViewHolder holder, int position, RecyclerCardType type) { if (type == RecyclerCardType.Custom) { BindCustomViewHolder(holder, position); } else if (holder is CardItem cardHolder) { var viewModel = Items[position]; cardHolder.Name.Visibility = viewModel.TitleVisibility; cardHolder.DetailPrimary.Visibility = viewModel.DetailPrimaryVisibility; cardHolder.DetailSecondary.Visibility = viewModel.DetailSecondaryVisibility; cardHolder.Image.Visibility = viewModel.ImageVisibility; cardHolder.Button.Visibility = viewModel.ButtonVisibility; cardHolder.ButtonIcon.SetImageResource(viewModel.ButtonIcon ?? Resource.Drawable.ic_favorite_white_24px); cardHolder.Name.Text = viewModel.TitleText ?? ""; cardHolder.DetailPrimary.Text = viewModel.DetailPrimaryText ?? ""; cardHolder.DetailSecondary.Text = viewModel.DetailSecondaryText ?? ""; if (viewModel.LoadImage) { ImageLoader.LoadImage(cardHolder.Image, viewModel.ImageUri ?? ""); } cardHolder.ContainerCard.SetTag(Resource.Id.Object_Position, position); cardHolder.Button.SetTag(Resource.Id.Object_Position, position); BindCardViewHolder(cardHolder, position); } }