diff --git a/RBLNews.Maui/Platforms/Android/MainActivity.cs b/RBLNews.Maui/Platforms/Android/MainActivity.cs index f2c46cb..ecdc573 100644 --- a/RBLNews.Maui/Platforms/Android/MainActivity.cs +++ b/RBLNews.Maui/Platforms/Android/MainActivity.cs @@ -1,11 +1,39 @@ using Android.App; +using Android.Content; using Android.Content.PM; using Android.OS; +using Android.Views; +using Android.Views.InputMethods; +using Android.Widget; namespace RBLNews.Maui { [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] public class MainActivity : MauiAppCompatActivity { + public override bool DispatchTouchEvent(MotionEvent? e) + { + if (e!.Action == MotionEventActions.Down) + { + var focusedElement = CurrentFocus; + if (focusedElement is EditText editText) + { + var editTextLocation = new int[2]; + editText.GetLocationOnScreen(editTextLocation); + var clearTextButtonWidth = 100; + var editTextRect = new Rect(editTextLocation[0], editTextLocation[1], editText.Width + clearTextButtonWidth, editText.Height); + + var touchPosX = (int)e.RawX; + var touchPosY = (int)e.RawY; + if (!editTextRect.Contains(touchPosX, touchPosY)) + { + editText.ClearFocus(); + var inputService = GetSystemService(Context.InputMethodService) as InputMethodManager; + inputService?.HideSoftInputFromWindow(editText.WindowToken, 0); + } + } + } + return base.DispatchTouchEvent(e); + } } } diff --git a/RBLNews.Maui/wwwroot/index.html b/RBLNews.Maui/wwwroot/index.html index c75fc64..9e40dab 100644 --- a/RBLNews.Maui/wwwroot/index.html +++ b/RBLNews.Maui/wwwroot/index.html @@ -10,9 +10,9 @@ - + + - diff --git a/RBLNews.Shared/Components/Controls/BadgeWithCounter.razor b/RBLNews.Shared/Components/Controls/BadgeWithCounter.razor index 85da339..80965ce 100644 --- a/RBLNews.Shared/Components/Controls/BadgeWithCounter.razor +++ b/RBLNews.Shared/Components/Controls/BadgeWithCounter.razor @@ -1,12 +1,13 @@ @using RBLFeederCommon.Enums -@if (ShowCount) -{ - -} -else -{ - -} + + @code { @@ -14,7 +15,7 @@ else public RssFeedSources Source { get; set; } [Parameter] - public string Text { get; set; } + public string Text { get; set; } = ""; [Parameter] public bool ShowCount { get; set; } @@ -25,14 +26,15 @@ else [Parameter] public EventCallback OnClickedCallback { get; set; } - protected override void OnInitialized() - { - base.OnInitialized(); - } + bool outline = true; - private async Task OnClicked() + Task OnClicked() { - await OnClickedCallback.InvokeAsync(Source); + outline = !outline; + + OnClickedCallback.InvokeAsync(Source); + + return Task.CompletedTask; } } diff --git a/RBLNews.Shared/Components/Layout/NavMenu.razor b/RBLNews.Shared/Components/Layout/NavMenu.razor index ac75c2a..f84e11f 100644 --- a/RBLNews.Shared/Components/Layout/NavMenu.razor +++ b/RBLNews.Shared/Components/Layout/NavMenu.razor @@ -13,7 +13,7 @@ } else { - Letztes Update @FeedDataService.Feeds?.LastUpdate.ToString("dd.MM.yyyy HH:mm") + Letzter Check: @FeedDataService.Feeds?.LastUpdate.ToString("dd.MM.yyyy HH:mm") } diff --git a/RBLNews.Shared/Components/Pages/Feeds.razor b/RBLNews.Shared/Components/Pages/Feeds.razor index 61a1518..58ad37d 100644 --- a/RBLNews.Shared/Components/Pages/Feeds.razor +++ b/RBLNews.Shared/Components/Pages/Feeds.razor @@ -10,125 +10,155 @@ @if (FeedGroups == null) { -
- Lade Feeds ...

- -
+
+ +
} else { -
-
-
-
- @foreach (IGrouping sGrouping in SourceGroupings) - { - @* *@ - } -
- @foreach (FeedGroupVM feedGrp in FeedGroups) - { -

@feedGrp.PublishDate.ToLocalTime().ToString("dd.MM.yyyy")

- @foreach (FeedVM feed in feedGrp.Feeds) - { -
- - - @feed.Title - @feed.Description - -
    -
  • - @GetRssSourceName((RssFeedSources)@feed.Source) | @feed.PubDate?.ToLocalTime() -
  • -
- -
- -
-
-
-
-
+
+
+
+ @foreach (IGrouping sGrouping in SourceGroupings) + { + + + } +
+
+ @foreach (FeedGroupVM feedGrp in FeedGroups) + { +

+ @feedGrp.PublishDate.ToLocalTime().ToString("dd.MM.yyyy") +

+ @foreach (FeedVM feed in feedGrp.Feeds) + { +
+ + + @feed.Title + @feed.Description +
+ +
+
+ @*
    *@ + @*
  • *@ + @*
    *@ + @* *@ + @*
    *@ + @*
  • *@ + @*
*@ + - } - } -
-
+ @GetRssSourceName((RssFeedSources)@feed.Source) | @feed.PubDate?.ToLocalTime() + + + +
+
+ } + } + +
+
} + @code { - [Inject] - private IFeedDataService FeedDataService { get; set; } + [Inject] private IFeedDataService FeedDataService { get; set; } - [Inject] - private AppLifecycleService AppLifecycleService { get; set; } + [Inject] private AppLifecycleService AppLifecycleService { get; set; } - private List? FeedGroups { get; set; } + private List? FeedGroups { get; set; } - private IEnumerable> SourceGroupings { get; set; } = new List>(); + private IEnumerable> SourceGroupings { get; set; } = new List>(); - protected override void OnInitialized() - { - AppLifecycleService.OnActivated = LoadFeeds; + private List activeFilters = new List(); - LoadFeeds(); - } - private async void LoadFeeds() - { - // Copy feed list to keep original list - await FeedDataService.LoadFeeds(); - FeedGroups = [..FeedDataService.Feeds.FeedGroups]; + protected override void OnInitialized() + { + AppLifecycleService.OnActivated = LoadFeeds; - List listTmp = [.. FeedDataService.Feeds.FeedGroups]; + LoadFeeds(); + } - SourceGroupings = listTmp.SelectMany(fg => fg.Feeds.Select(f => f.Source)).GroupBy(sources => sources); - StateHasChanged(); - } + private async void LoadFeeds() + { + // Copy feed list to keep original list + await FeedDataService.LoadFeeds(); + FeedGroups = [.. FeedDataService.Feeds.FeedGroups]; - private string GetRssSourceName(RssFeedSources source) - { - switch (source) - { - case RssFeedSources.RbLive: - case RssFeedSources.NitterRbLive: - return "RBLive!"; - case RssFeedSources.NitterFabrizioRomano: - return "Fabrizio Romano"; - case RssFeedSources.Lvz: - return "LVZ"; - case RssFeedSources.Kicker: - return "Kicker"; - case RssFeedSources.Bild: - return "BILD"; - case RssFeedSources.Transfermarkt: - return "Transfermarkt"; - default: - return "?"; - } - } + List listTmp = [.. FeedDataService.Feeds.FeedGroups]; - private void OnClicked(RssFeedSources source) - { - FeedGroups = new List(); - - foreach (FeedGroupVM fg in FeedDataService.Feeds.FeedGroups) - { - List feeds = fg.Feeds.Where(f => (RssFeedSources)f.Source == source).ToList(); - if (feeds.Any()) - { - FeedGroups.Add(new FeedGroupVM - { - Feeds = feeds, - PublishDate = fg.PublishDate - }); + SourceGroupings = listTmp.SelectMany(fg => fg.Feeds.Select(f => f.Source)).GroupBy(sources => sources); - } - } + StateHasChanged(); + } - StateHasChanged(); - } -} + private string GetRssSourceName(RssFeedSources source) + { + switch (source) + { + case RssFeedSources.RbLive: + case RssFeedSources.NitterRbLive: + return "RBLive!"; + case RssFeedSources.NitterFabrizioRomano: + return "Fabrizio Romano"; + case RssFeedSources.Lvz: + return "LVZ"; + case RssFeedSources.Kicker: + return "Kicker"; + case RssFeedSources.Bild: + return "BILD"; + case RssFeedSources.Transfermarkt: + return "Transfermarkt"; + default: + return "?"; + } + } + + + private void OnClicked(RssFeedSources source) + { + if (activeFilters.Contains(source)) + activeFilters.Remove(source); + else + { + activeFilters.Add(source); + } + + if (!activeFilters.Any()) + { + FeedGroups = [.. FeedDataService.Feeds.FeedGroups]; + return; + } + + FeedGroups = new List(); + foreach (FeedGroupVM fg in FeedDataService.Feeds.FeedGroups) + { + List feeds = fg.Feeds.Where(f => activeFilters.Contains((RssFeedSources)f.Source)).ToList(); + if (feeds.Any()) + { + FeedGroups.Add( + new FeedGroupVM + { + Feeds = feeds, + PublishDate = fg.PublishDate + }); + } + } + + StateHasChanged(); + } + + +} \ No newline at end of file diff --git a/RBLNews.Shared/wwwroot/css/app.css b/RBLNews.Shared/wwwroot/css/app.css index 7abf838..16706ba 100644 --- a/RBLNews.Shared/wwwroot/css/app.css +++ b/RBLNews.Shared/wwwroot/css/app.css @@ -1,5 +1,6 @@ /** rot: #DD0741 +schrift: #4b4b4b */ @font-face { @@ -9,11 +10,27 @@ rot: #DD0741 src: url('../fonts/NanumMyeongjo-Regular.ttf'); } -h1, h2, h3, h4, h5, h6, h7 { - color: rgb(221, 7, 65) !important; +#feeds-page { + color: #4b4b4b; +} + +.card { + color: #4b4b4b; + font-size: 1em; +} + +.card .card-title { + color: #DD0741; + font-size: 1em; text-transform: uppercase; } +.card .card-footer { + color: #4b4b4b; + background-color: #fff; + font-size: 0.8em; +} + nav .container-fluid { padding-right: 0px !important; padding-left: 0px !important; @@ -22,14 +39,55 @@ nav .container-fluid { nav .top-row { height: 1.8rem; background-color: rgb(221, 7, 65); - color: #eee !important; + color: #eee; } - nav .top-row h1, h2, h3, h4, h5 { - color: #eee !important; - } + /*nav .top-row h1, h2, h3, h4, h5 {*/ + /* color: #eee;*/ + /*}*/ +#filter button { + margin-top: 13px; + margin-bottom: 13px; + margin-right: 16px; +} + +/*#feeds-page #feeds-list h1, h2, h3, h4, h5 {*/ +/* color: rgb(221, 7, 65);*/ +/* text-transform: uppercase;*/ +/*}*/ + +.btn-primary { + color: #fff; + background-color: #f75581; + border-color: #DD0741; +} +.btn-primary:hover { + color: #fff; + background-color: #DD0741; + border-color: #DD0741; +} + +.btn-outline-primary { + color: #DD0741; + background-color: #fff; + border-color: #DD0741; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #DD0741; + border-color: #DD0741; +} + +.text-bg-info { + color: #DD0741 !important; + background-color: #fff !important; + border-top: 1px solid #DD0741 !important; + border-right: 1px solid #DD0741 !important; +} + .navbar-toggler { appearance: none; cursor: pointer; @@ -131,9 +189,6 @@ nav .top-row { -.list-group-item { - font-size: 0.8rem !important; -} .loading { position: absolute; @@ -146,13 +201,6 @@ nav .top-row { border-color: rgb(221, 7, 65); } -.btn-primary { - background-color: #fff !important; - color: rgb(221, 7, 65) !important; - border: 1px solid rgb(221, 7, 65) !important; -} - - .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } @@ -214,14 +262,6 @@ nav .top-row { } } -.FilterButtons { - margin: 10px; -} - -#feeds-page h4, h5 { - color: rgb(221, 7, 65) !important; - text-transform: uppercase; -} /*html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; diff --git a/RBLNews.Web/Components/App.razor b/RBLNews.Web/Components/App.razor index 4ccf32b..d7a6539 100644 --- a/RBLNews.Web/Components/App.razor +++ b/RBLNews.Web/Components/App.razor @@ -7,11 +7,11 @@ - + @* *@ @* *@ + @* *@ -