Пример #1
0
        public void SetMediaListSort(MediaListSortComparer.MediaListSortType sort, MediaListSortComparer.SortDirection direction)
        {
            _currentSort          = sort;
            _currentSortDirection = direction;

            Presenter.SetMediaListSortSettings(_type, _currentSort, _currentSortDirection);

            RecreateFragment();
        }
Пример #2
0
        public void SetCollection(MediaListCollection collection)
        {
            SetContentView(Resource.Layout.Activity_MediaLists);

            _collection = collection;

            var pagerAdapter = new FragmentlessViewPagerAdapter();

            _recyclerAdapters = new List <MediaListRecyclerAdapter>();

            var listOrder    = GetListOrder();
            var orderedLists = !listOrder.Any()
                ? _collection.Lists
                : _collection.Lists.Where(x =>
                                          listOrder.All(y => y.Key != x.Name) || listOrder.FirstOrDefault(y => y.Key == x.Name).Value)
                               .OrderBy(x => listOrder.FindIndex(y => y.Key == x.Name)).ToList();

            _currentSort          = Presenter.GetMediaListSortType(_mediaType);
            _currentSortDirection = Presenter.GetMediaListSortDirection(_mediaType);

            if (_currentSort != MediaListSortComparer.MediaListSortType.NoSort)
            {
                _collection.Lists.ForEach(list =>
                                          list.Entries.Sort(new MediaListSortComparer(_currentSort, _currentSortDirection)));
            }

            foreach (var statusList in orderedLists)
            {
                if (statusList.Entries?.Any() != true)
                {
                    continue;
                }

                var adapter = new MediaListRecyclerAdapter(this, statusList, Presenter.GetCardType(),
                                                           item => MediaListViewModel.CreateViewModel(item, _collection.User.MediaListOptions.ScoreFormat,
                                                                                                      Settings.DisplayUpcomingEpisodeTimeAsCountdown, Settings.MediaListProgressDisplay, true,
                                                                                                      Settings.ShowEpisodeAddButtonForRepeatingMedia),
                                                           Presenter.GetMediaListItemViewType(), Presenter.GetHighlightPriorityItems(),
                                                           Presenter.GetUseLongClickForEpisodeAdd());

                adapter.SetFilter(_filterModel);

                _recyclerAdapters.Add(adapter);
                var listView = LayoutInflater.Inflate(Resource.Layout.View_List, null);
                listView.FindViewById <RecyclerView>(Resource.Id.List_RecyclerView).SetAdapter(adapter);
                pagerAdapter.AddView(listView, statusList.Name);
            }

            _viewPager.Adapter = pagerAdapter;
            _tabLayout.SetupWithViewPager(_viewPager);

            SetupToolbar(_collection.User.Name);
        }
Пример #3
0
 public void SetMediaListSortSettings(MediaType mediaType, MediaListSortComparer.MediaListSortType sort,
                                      MediaListSortComparer.SortDirection direction)
 {
     if (MediaType.Anime.Equals(mediaType))
     {
         AniDroidSettings.AnimeListSortType      = sort;
         AniDroidSettings.AnimeListSortDirection = direction;
     }
     else if (MediaType.Manga.Equals(mediaType))
     {
         AniDroidSettings.MangaListSortType      = sort;
         AniDroidSettings.MangaListSortDirection = direction;
     }
 }
