Example #1
0
 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)));
 }
Example #2
0
        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;
            }
        }
Example #3
0
 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();
 }
Example #7
0
 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);
     };
 }
Example #9
0
 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);
            }
        }