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 MediaEdgeRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <MediaEdge>, IAniListError> > enumerable, RecyclerCardType cardType, Func <MediaEdge, MediaEdgeViewModel> createViewModelFunc) : base(context, enumerable, cardType, createViewModelFunc) { SetDefaultClickActions(); }
public static View CreateChevronSettingRow(BaseAniDroidActivity context, string name, string description, EventHandler tapEvent) { var view = context.LayoutInflater.Inflate(Resource.Layout.View_SettingItem_Chevron, null); var nameView = view.FindViewById <TextView>(Resource.Id.SettingItem_Name); var textTwoView = view.FindViewById <TextView>(Resource.Id.SettingItem_Details); if (!string.IsNullOrWhiteSpace(name)) { nameView.Text = name; } else { nameView.Visibility = ViewStates.Gone; } if (!string.IsNullOrWhiteSpace(description)) { textTwoView.Text = description; } else { textTwoView.Visibility = ViewStates.Gone; } view.Id = (int)DateTime.Now.Ticks; view.Click += tapEvent; return(view); }
public static void Create(BaseAniDroidActivity context, MediaTitle title, ICollection <string> alternateNames) { var dialogView = context.LayoutInflater.Inflate(Resource.Layout.Dialog_MediaTitles, null); if (!string.IsNullOrWhiteSpace(title.Romaji)) { dialogView.FindViewById(Resource.Id.MediaTitles_RomajiContainer).Visibility = ViewStates.Visible; dialogView.FindViewById <TextView>(Resource.Id.MediaTitles_Romaji).Text = title.Romaji; } if (!string.IsNullOrWhiteSpace(title.English)) { dialogView.FindViewById(Resource.Id.MediaTitles_EnglishContainer).Visibility = ViewStates.Visible; dialogView.FindViewById <TextView>(Resource.Id.MediaTitles_English).Text = title.English; } if (!string.IsNullOrWhiteSpace(title.Native)) { dialogView.FindViewById(Resource.Id.MediaTitles_NativeContainer).Visibility = ViewStates.Visible; dialogView.FindViewById <TextView>(Resource.Id.MediaTitles_Native).Text = title.Native; } if (alternateNames?.Any() == true) { dialogView.FindViewById(Resource.Id.MediaTitles_AlsoKnownAsContainer).Visibility = ViewStates.Visible; dialogView.FindViewById <TextView>(Resource.Id.MediaTitles_AlsoKnownAs).Text = string.Join("\n", alternateNames); } var dialog = new AlertDialog.Builder(context, context.GetThemedResourceId(Resource.Attribute.Dialog_Theme)); dialog.SetView(dialogView); dialog.Show(); }
public static void Create(BaseAniDroidActivity context, Action <string, string> searchAction, string searchType = "", string searchTerm = null) { var dialogue = context.LayoutInflater.Inflate(Resource.Layout.Dialog_Search, null); var searchTypeView = dialogue.FindViewById <Spinner>(Resource.Id.Search_Type); var searchTermView = dialogue.FindViewById <EditText>(Resource.Id.Search_Text); searchTypeView.Adapter = new ArrayAdapter <string>(context, Resource.Layout.View_SpinnerDropDownItem, SearchResultsActivity.AniListSearchTypes.AllTypes); searchTermView.Text = searchTerm; if (SearchResultsActivity.AniListSearchTypes.AllTypes.Contains(searchType)) { searchTypeView.SetSelection(Array.FindIndex(SearchResultsActivity.AniListSearchTypes.AllTypes, x => x == searchType)); } var a = new AlertDialog.Builder(context, context.GetThemedResourceId(Resource.Attribute.Dialog_Theme)).Create(); a.SetView(dialogue); a.SetTitle("Search AniList"); a.SetButton((int)DialogButtonType.Neutral, "Cancel", (aS, eV) => a.Dismiss()); a.SetButton((int)DialogButtonType.Positive, "Search", (aS, ev) => searchAction((string)searchTypeView.Adapter.GetItem(searchTypeView.SelectedItemPosition), searchTermView.Text)); searchTermView.EditorAction += (tS, tE) => { if (tE.ActionId == Android.Views.InputMethods.ImeAction.Search) { searchAction((string)searchTypeView.Adapter.GetItem(searchTypeView.SelectedItemPosition), searchTermView.Text); } }; a.Show(); }
public static View CreateCheckboxSettingRow(BaseAniDroidActivity context, string name, string description, bool isChecked, EventHandler <CompoundButton.CheckedChangeEventArgs> checkEvent) { var view = context.LayoutInflater.Inflate(Resource.Layout.View_SettingItem_Checkbox, null); var nameView = view.FindViewById <TextView>(Resource.Id.SettingItem_Name); var textTwoView = view.FindViewById <TextView>(Resource.Id.SettingItem_Details); if (!string.IsNullOrWhiteSpace(name)) { nameView.Text = name; } else { nameView.Visibility = ViewStates.Gone; textTwoView.SetTextColor(new Color(context.GetThemedColor(Resource.Attribute.Background_Text))); } if (!string.IsNullOrWhiteSpace(description)) { textTwoView.Text = description; } else { textTwoView.Visibility = ViewStates.Gone; } var checkboxView = view.FindViewById <AppCompatCheckBox>(Resource.Id.SettingItem_Checkbox); checkboxView.Id = (int)DateTime.Now.Ticks; checkboxView.Checked = isChecked; checkboxView.CheckedChange += checkEvent; return(view); }
public NyaaSiSearchRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <NyaaSiSearchResult>, IAniListError> > enumerable) : base(context, enumerable, RecyclerCardType.Custom) { InitializeColors(); CustomCardUseItemDecoration = true; }
protected LazyLoadingRecyclerViewAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <T>, IAniListError> > enumerable, RecyclerCardType cardType) : base(context, new List <T> { null }, cardType) { _asyncEnumerable = enumerable; _asyncEnumerator = enumerable.GetAsyncEnumerator(); }
private static void PopulateLikesContainer(BaseAniDroidActivity context, AniListActivity activity, ViewGroup container) { var imageSize = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 40, context.Resources.DisplayMetrics); var padding = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 2, context.Resources.DisplayMetrics); var layoutParams = new ViewGroup.LayoutParams(imageSize, imageSize); var profileImages = activity.Likes.Select(x => { var image = new ImageView(context) { LayoutParameters = layoutParams }; image.SetPadding(padding, padding, padding, padding); ImageLoader.LoadImage(image, x.Avatar.Large); image.Click += (lSend, lArgs) => { UserActivity.StartActivity(context, x.Id); }; image.LongClick += (lSend, lArgs) => { Toast.MakeText(context, x.Name, ToastLength.Short).Show(); }; return(image); }).ToList(); container.Visibility = activity.Likes.Any() ? ViewStates.Visible : ViewStates.Gone; profileImages.ForEach(container.AddView); }
public static void CreateNewActivity(BaseAniDroidActivity context, Func <string, Task> saveAction) { var dialog = new AlertDialog.Builder(context, context.GetThemedResourceId(Resource.Attribute.Dialog_Theme)).Create(); var dialogView = context.LayoutInflater.Inflate(Resource.Layout.Dialog_AniListActivityCreate, null); dialog.SetView(dialogView); dialog.SetButton((int)DialogButtonType.Negative, "Cancel", (send, args) => dialog.Dismiss()); dialog.SetButton((int)DialogButtonType.Positive, "Post", (send, args) => { }); dialog.ShowEvent += (sender2, e2) => { var activityText = dialogView.FindViewById <EditText>(Resource.Id.AniListActivityCreate_Text); var createButton = dialog.GetButton((int)DialogButtonType.Positive); createButton.SetOnClickListener(new InterceptClickListener(async() => { if (string.IsNullOrWhiteSpace(activityText.Text)) { Toast.MakeText(context, "Text can't be empty!", ToastLength.Short).Show(); return; } await saveAction(activityText.Text); dialog.Dismiss(); })); }; dialog.Show(); }
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 static void StartActivity(BaseAniDroidActivity context, int userId, MediaType mediaType) { var intent = new Intent(context, typeof(MediaListActivity)); intent.PutExtra(UserIdIntentKey, userId); intent.PutExtra(MediaTypeIntentKey, mediaType.Value); context.StartActivity(intent); }
public StudioRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <Studio>, IAniListError> > enumerable, Func <Studio, StudioViewModel> createViewModelFunc) : base(context, enumerable, RecyclerCardType.Horizontal, createViewModelFunc) { ClickAction = (viewModel, position) => StudioActivity.StartActivity(Context, viewModel.Model.Id); }
private void BindListActivityViewHolder(AniListActivityViewHolder viewHolder, AniListActivity item) { viewHolder.Title.TextFormatted = BaseAniDroidActivity.FromHtml($"<b><font color='{_userNameColorHex}'>{item.User?.Name}</font></b> {item.Status} {(!string.IsNullOrWhiteSpace(item.Progress) ? $"{item.Progress} of" : "")} <b><font color='{_actionColorHex}'>{item.Media?.Title?.UserPreferred}</font></b>"); viewHolder.ContentText.Visibility = ViewStates.Gone; viewHolder.ContentImageContainer.Visibility = ViewStates.Visible; viewHolder.ContentImageContainer.RemoveAllViews(); ImageLoader.LoadImage(viewHolder.Image, item.Media?.CoverImage?.Large); }
public static ISpanned ConvertToSpanned(string text) { var pipeline = new MarkdownPipelineBuilder().UseEmphasisExtras().UseEmojiAndSmiley().UseListExtras().Build(); var cleanedText = FormatMarkdownText(text); var parsedText = Markdig.Markdown.ToHtml(cleanedText, pipeline); return(BaseAniDroidActivity.FromHtml(parsedText)); }
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 MediaListFilterDialogFragment(BaseAniDroidActivity context, IMediaListView mediaListView, MediaType type, IList <string> genres, IList <MediaTag> tags) { _context = context; _mediaListView = mediaListView; _mediaListFilterModel = mediaListView.GetMediaListFilter(); _type = type; _genres = genres; _tags = tags; }
public AniListNotificationRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <AniListNotification>, IAniListError> > enumerable, int unreadCount, Func <AniListNotification, AniListNotificationViewModel> createViewModelFunc) : base(context, enumerable, RecyclerCardType.Custom, createViewModelFunc) { _unreadCount = unreadCount; CustomCardUseItemDecoration = true; ClickAction = (viewModel, position) => (viewModel as AniListNotificationViewModel)?.ClickAction?.Invoke(); }
public AniListNotificationViewModel(AniListNotification model, BaseAniDroidActivity context, Color accentColor) : base(model) { _context = context; FormattedTitle = BaseAniDroidActivity.FromHtml(Model.GetNotificationHtml($"#{accentColor & 0xffffff:X6}")); Timestamp = Model.GetAgeString(model.CreatedAt); ImageUri = Model.GetImageUri(); ClickAction = GetNotificationClickAction(); }
public AniListActivityRecyclerAdapter(BaseAniDroidActivity context, AniListActivityRecyclerAdapter adapter) : base(context, adapter) { _presenter = adapter._presenter; _userId = adapter._userId; _userNameColorHex = $"#{Context.GetThemedColor(Resource.Attribute.Primary) & 0xffffff:X6}"; _actionColorHex = $"#{Context.GetThemedColor(Resource.Attribute.Primary_Dark) & 0xffffff:X6}"; _defaultIconColor = new Color(context.GetThemedColor(Resource.Attribute.Secondary_Dark)); CustomCardUseItemDecoration = adapter.CustomCardUseItemDecoration; }
public AniListActivityRecyclerAdapter(BaseAniDroidActivity context, IAniListActivityPresenter presenter, IAsyncEnumerable <OneOf <IPagedData <AniListActivity>, IAniListError> > enumerable, int?currentUserId) : base(context, enumerable, RecyclerCardType.Custom) { _presenter = presenter; _userId = currentUserId; _userNameColorHex = $"#{Context.GetThemedColor(Resource.Attribute.Primary) & 0xffffff:X6}"; _actionColorHex = $"#{Context.GetThemedColor(Resource.Attribute.Primary_Dark) & 0xffffff:X6}"; _defaultIconColor = new Color(context.GetThemedColor(Resource.Attribute.Secondary_Dark)); CustomCardUseItemDecoration = true; }
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(); }
public static void Create(BaseAniDroidActivity context, IAniListMediaListEditPresenter presenter, Media media, AniList.Models.MediaModels.MediaList mediaList, UserMediaListOptions mediaListOptions, bool completeMedia = false) { var dialog = new EditMediaListItemDialogFragment(presenter, media, mediaList, mediaListOptions, completeMedia) { Cancelable = true }; var transaction = context.SupportFragmentManager.BeginTransaction(); transaction.SetTransition((int)FragmentTransit.FragmentOpen); transaction.Add(Android.Resource.Id.Content, dialog).AddToBackStack(EditMediaListItemDialogFragment.BackstackTag).Commit(); }
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); }; }
private static void CreateEditReply(BaseAniDroidActivity context, string oldText, Func <string, Task> saveAction, Func <Task> deleteAction) { var dialog = new AlertDialog.Builder(context, context.GetThemedResourceId(Resource.Attribute.Dialog_Theme)).Create(); var dialogView = context.LayoutInflater.Inflate(Resource.Layout.Dialog_AniListActivityCreate, null); var replyText = dialogView.FindViewById <EditText>(Resource.Id.AniListActivityCreate_Text); var replyTextLayout = dialogView.FindViewById <TextInputLayout>(Resource.Id.AniListActivityCreate_TextLayout); replyTextLayout.Hint = "Reply Text"; replyText.Text = oldText; dialog.SetView(dialogView); dialog.SetButton((int)DialogButtonType.Negative, "Cancel", (send, args) => dialog.Dismiss()); dialog.SetButton((int)DialogButtonType.Positive, "Save", (send, args) => { }); dialog.SetButton((int)DialogButtonType.Neutral, "Delete", (send, args) => { var confirmationDialog = new AlertDialog.Builder(context, context.GetThemedResourceId(Resource.Attribute.Dialog_Theme)).Create(); confirmationDialog.SetTitle("Delete Reply"); confirmationDialog.SetMessage("Are you sure you wish to delete this reply?"); confirmationDialog.SetButton((int)DialogButtonType.Negative, "Cancel", (cSend, cArgs) => confirmationDialog.Dismiss()); confirmationDialog.SetButton((int)DialogButtonType.Positive, "Delete", (cSend, cArgs) => { confirmationDialog.Dismiss(); dialog.Dismiss(); deleteAction?.Invoke(); }); confirmationDialog.Show(); }); dialog.ShowEvent += (sender2, e2) => { var createButton = dialog.GetButton((int)DialogButtonType.Positive); createButton.SetOnClickListener(new InterceptClickListener(async() => { if (string.IsNullOrWhiteSpace(replyText.Text)) { Toast.MakeText(context, "Text can't be empty!", ToastLength.Short).Show(); return; } await saveAction(replyText.Text); dialog.Dismiss(); })); }; dialog.Show(); }
public ForumThreadRecyclerAdapter(BaseAniDroidActivity context, IAsyncEnumerable <OneOf <IPagedData <ForumThread>, IAniListError> > enumerable, Func <ForumThread, ForumThreadViewModel> createViewModelFunc) : base(context, enumerable, RecyclerCardType.Horizontal, createViewModelFunc) { ClickAction = (viewModel, position) => { var intent = new Intent(Intent.ActionView); intent.SetData(Android.Net.Uri.Parse(viewModel.Model.SiteUrl)); Context.StartActivity(intent); }; }
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 static void Create(BaseAniDroidActivity context, IBrowsePresenter presenter) { var dialog = new BrowseFilterDialogFragment(context, presenter) { Cancelable = true }; var transaction = context.SupportFragmentManager.BeginTransaction(); transaction.SetTransition((int)FragmentTransit.FragmentOpen); transaction.Add(Android.Resource.Id.Content, dialog) .AddToBackStack(BrowseFilterDialogFragment.BackstackTag).Commit(); }
public static void Create(BaseAniDroidActivity context) { var textView = new TextView(context) { Text = "", LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent) }; textView.SetPadding(15, 5, 15, 5); var whatsNewVals = context.Resources.GetStringArray(Resource.Array.Application_WhatsNew); var whatsNewSplitVals = whatsNewVals .Select(x => new { Date = DateTime.TryParseExact(x.Split('|')[0], "MM-dd-yyyy", null, System.Globalization.DateTimeStyles.None, out var parsedDate) ? parsedDate : DateTime.Now, Val = x.Split('|')[1] })
public static void Create(BaseAniDroidActivity context, IMediaListView view, MediaType type, IList <string> genres, IList <MediaTag> tags) { var dialog = new MediaListFilterDialogFragment(context, view, type, genres, tags) { Cancelable = true }; var transaction = context.SupportFragmentManager.BeginTransaction(); transaction.SetTransition((int)FragmentTransit.FragmentOpen); transaction.Add(Android.Resource.Id.Content, dialog) .AddToBackStack(MediaListFilterDialogFragment.BackstackTag).Commit(); }