Пример #4
0
        private View GetMediaListCollectionView()
        {
            var mediaCollectionView = LayoutInflater.Inflate(Resource.Layout.Fragment_MediaLists, null);
            var pagerAdapter        = new FragmentlessViewPagerAdapter();

            _recyclerAdapters = new List <MediaListRecyclerAdapter>();

            var listOrder    = GetListOrder();
            var orderedLists = _collection.Lists
                               .Where(x => listOrder.FirstOrDefault(y => y.Key == x.Name).Value)
                               .OrderBy(x => listOrder.FindIndex(y => y.Key == x.Name)).ToList();

            _currentSort          = Presenter.GetMediaListSortType(_type);
            _currentSortDirection = Presenter.GetMediaListSortDirection(_type);

            if (_currentSort != MediaListSortComparer.MediaListSortType.NoSort)
            {
                _collection.Lists.ForEach(list =>
                                          list.Entries.Sort(new MediaListSortComparer(_currentSort, _currentSortDirection)));
            }

            foreach (var statusList in orderedLists)
            {
                if (statusList.Entries?.Any() != true)
                {
                    continue;
                }

                var adapter = new MediaListRecyclerAdapter(Activity, statusList, Presenter.GetCardType(),
                                                           item => MediaListViewModel.CreateViewModel(item, _collection.User.MediaListOptions.ScoreFormat,
                                                                                                      Presenter.GetDisplayTimeUntilAiringAsCountdown(), Presenter.GetProgressDisplayType(), false,
                                                                                                      Presenter.GetShowEpisodeAddButtonForRepeatingMedia()),
                                                           Presenter.GetMediaListItemViewType(), Presenter.GetHighlightPriorityItems(),
                                                           Presenter.GetUseLongClickForEpisodeAdd(),
                                                           async(viewModel, callback) =>
                {
                    if (viewModel.Model.Progress + 1 ==
                        (viewModel.Model.Media.Episodes ?? viewModel.Model.Media.Chapters))
                    {
                        EditMediaListItemDialog.Create(Activity, Presenter, viewModel.Model.Media, viewModel.Model,
                                                       _collection.User.MediaListOptions, true);
                    }
                    else
                    {
                        await Presenter.IncreaseMediaProgress(viewModel.Model);
                    }

                    callback?.Invoke();
                })
                {
                    LongClickAction = (viewModel, position) => EditMediaListItemDialog.Create(Activity, Presenter,
                                                                                              viewModel.Model.Media, viewModel.Model, _collection.User.MediaListOptions)
                };

                adapter.SetFilter(_filterModel);

                _recyclerAdapters.Add(adapter);
                var listView = LayoutInflater.Inflate(Resource.Layout.View_SwipeRefreshList, null);
                listView.FindViewById <RecyclerView>(Resource.Id.List_RecyclerView).SetAdapter(adapter);
                pagerAdapter.AddView(listView, statusList.Name);

                var swipeRefreshLayout = listView.FindViewById <SwipeRefreshLayout>(Resource.Id.List_SwipeRefreshLayout);

                if (Presenter.GetUseSwipeToRefreshOnMediaLists())
                {
                    swipeRefreshLayout.Enabled  = true;
                    swipeRefreshLayout.Refresh += (sender, e) =>
                    {
                        _collection = null;
                        RecreateFragment();
                        if (sender is SwipeRefreshLayout refreshLayout)
                        {
                            refreshLayout.Refreshing = false;
                        }
                    };
                }
                else
                {
                    swipeRefreshLayout.Enabled = false;
                }
            }

            var viewPagerView = mediaCollectionView.FindViewById <ViewPager>(Resource.Id.MediaLists_ViewPager);

            viewPagerView.Adapter = pagerAdapter;
            mediaCollectionView.FindViewById <TabLayout>(Resource.Id.MediaLists_Tabs).SetupWithViewPager(viewPagerView);

            return(mediaCollectionView);
        }
Пример #5
0
        public static void Create(BaseAniDroidActivity context,
                                  MediaListSortComparer.MediaListSortType currentSort, MediaListSortComparer.SortDirection currentDirection,
                                  Action <MediaListSortComparer.MediaListSortType, MediaListSortComparer.SortDirection> onSelectSortAction)
        {
            var view   = context.LayoutInflater.Inflate(Resource.Layout.Dialog_MediaListSort, null);
            var dialog = new AlertDialog.Builder(context, context.GetThemedResourceId(Resource.Attribute.Dialog_Theme));

            dialog.SetView(view);
            dialog.SetTitle("Sort Lists");

            var selectedSort = Resource.Id.MediaListSort_Default;

            switch (currentSort)
            {
            case MediaListSortComparer.MediaListSortType.Title:
                selectedSort = Resource.Id.MediaListSort_Title;
                break;

            case MediaListSortComparer.MediaListSortType.AverageScore:
                selectedSort = Resource.Id.MediaListSort_AverageScore;
                break;

            case MediaListSortComparer.MediaListSortType.Rating:
                selectedSort = Resource.Id.MediaListSort_Rating;
                break;

            case MediaListSortComparer.MediaListSortType.Popularity:
                selectedSort = Resource.Id.MediaListSort_Popularity;
                break;

            case MediaListSortComparer.MediaListSortType.DateReleased:
                selectedSort = Resource.Id.MediaListSort_DateReleased;
                break;

            case MediaListSortComparer.MediaListSortType.DateAdded:
                selectedSort = Resource.Id.MediaListSort_DateAdded;
                break;

            case MediaListSortComparer.MediaListSortType.Progress:
                selectedSort = Resource.Id.MediaListSort_Progress;
                break;

            case MediaListSortComparer.MediaListSortType.DateLastUpdated:
                selectedSort = Resource.Id.MediaListSort_DateLastUpdated;
                break;

            case MediaListSortComparer.MediaListSortType.Duration:
                selectedSort = Resource.Id.MediaListSort_Duration;
                break;

            case MediaListSortComparer.MediaListSortType.DateStarted:
                selectedSort = Resource.Id.MediaListSort_DateStarted;
                break;

            case MediaListSortComparer.MediaListSortType.DateCompleted:
                selectedSort = Resource.Id.MediaListSort_DateCompleted;
                break;

            case MediaListSortComparer.MediaListSortType.NextEpisodeDate:
                selectedSort = Resource.Id.MediaListSort_NextEpisodeDate;
                break;
            }

            // set current selections
            var sortRadioGroup = view.FindViewById <RadioGroup>(Resource.Id.MediaListSort_SortRadioGroup);

            sortRadioGroup.Check(selectedSort);

            var directionRadioGroup = view.FindViewById <RadioGroup>(Resource.Id.MediaListSort_DirectionRadioGroup);

            directionRadioGroup.Check(currentDirection == MediaListSortComparer.SortDirection.Ascending
                ? Resource.Id.MediaListSort_Ascending
                : Resource.Id.MediaListSort_Descending);

            dialog.SetPositiveButton("Save", (sender, args) => {
                var sort = MediaListSortComparer.MediaListSortType.NoSort;
                switch (sortRadioGroup.CheckedRadioButtonId)
                {
                case Resource.Id.MediaListSort_Title:
                    sort = MediaListSortComparer.MediaListSortType.Title;
                    break;

                case Resource.Id.MediaListSort_AverageScore:
                    sort = MediaListSortComparer.MediaListSortType.AverageScore;
                    break;

                case Resource.Id.MediaListSort_Rating:
                    sort = MediaListSortComparer.MediaListSortType.Rating;
                    break;

                case Resource.Id.MediaListSort_Progress:
                    sort = MediaListSortComparer.MediaListSortType.Progress;
                    break;

                case Resource.Id.MediaListSort_Popularity:
                    sort = MediaListSortComparer.MediaListSortType.Popularity;
                    break;

                case Resource.Id.MediaListSort_DateReleased:
                    sort = MediaListSortComparer.MediaListSortType.DateReleased;
                    break;

                case Resource.Id.MediaListSort_DateAdded:
                    sort = MediaListSortComparer.MediaListSortType.DateAdded;
                    break;

                case Resource.Id.MediaListSort_DateLastUpdated:
                    sort = MediaListSortComparer.MediaListSortType.DateLastUpdated;
                    break;

                case Resource.Id.MediaListSort_Duration:
                    sort = MediaListSortComparer.MediaListSortType.Duration;
                    break;

                case Resource.Id.MediaListSort_DateStarted:
                    sort = MediaListSortComparer.MediaListSortType.DateStarted;
                    break;

                case Resource.Id.MediaListSort_DateCompleted:
                    sort = MediaListSortComparer.MediaListSortType.DateCompleted;
                    break;

                case Resource.Id.MediaListSort_NextEpisodeDate:
                    sort = MediaListSortComparer.MediaListSortType.NextEpisodeDate;
                    break;
                }

                var direction = directionRadioGroup.CheckedRadioButtonId == Resource.Id.MediaListSort_Ascending
                    ? MediaListSortComparer.SortDirection.Ascending
                    : MediaListSortComparer.SortDirection.Descending;

                onSelectSortAction(sort, direction);
            });

            dialog.Show();
        }
 public void SetMangaListSort(MediaListSortComparer.MediaListSortType sort,
                              MediaListSortComparer.SortDirection direction)
 {
     AniDroidSettings.MangaListSortType      = sort;
     AniDroidSettings.MangaListSortDirection = direction;
 }
Пример #7
0
 public void CreateMangaListSortItem(MediaListSortComparer.MediaListSortType sort, MediaListSortComparer.SortDirection direction)
 {
     _settingsContainer.AddView(
         SettingsActivity.CreateChevronSettingRow(this, "Set Manga List Sort Type", "Set how you want to sort items on your Manga lists", (sender, args) =>
                                                  MediaListSortDialog.Create(this, sort, direction, Presenter.SetMangaListSort)));
     _settingsContainer.AddView(SettingsActivity.CreateSettingDivider(this));
 }