Compare commits

..

1 Commits

Author SHA1 Message Date
bd0c6f3d45
Merge pull request #2 from MaxMa04/develop
Housekeeping
2025-07-22 14:25:22 +02:00
38 changed files with 326 additions and 2326 deletions

15
.vscode/launch.json vendored
View File

@ -1,15 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": ".NET MAUI",
"type": "maui",
"request": "launch",
"preLaunchTask": "maui: Build"
}
]
}

View File

@ -1 +0,0 @@
{}

View File

@ -352,7 +352,7 @@ namespace gehGassiApp.Core.Services
var json = JsonSerializer.Serialize(registerDto, _jsonOptions); var json = JsonSerializer.Serialize(registerDto, _jsonOptions);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v3/Account/Register", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/v2/Account/Register", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -453,7 +453,7 @@ namespace gehGassiApp.Core.Services
var json = JsonSerializer.Serialize(registerDto, _jsonOptions); var json = JsonSerializer.Serialize(registerDto, _jsonOptions);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v3/Account/RegisterExternal", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/v2/Account/RegisterExternal", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -5952,7 +5952,7 @@ namespace gehGassiApp.Core.Services
var json = JsonSerializer.Serialize(requestDto, _jsonOptions); var json = JsonSerializer.Serialize(requestDto, _jsonOptions);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v2/walks/AcceptPublicWalkRequest", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/walks/AcceptPublicWalkRequest", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -7499,7 +7499,7 @@ namespace gehGassiApp.Core.Services
var json = JsonSerializer.Serialize(requestDto, _jsonOptions); var json = JsonSerializer.Serialize(requestDto, _jsonOptions);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v2/walks/CancelWalk", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/walks/CancelWalk", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -7688,7 +7688,7 @@ namespace gehGassiApp.Core.Services
var json = JsonSerializer.Serialize(requestDto, _jsonOptions); var json = JsonSerializer.Serialize(requestDto, _jsonOptions);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v2/walks/ConfirmWalk", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/walks/ConfirmWalk", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -7754,7 +7754,7 @@ namespace gehGassiApp.Core.Services
var json = JsonSerializer.Serialize(requestDto, _jsonOptions); var json = JsonSerializer.Serialize(requestDto, _jsonOptions);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v2/walks/ConfirmWalkWithRating", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/walks/ConfirmWalkWithRating", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -7953,7 +7953,7 @@ namespace gehGassiApp.Core.Services
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v2/walks/CreateWalkDirect", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/walks/CreateWalkDirect", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -8032,7 +8032,7 @@ namespace gehGassiApp.Core.Services
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v2/walks/CreateWalkRequest", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/walks/CreateWalkRequest", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {
@ -8106,7 +8106,7 @@ namespace gehGassiApp.Core.Services
var json = JsonSerializer.Serialize(requestDto, _jsonOptions); var json = JsonSerializer.Serialize(requestDto, _jsonOptions);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var serverResult = await _httpClient.PostAsync($"api/v2/walks/AcceptWalk", stringContent, token).ConfigureAwait(false); var serverResult = await _httpClient.PostAsync($"api/walks/AcceptWalk", stringContent, token).ConfigureAwait(false);
if (serverResult.IsSuccessStatusCode) if (serverResult.IsSuccessStatusCode)
{ {

View File

@ -1,11 +1,6 @@
 
migrations: migrations:
dotnet ef migrations add XXX --project gehGassiApp.Data --startup-project gehGassiApp.DbConfig
dotnet ef database update --project gehGassiApp.Data --startup-project gehGassiApp.DbConfig
add-migration xxx -Project gehGassiApp.Data -StartupProject gehGassiApp.DbConfig add-migration xxx -Project gehGassiApp.Data -StartupProject gehGassiApp.DbConfig
add-migration Initial -Project gehGassiApp.Data -StartupProject gehGassiApp.DbConfig add-migration Initial -Project gehGassiApp.Data -StartupProject gehGassiApp.DbConfig

View File

@ -1,29 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace gehGassiApp.Data.Migrations
{
/// <inheritdoc />
public partial class Walk_PaymentType_Added : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "PaymentType",
table: "Walks",
type: "INTEGER",
nullable: false,
defaultValue: 0);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "PaymentType",
table: "Walks");
}
}
}

View File

@ -15,7 +15,7 @@ namespace gehGassiApp.Data.Migrations
protected override void BuildModel(ModelBuilder modelBuilder) protected override void BuildModel(ModelBuilder modelBuilder)
{ {
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "8.0.12"); modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
modelBuilder.Entity("gehGassiApp.Domain.Common.Rating", b => modelBuilder.Entity("gehGassiApp.Domain.Common.Rating", b =>
{ {
@ -1345,9 +1345,6 @@ namespace gehGassiApp.Data.Migrations
b.Property<int>("PaymentStatus") b.Property<int>("PaymentStatus")
.HasColumnType("INTEGER"); .HasColumnType("INTEGER");
b.Property<int>("PaymentType")
.HasColumnType("INTEGER");
b.Property<double>("PickupAddressLat") b.Property<double>("PickupAddressLat")
.HasColumnType("REAL"); .HasColumnType("REAL");

View File

@ -130,20 +130,7 @@ namespace gehGassiApp.Domain.Common
/// </summary> /// </summary>
GehGassi = 10 GehGassi = 10
} }
/// <summary>
/// Zahlungsart für einen Walk
/// </summary>
public enum WalkPaymentType
{
/// <summary>
/// Mit MangoPay bezahlen (z.B. Kreditkarte)
/// </summary>
MangoPay = 1,
/// <summary>
/// Barzahlung
/// </summary>
Cash = 10
}
/// <summary> /// <summary>
/// Zahlungsstatus in der App /// Zahlungsstatus in der App
/// </summary> /// </summary>

View File

@ -176,11 +176,7 @@ namespace gehGassiApp.Domain.Walks
/// </summary> /// </summary>
[Required] [Required]
public PaymentStatus PaymentStatus { get; set; } public PaymentStatus PaymentStatus { get; set; }
/// <summary>
/// Welche Art von Bezahlung wurde verwendet
/// </summary>
[Required]
public WalkPaymentType PaymentType { get; set; }
/// <summary> /// <summary>
/// Datum der Erstellung des Walks /// Datum der Erstellung des Walks
/// </summary> /// </summary>
@ -441,11 +437,7 @@ namespace gehGassiApp.Domain.Walks
/// Zahlungsstatus des Walks /// Zahlungsstatus des Walks
/// </summary> /// </summary>
public PaymentStatus PaymentStatus { get; set; } public PaymentStatus PaymentStatus { get; set; }
/// <summary>
/// Welche Art von Bezahlung wurde verwendet
/// </summary>
[Required]
public WalkPaymentType PaymentType { get; set; }
/// <summary> /// <summary>
/// Id des Gutscheins der verwendet wurde, wenn einer verwendet wurde /// Id des Gutscheins der verwendet wurde, wenn einer verwendet wurde
/// </summary> /// </summary>

View File

@ -150,7 +150,7 @@
<Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedPrivacy}"></Switch> <Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedPrivacy}"></Switch>
</Grid> </Grid>
<!-- <Grid ColumnDefinitions="*,Auto" ColumnSpacing="10" <Grid ColumnDefinitions="*,Auto" ColumnSpacing="10"
IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" > IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" >
<Label Grid.Column="0" Text="{x:Static res:Text.Register_AcceptTermsMangopay}" Style="{StaticResource LinkLabelStyle}" HorizontalOptions="Start" Padding="0,0,0,0" LineBreakMode="TailTruncation"> <Label Grid.Column="0" Text="{x:Static res:Text.Register_AcceptTermsMangopay}" Style="{StaticResource LinkLabelStyle}" HorizontalOptions="Start" Padding="0,0,0,0" LineBreakMode="TailTruncation">
<Label.GestureRecognizers> <Label.GestureRecognizers>
@ -158,7 +158,7 @@
</Label.GestureRecognizers> </Label.GestureRecognizers>
</Label> </Label>
<Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedTermsMangopay}"></Switch> <Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedTermsMangopay}"></Switch>
</Grid> --> </Grid>
</VerticalStackLayout> </VerticalStackLayout>
<VerticalStackLayout Spacing="0" IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" Margin="{StaticResource MarginBig}"> <VerticalStackLayout Spacing="0" IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" Margin="{StaticResource MarginBig}">

View File

@ -117,7 +117,7 @@
<Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedPrivacy}"></Switch> <Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedPrivacy}"></Switch>
</Grid> </Grid>
<!-- <Grid ColumnDefinitions="*,Auto" ColumnSpacing="10" <Grid ColumnDefinitions="*,Auto" ColumnSpacing="10"
IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" > IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" >
<Label Grid.Column="0" Text="{x:Static res:Text.Register_AcceptTermsMangopay}" Style="{StaticResource LinkLabelStyle}" HorizontalOptions="Start" Padding="0,0,0,0" LineBreakMode="TailTruncation"> <Label Grid.Column="0" Text="{x:Static res:Text.Register_AcceptTermsMangopay}" Style="{StaticResource LinkLabelStyle}" HorizontalOptions="Start" Padding="0,0,0,0" LineBreakMode="TailTruncation">
<Label.GestureRecognizers> <Label.GestureRecognizers>
@ -125,7 +125,7 @@
</Label.GestureRecognizers> </Label.GestureRecognizers>
</Label> </Label>
<Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedTermsMangopay}"></Switch> <Switch Grid.Column="1" VerticalOptions="Center" HorizontalOptions="End" IsToggled="{Binding ViewModel.AcceptedTermsMangopay}"></Switch>
</Grid> --> </Grid>
</VerticalStackLayout> </VerticalStackLayout>
<VerticalStackLayout Spacing="0" IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" Margin="{StaticResource MarginBig}"> <VerticalStackLayout Spacing="0" IsVisible="{Binding ViewModel.AppUserType, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static enum:AppUserType.DogWalker}}" Margin="{StaticResource MarginBig}">

View File

@ -103,7 +103,7 @@ public static class MauiProgram
fonts.AddFont("Inter-Medium.ttf", "InterMedium"); fonts.AddFont("Inter-Medium.ttf", "InterMedium");
fonts.AddFont("Inter-SemiBold.ttf", "InterSemiBold"); fonts.AddFont("Inter-SemiBold.ttf", "InterSemiBold");
fonts.AddFont("icomoon.ttf", "IconMoon"); fonts.AddFont("icomoon.ttf", "IconMoon");
fonts.AddFont("MaterialIcons-Regular.ttf", "MaterialIconsRegular"); fonts.AddFont("MaterialIcons-Regular.ttf", "IconFont");
}).UseLocalNotifications() }).UseLocalNotifications()
.ConfigureMauiHandlers((handlers) => .ConfigureMauiHandlers((handlers) =>
{ {
@ -504,7 +504,7 @@ public static class MauiProgram
#endif #endif
#if IOS #if IOS
handler.PlatformView.BorderStyle = UITextBorderStyle.None; handler.PlatformView.BorderStyle = UITextBorderStyle.None;
// handler.PlatformView.SecureTextEntry = false; handler.PlatformView.SecureTextEntry = false;
#endif #endif
} }

View File

@ -27,6 +27,8 @@
<string>Assets.xcassets/appicon.appiconset</string> <string>Assets.xcassets/appicon.appiconset</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string></string> <string></string>
<key>CFBundleShortVersionString</key>
<string>1.274</string>
<key>NSAppTransportSecurity</key> <key>NSAppTransportSecurity</key>
<dict> <dict>
<key>NSAllowsArbitraryLoads</key> <key>NSAllowsArbitraryLoads</key>
@ -67,7 +69,7 @@
<array> <array>
<string>remote-notification</string> <string>remote-notification</string>
</array> </array>
<key>CFBundleIdentifier</key> <key>CFBundleVersion</key>
<string></string> <string>274</string>
</dict> </dict>
</plist> </plist>

View File

@ -184,7 +184,7 @@
<Image.Source> <Image.Source>
<FontImageSource <FontImageSource
x:Name="homeImageSource" x:Name="homeImageSource"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
Glyph="home" Glyph="home"
Color="{StaticResource Primary_DarkBlue}" /> Color="{StaticResource Primary_DarkBlue}" />
</Image.Source> </Image.Source>
@ -217,7 +217,7 @@
<Image.Source> <Image.Source>
<FontImageSource <FontImageSource
x:Name="homeWalkerImageSource" x:Name="homeWalkerImageSource"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
Glyph="home" Glyph="home"
Color="{StaticResource Primary_DarkBlue}" /> Color="{StaticResource Primary_DarkBlue}" />
</Image.Source> </Image.Source>
@ -505,7 +505,7 @@
Background="Transparent" Background="Transparent"
Command="{TemplateBinding BindingContext.NavigateBackCommand}" Command="{TemplateBinding BindingContext.NavigateBackCommand}"
FontAttributes="Bold" FontAttributes="Bold"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
FontSize="40" FontSize="40"
HorizontalOptions="End" HorizontalOptions="End"
Text="close" Text="close"

View File

@ -203,9 +203,7 @@ namespace gehGassiApp.ViewModels.Account
if (AppUserType == AppUserType.DogOwner) if (AppUserType == AppUserType.DogOwner)
return true; return true;
// if (AcceptedTermsMangopay && SelectedNationality != null && SelectedMainResidence != null) if (AcceptedTermsMangopay && SelectedNationality != null && SelectedMainResidence != null)
// return true;
if (SelectedNationality != null && SelectedMainResidence != null)
return true; return true;
return false; return false;

View File

@ -112,12 +112,6 @@ namespace gehGassiApp.ViewModels
[ObservableProperty] [ObservableProperty]
private ObservableCollection<DogWalkerLookup> _walkers; private ObservableCollection<DogWalkerLookup> _walkers;
/// <summary>
/// First 10 walkers for the home screen display
/// </summary>
[ObservableProperty]
private ObservableCollection<DogWalkerLookup> _first10Walkers;
[ObservableProperty] [ObservableProperty]
private DogWalkerLookup _selectedWalker; private DogWalkerLookup _selectedWalker;
@ -547,9 +541,6 @@ namespace gehGassiApp.ViewModels
Walkers = requests.Value.ToObservableCollection(); Walkers = requests.Value.ToObservableCollection();
// Set First10Walkers for the home screen display
First10Walkers = requests.Value.Take(10).ToObservableCollection();
_total = requests.Total; _total = requests.Total;
_skip = requests.Skip + requests.Take; _skip = requests.Skip + requests.Take;
} }
@ -558,7 +549,6 @@ namespace gehGassiApp.ViewModels
_total = 0; _total = 0;
_skip = 0; _skip = 0;
Walkers = null; Walkers = null;
First10Walkers = null;
} }
} }
catch (Exception ex) catch (Exception ex)
@ -567,7 +557,6 @@ namespace gehGassiApp.ViewModels
_total = 0; _total = 0;
_skip = 0; _skip = 0;
Walkers = null; Walkers = null;
First10Walkers = null;
} }
} }

View File

@ -81,7 +81,7 @@ namespace gehGassiApp.ViewModels.More
/// Hat der Benutzer die MangoPay-AGB akzeptiert? /// Hat der Benutzer die MangoPay-AGB akzeptiert?
/// </summary> /// </summary>
[ObservableProperty] [ObservableProperty]
private bool _acceptedTermsMangopay = true; private bool _acceptedTermsMangopay;
#region Commands #region Commands
@ -177,7 +177,7 @@ namespace gehGassiApp.ViewModels.More
{ {
SelectedNationality = null; SelectedNationality = null;
SelectedMainResidence = null; SelectedMainResidence = null;
AcceptedTermsMangopay = true; AcceptedTermsMangopay = false;
IsBusy = true; IsBusy = true;
await Task.Delay(Core.Common.Constants.AnimationDelayDetails); await Task.Delay(Core.Common.Constants.AnimationDelayDetails);

View File

@ -91,7 +91,7 @@ namespace gehGassiApp.ViewModels.More
/// Hat der Benutzer die MangoPay-AGB akzeptiert? /// Hat der Benutzer die MangoPay-AGB akzeptiert?
/// </summary> /// </summary>
[ObservableProperty] [ObservableProperty]
private bool _acceptedTermsMangopay = true; private bool _acceptedTermsMangopay;
#region Commands #region Commands
@ -193,7 +193,7 @@ namespace gehGassiApp.ViewModels.More
{ {
SelectedNationality = null; SelectedNationality = null;
SelectedMainResidence = null; SelectedMainResidence = null;
AcceptedTermsMangopay = true; AcceptedTermsMangopay = false;
IsBusy = true; IsBusy = true;
await Task.Delay(Core.Common.Constants.AnimationDelayDetails); await Task.Delay(Core.Common.Constants.AnimationDelayDetails);

View File

@ -1,57 +0,0 @@
using CommunityToolkit.Maui.Views;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace gehGassiApp.ViewModels.Popups
{
/// <summary>
/// ViewModel für das Zahlungshinweis-Popup
///
/// Verwendung:
/// // Prüfen ob bereits angezeigt
/// if (!PaymentInfoPopupViewModel.HasInfoBeenShown())
/// {
/// var popup = new PaymentInfoPopup();
/// await Shell.Current.CurrentPage.ShowPopupAsync(popup);
/// }
/// </summary>
public partial class PaymentInfoPopupViewModel : ObservableObject
{
private readonly Popup _popup;
private const string PAYMENT_INFO_SHOWN_KEY = "payment_info_july_shown_2025";
public PaymentInfoPopupViewModel(Popup popup)
{
_popup = popup;
}
/// <summary>
/// Prüft, ob der Zahlungshinweis bereits angezeigt wurde
/// </summary>
public static bool HasInfoBeenShown()
{
return Preferences.Get(PAYMENT_INFO_SHOWN_KEY, false);
}
/// <summary>
/// Markiert den Hinweis als angezeigt
/// </summary>
private static void MarkInfoAsShown()
{
Preferences.Set(PAYMENT_INFO_SHOWN_KEY, true);
}
/// <summary>
/// User hat den Hinweis zur Kenntnis genommen
/// </summary>
[RelayCommand]
private async Task Acknowledge()
{
// Hinweis als angezeigt markieren
MarkInfoAsShown();
// Popup schließen
await _popup.CloseAsync(true);
}
}
}

View File

@ -35,7 +35,6 @@
<Entry <Entry
x:Name="email" x:Name="email"
Keyboard="Email" Keyboard="Email"
AutomationId="Login"
Placeholder="{x:Static res:Text.Login_Username}" Placeholder="{x:Static res:Text.Login_Username}"
Text="{Binding Email}"> Text="{Binding Email}">
<Entry.Behaviors> <Entry.Behaviors>
@ -49,7 +48,6 @@
<Entry <Entry
Grid.Column="0" Grid.Column="0"
HorizontalOptions="Fill" HorizontalOptions="Fill"
AutomationId="Password"
IsPassword="{Binding Source={x:Reference showPasswordTrigger}, Path=HidePassword}" IsPassword="{Binding Source={x:Reference showPasswordTrigger}, Path=HidePassword}"
Keyboard="Text" Keyboard="Text"
Placeholder="{x:Static res:Text.Login_Password}" Placeholder="{x:Static res:Text.Login_Password}"

View File

@ -77,7 +77,7 @@
WidthRequest="40"> WidthRequest="40">
<Button.ImageSource> <Button.ImageSource>
<FontImageSource <FontImageSource
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
Glyph="photo_camera" Glyph="photo_camera"
Size="20" Size="20"
Color="{StaticResource Primary_White}" /> Color="{StaticResource Primary_White}" />

View File

@ -76,7 +76,7 @@
WidthRequest="40"> WidthRequest="40">
<Button.ImageSource> <Button.ImageSource>
<FontImageSource <FontImageSource
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
Glyph="photo_camera" Glyph="photo_camera"
Size="20" Size="20"
Color="{StaticResource Primary_White}" /> Color="{StaticResource Primary_White}" />

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<controls:BaseContentPage <controls:BaseContentPage
x:Class="gehGassiApp.Views.HomeView" x:Class="gehGassiApp.Views.HomeView"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
@ -23,147 +23,189 @@
</controls:BaseContentPage.TitleView> </controls:BaseContentPage.TitleView>
<ContentPage.Content> <ContentPage.Content>
<AbsoluteLayout> <Grid
<!-- Main scrollable content (full screen) --> x:Name="rootHomeGrid"
Padding="20,20,20,0"
HorizontalOptions="FillAndExpand"
RowDefinitions="Auto,*"
VerticalOptions="FillAndExpand">
<VerticalStackLayout
x:Name="rootVerticalStackLayout"
Grid.Row="0"
HorizontalOptions="Fill"
SizeChanged="rootVerticalStackLayout_SizeChanged"
Spacing="0"
VerticalOptions="FillAndExpand">
<Border x:Name="permissionStatusBorder" Style="{StaticResource PermissionStatusBorder}">
<Label Style="{StaticResource PermissionStatusLabel}" Text="{x:Static res:Text.Permission_Location_Error}" />
<Border.IsVisible>
<MultiBinding Converter="{StaticResource AllTrueMultiConverter}">
<Binding Converter="{StaticResource PermissionsStatusToBoolConverter}" Path="LocationPermissionStatus" />
<Binding Path="ShowPermissionStatus" />
</MultiBinding>
</Border.IsVisible>
<Border.GestureRecognizers>
<TapGestureRecognizer Command="{Binding ShowPermissionsCommand}" />
</Border.GestureRecognizers>
</Border>
<controls:ProfileNotFinishedControl
Margin="{StaticResource MarginMid}"
HorizontalOptions="Fill"
IsVisible="{Binding ProfileNotFinished}"
VerticalOptions="StartAndExpand"
ViewModel="{Binding .}" />
<ownerDashboardControls:NextWalkControlSmall
HorizontalOptions="FillAndExpand"
IsVisible="{Binding HasNextWalk}"
NextWalk="{Binding NextWalk}"
ShowCommand="{Binding WalkSelectedCommand}"
VerticalOptions="StartAndExpand" />
<Grid
HeightRequest="130"
HorizontalOptions="Fill"
VerticalOptions="StartAndExpand">
<CollectionView ItemsSource="{Binding NextWalks}" VerticalOptions="StartAndExpand">
<CollectionView.ItemsLayout>
<GridItemsLayout
HorizontalItemSpacing="10"
Orientation="Horizontal"
SnapPointsAlignment="Center"
SnapPointsType="MandatorySingle" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<ownerDashboardControls:NextWalkListControl
NextWalk="{Binding .}"
NextWalkWidth="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=NextWalkWidth}"
ShowCommand="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=NextWalkSelectedCommand}" />
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<Grid.IsVisible>
<MultiBinding Converter="{StaticResource AllTrueMultiConverter}">
<Binding Converter="{StaticResource InvertedBoolConverter}" Path="HasNextWalk" />
<Binding Converter="{StaticResource IsListNotNullOrEmptyConverter}" Path="NextWalks" />
<Binding Converter="{StaticResource ListContainsMoreThanOneItemConverter}" Path="NextWalks" />
</MultiBinding>
</Grid.IsVisible>
</Grid>
<Image
Margin="{Binding BannerMargin}"
HeightRequest="{Binding Banner.Height}"
IsVisible="{Binding HasBanner}"
WidthRequest="{Binding Banner.Width}">
<Image.Source>
<UriImageSource CachingEnabled="True" Uri="{Binding Banner.Image}" />
</Image.Source>
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding ShowBannerCommand}" />
</Image.GestureRecognizers>
</Image>
<Label
Grid.Row="1"
Margin="{Binding ListMargin}"
Style="{StaticResource H6_Blue}"
Text="{x:Static res:Text.Common_DogWalkers_NearYou}" />
</VerticalStackLayout>
<controls:EmptyListViewControl
Grid.Row="1"
ImageHeight="150"
IsBusy="{Binding IsBusy}"
IsNotBusy="{Binding IsNotBusy}"
IsVisible="{Binding Walkers, Converter={StaticResource IsListNullOrEmptyConverter}}"
ListSource="{Binding Walkers}"
NotFoundImage="walking_dogs"
NotFoundText="{x:Static res:Text.Walker_NotFound}"
RefreshCommand="{Binding RefreshWalkersCommand}"
SearchImage="walking_dogs"
SearchText="{x:Static res:Text.Walker_Searching}" />
<RefreshView <RefreshView
x:Name="homeRefreshView" x:Name="homeRefreshView"
AbsoluteLayout.LayoutBounds="0,0,1,1" Grid.Row="1"
AbsoluteLayout.LayoutFlags="All"
BackgroundColor="#ffffff" BackgroundColor="#ffffff"
Command="{Binding RefreshWalkersCommand}" Command="{Binding RefreshWalkersCommand}"
IsRefreshing="{Binding WalkersRefreshing}"> HorizontalOptions="FillAndExpand"
<ScrollView> IsRefreshing="{Binding WalkersRefreshing}"
<Grid IsVisible="{Binding Walkers, Converter={StaticResource IsListNotNullOrEmptyConverter}}"
x:Name="rootHomeGrid" Refreshing="RefreshView_Refreshing"
Padding="20,20,20,90" VerticalOptions="FillAndExpand">
<Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<CollectionView
x:Name="homeCollectionView"
Background="#ffffff"
HorizontalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"
RowDefinitions="Auto,Auto" ItemsSource="{Binding Walkers}"
VerticalOptions="FillAndExpand"> RemainingItemsThreshold="5"
RemainingItemsThresholdReachedCommand="{Binding LoadMoreCommand}"
<VerticalStackLayout Scrolled="homeCollectionView_Scrolled"
x:Name="rootVerticalStackLayout" SelectedItem="{Binding SelectedWalker}"
Grid.Row="0" SelectionMode="Single"
HorizontalOptions="Fill" VerticalOptions="Fill"
Spacing="0" VerticalScrollBarVisibility="Never">
VerticalOptions="Start"> <CollectionView.ItemsLayout>
<Border x:Name="permissionStatusBorder" Style="{StaticResource PermissionStatusBorder}"> <GridItemsLayout Orientation="Vertical" VerticalItemSpacing="12" />
<Label Style="{StaticResource PermissionStatusLabel}" Text="{x:Static res:Text.Permission_Location_Error}" /> </CollectionView.ItemsLayout>
<Border.IsVisible> <CollectionView.ItemTemplate>
<MultiBinding Converter="{StaticResource AllTrueMultiConverter}"> <DataTemplate>
<Binding Converter="{StaticResource PermissionsStatusToBoolConverter}" Path="LocationPermissionStatus" /> <!--<SwipeView BackgroundColor="{StaticResource Primary_White}" Margin="0,0,0,12">
<Binding Path="ShowPermissionStatus" /> <SwipeView.LeftItems>
</MultiBinding> <SwipeItems>
</Border.IsVisible> <SwipeItemView Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=BlockCommand}" CommandParameter="{Binding .}">
<Border.GestureRecognizers> <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<TapGestureRecognizer Command="{Binding ShowPermissionsCommand}" /> <Image Source="block_user" WidthRequest="24" HeightRequest="24" HorizontalOptions="Center" VerticalOptions="Center"/>
</Border.GestureRecognizers> <Label Text="{x:Static res:Text.Common_Block}" HorizontalOptions="Center" Style="{StaticResource BodyS_GreyDark}"></Label>
</Border> </StackLayout>
<controls:ProfileNotFinishedControl </SwipeItemView>
Margin="{StaticResource MarginMid}" </SwipeItems>
HorizontalOptions="Fill" </SwipeView.LeftItems>
IsVisible="{Binding ProfileNotFinished}" <SwipeView.RightItems>
VerticalOptions="StartAndExpand" <SwipeItems>
ViewModel="{Binding .}" /> <SwipeItemView Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=ReportCommand}" CommandParameter="{Binding .}">
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<ownerDashboardControls:NextWalkControlSmall <Image Source="report_user" WidthRequest="24" HeightRequest="24" HorizontalOptions="Center" VerticalOptions="Center"/>
HorizontalOptions="FillAndExpand" <Label Text="{x:Static res:Text.Common_Report}" HorizontalOptions="Center" Style="{StaticResource BodyS_GreyDark}"></Label>
IsVisible="{Binding HasNextWalk}" </StackLayout>
NextWalk="{Binding NextWalk}" </SwipeItemView>
ShowCommand="{Binding WalkSelectedCommand}" </SwipeItems>
VerticalOptions="StartAndExpand" /> </SwipeView.RightItems>-->
<controls:WalkerListControl DogOwnerHasPremium="{Binding IsPremiumUser}" Walker="{Binding .}">
<Grid <controls:WalkerListControl.GestureRecognizers>
HeightRequest="130" <TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=WalkerSelectedCommand}" CommandParameter="{Binding .}" />
HorizontalOptions="Fill" </controls:WalkerListControl.GestureRecognizers>
VerticalOptions="StartAndExpand"> </controls:WalkerListControl>
<CollectionView ItemsSource="{Binding NextWalks}" VerticalOptions="StartAndExpand"> <!--<VisualStateManager.VisualStateGroups>
<CollectionView.ItemsLayout> <VisualStateGroup Name="CommonStates">
<GridItemsLayout <VisualState Name="Selected">
HorizontalItemSpacing="10" <VisualState.Setters>
Orientation="Horizontal" <Setter Property="BackgroundColor" Value="{StaticResource Primary_White}" />
SnapPointsAlignment="Center" </VisualState.Setters>
SnapPointsType="MandatorySingle" /> </VisualState>
</CollectionView.ItemsLayout> </VisualStateGroup>
<CollectionView.ItemTemplate> </VisualStateManager.VisualStateGroups>-->
<DataTemplate> <!--</SwipeView>-->
<ownerDashboardControls:NextWalkListControl </DataTemplate>
NextWalk="{Binding .}" </CollectionView.ItemTemplate>
NextWalkWidth="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=NextWalkWidth}" </CollectionView>
ShowCommand="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=NextWalkSelectedCommand}" /> </Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
<Grid.IsVisible>
<MultiBinding Converter="{StaticResource AllTrueMultiConverter}">
<Binding Converter="{StaticResource InvertedBoolConverter}" Path="HasNextWalk" />
<Binding Converter="{StaticResource IsListNotNullOrEmptyConverter}" Path="NextWalks" />
<Binding Converter="{StaticResource ListContainsMoreThanOneItemConverter}" Path="NextWalks" />
</MultiBinding>
</Grid.IsVisible>
</Grid>
<Image
Margin="{Binding BannerMargin}"
HeightRequest="{Binding Banner.Height}"
IsVisible="{Binding HasBanner}"
WidthRequest="{Binding Banner.Width}">
<Image.Source>
<UriImageSource CachingEnabled="True" Uri="{Binding Banner.Image}" />
</Image.Source>
<Image.GestureRecognizers>
<TapGestureRecognizer Command="{Binding ShowBannerCommand}" />
</Image.GestureRecognizers>
</Image>
<Label
Grid.Row="1"
Margin="{Binding ListMargin}"
Style="{StaticResource H6_Blue}"
Text="{x:Static res:Text.Common_DogWalkers_NearYou}" />
<!-- Walker StackLayout (first 10) -->
<StackLayout
x:Name="walkersStackLayout"
BindableLayout.ItemsSource="{Binding First10Walkers}"
Spacing="12">
<BindableLayout.ItemTemplate>
<DataTemplate>
<controls:WalkerListControl DogOwnerHasPremium="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=IsPremiumUser}" Walker="{Binding .}">
<controls:WalkerListControl.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodels:HomeViewModel}}, Path=WalkerSelectedCommand}" CommandParameter="{Binding .}" />
</controls:WalkerListControl.GestureRecognizers>
</controls:WalkerListControl>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
<!-- "Alle anzeigen" Link Label -->
<Label
Margin="0,16,0,0"
Style="{StaticResource LinkLabelStyle}"
HorizontalOptions="Center"
Text="Alle anzeigen">
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding NavigateCommand}" CommandParameter="{x:Static viewmodels:MenuSelected.Walkers}" />
</Label.GestureRecognizers>
</Label>
</VerticalStackLayout>
</Grid>
</ScrollView>
</RefreshView> </RefreshView>
<!-- Floating Public Request Button (over content) -->
<Button <Button
Margin="0,0,0,20" Grid.Row="0"
AbsoluteLayout.LayoutBounds="0.5,1,300,90" Grid.RowSpan="2"
AbsoluteLayout.LayoutFlags="PositionProportional" Margin="0,0,0,10"
BackgroundColor="{StaticResource Primary}"
Command="{Binding CreatePublicWalkRequestCommand}" Command="{Binding CreatePublicWalkRequestCommand}"
ContentLayout="Left, 5" ContentLayout="Left, 5"
CornerRadius="15" HorizontalOptions="CenterAndExpand"
HorizontalOptions="Center"
LineBreakMode="TailTruncation" LineBreakMode="TailTruncation"
Text="{x:Static res:Text.PublicWalkRequest_Title}" Text="{x:Static res:Text.PublicWalkRequest_Title}"
VerticalOptions="End"> VerticalOptions="End">
@ -175,7 +217,7 @@
</Button.ImageSource> </Button.ImageSource>
</Button> </Button>
</AbsoluteLayout> </Grid>
</ContentPage.Content> </ContentPage.Content>

View File

@ -10,11 +10,9 @@ public partial class HomeView : BaseContentPage
IDeviceInstallationService _deviceInstallationService; IDeviceInstallationService _deviceInstallationService;
IDeviceInstallationService DeviceInstallationService => _deviceInstallationService ??= ServiceHelper.GetService<IDeviceInstallationService>(); IDeviceInstallationService DeviceInstallationService => _deviceInstallationService ??= ServiceHelper.GetService<IDeviceInstallationService>();
private HomeViewModel ViewModel => BindingContext as HomeViewModel; private HomeViewModel ViewModel => BindingContext as HomeViewModel;
private bool _isRowHidden = false;
// COMMENTED OUT: Animation variables for collapsing header private double _initialRowHeight;
//private bool _isRowHidden = false; private bool _animationRunning = false;
//private double _initialRowHeight;
//private bool _animationRunning = false;
/// <summary> /// <summary>
/// Erstellt eine Instanz /// Erstellt eine Instanz
@ -33,13 +31,10 @@ public partial class HomeView : BaseContentPage
await ViewModel.InitializeAsync(this); await ViewModel.InitializeAsync(this);
var width = DeviceDisplay.Current.MainDisplayInfo.Width / DeviceDisplay.Current.MainDisplayInfo.Density; var width = DeviceDisplay.Current.MainDisplayInfo.Width / DeviceDisplay.Current.MainDisplayInfo.Density;
ViewModel.NextWalkWidth = width * 0.8; ViewModel.NextWalkWidth = width * 0.8;
_isRowHidden = false;
// COMMENTED OUT: Animation initialization _initialRowHeight = 0;
//_isRowHidden = false; _animationRunning = false;
//_initialRowHeight = 0; rootVerticalStackLayout.HeightRequest = -1;
//_animationRunning = false;
//rootVerticalStackLayout.HeightRequest = -1;
#if IOS #if IOS
if (DeviceInstallationService.NotificationsSupported) if (DeviceInstallationService.NotificationsSupported)
{ {
@ -55,78 +50,74 @@ public partial class HomeView : BaseContentPage
await ViewModel.DisappearingAsync(this); await ViewModel.DisappearingAsync(this);
} }
// COMMENTED OUT: Workaround für den IOS-Bug der Höhenberechnung! Siehe https://github.com/dotnet/maui/issues/8820 //Workaround für den IOS-Bug der Höhenberechnung! Siehe https://github.com/dotnet/maui/issues/8820
//private void rootVerticalStackLayout_SizeChanged(object sender, EventArgs e) private void rootVerticalStackLayout_SizeChanged(object sender, EventArgs e)
//{ {
// if(!_isRowHidden && rootVerticalStackLayout.Height > _initialRowHeight) if(!_isRowHidden && rootVerticalStackLayout.Height > _initialRowHeight)
// _initialRowHeight = rootVerticalStackLayout.Height; _initialRowHeight = rootVerticalStackLayout.Height;
//} }
// COMMENTED OUT: Scroll handler for collapsing animation private async void homeCollectionView_Scrolled(object sender, ItemsViewScrolledEventArgs e)
//private async void homeCollectionView_Scrolled(object sender, ItemsViewScrolledEventArgs e) {
//{ if(_animationRunning)
// if(_animationRunning) return;
// return;
// if (e.VerticalDelta > 0 && e.VerticalOffset >= 50 && !_isRowHidden)
// if (e.VerticalDelta > 0 && e.VerticalOffset >= 50 && !_isRowHidden) {
// { await HideHeader();
// await HideHeader(); }
// } else if (e.VerticalDelta < 0 && e.VerticalOffset <= 50 && _isRowHidden)
// else if (e.VerticalDelta < 0 && e.VerticalOffset <= 50 && _isRowHidden) {
// { await ShowHeader();
// await ShowHeader(); }
// } }
//}
// COMMENTED OUT: Show header animation private async Task ShowHeader()
//private async Task ShowHeader() {
//{ homeRefreshView.IsEnabled = false;
// homeRefreshView.IsEnabled = false; homeCollectionView.IsEnabled = false;
// homeCollectionView.IsEnabled = false; _isRowHidden = false;
// _isRowHidden = false; _animationRunning = true;
// _animationRunning = true; var animation = new Animation(v => rootVerticalStackLayout.HeightRequest = v, 0, _initialRowHeight);
// var animation = new Animation(v => rootVerticalStackLayout.HeightRequest = v, 0, _initialRowHeight);
// MainThread.BeginInvokeOnMainThread(() => MainThread.BeginInvokeOnMainThread(() =>
// { {
// animation.Commit(this, "HideRowAnimation", length: 500, easing: Easing.SinIn); animation.Commit(this, "HideRowAnimation", length: 500, easing: Easing.SinIn);
//
// }); });
// await Task.Delay(500); await Task.Delay(500);
// _animationRunning = false; _animationRunning = false;
// homeCollectionView.IsEnabled = true; homeCollectionView.IsEnabled = true;
// homeRefreshView.IsEnabled = true; homeRefreshView.IsEnabled = true;
//} }
// COMMENTED OUT: Hide header animation private async Task HideHeader()
//private async Task HideHeader() {
//{ homeRefreshView.IsEnabled = false;
// homeRefreshView.IsEnabled = false; homeCollectionView.IsEnabled = false;
// homeCollectionView.IsEnabled = false; _isRowHidden = true;
// _isRowHidden = true; _animationRunning = true;
// _animationRunning = true; var animation = new Animation(v => rootVerticalStackLayout.HeightRequest = v, _initialRowHeight, 0);
// var animation = new Animation(v => rootVerticalStackLayout.HeightRequest = v, _initialRowHeight, 0);
// MainThread.BeginInvokeOnMainThread(() =>
// MainThread.BeginInvokeOnMainThread(() => {
// { animation.Commit(this, "HideRowAnimation", length: 500, easing: Easing.SinOut);
// animation.Commit(this, "HideRowAnimation", length: 500, easing: Easing.SinOut);
// });
// });
// await Task.Delay(500);
// await Task.Delay(500); _animationRunning = false;
// _animationRunning = false; homeCollectionView.IsEnabled = true;
// homeCollectionView.IsEnabled = true; homeRefreshView.IsEnabled = true;
// homeRefreshView.IsEnabled = true; }
//}
// COMMENTED OUT: RefreshView refreshing handler private async void RefreshView_Refreshing(object sender, EventArgs e)
//private async void RefreshView_Refreshing(object sender, EventArgs e) {
//{ if (_isRowHidden)
// if (_isRowHidden) {
// { await ShowHeader();
// await ShowHeader(); }
// } }
//}
} }

View File

@ -64,7 +64,7 @@
ItemsSource="{Binding MainResidences}" ItemsSource="{Binding MainResidences}"
SelectedItem="{Binding SelectedMainResidence}" /> SelectedItem="{Binding SelectedMainResidence}" />
</Border> </Border>
<!-- <Grid <Grid
Margin="{StaticResource MarginBig}" Margin="{StaticResource MarginBig}"
ColumnDefinitions="*,Auto" ColumnDefinitions="*,Auto"
ColumnSpacing="10"> ColumnSpacing="10">
@ -83,7 +83,7 @@
HorizontalOptions="End" HorizontalOptions="End"
IsToggled="{Binding AcceptedTermsMangopay}" IsToggled="{Binding AcceptedTermsMangopay}"
VerticalOptions="Center" /> VerticalOptions="Center" />
</Grid> --> </Grid>
<ActivityIndicator <ActivityIndicator
HorizontalOptions="Center" HorizontalOptions="Center"

View File

@ -64,8 +64,8 @@
ItemDisplayBinding="{Binding Name}" ItemDisplayBinding="{Binding Name}"
ItemsSource="{Binding MainResidences}" ItemsSource="{Binding MainResidences}"
SelectedItem="{Binding SelectedMainResidence}" /> SelectedItem="{Binding SelectedMainResidence}" />
</Border> </Border>
<!-- <Grid <Grid
Margin="{StaticResource MarginBig}" Margin="{StaticResource MarginBig}"
ColumnDefinitions="*,Auto" ColumnDefinitions="*,Auto"
ColumnSpacing="10"> ColumnSpacing="10">
@ -84,7 +84,7 @@
HorizontalOptions="End" HorizontalOptions="End"
IsToggled="{Binding AcceptedTermsMangopay}" IsToggled="{Binding AcceptedTermsMangopay}"
VerticalOptions="Center" /> VerticalOptions="Center" />
</Grid>--> </Grid>
<ActivityIndicator <ActivityIndicator
HorizontalOptions="Center" HorizontalOptions="Center"

View File

@ -476,7 +476,7 @@
</Grid.GestureRecognizers> </Grid.GestureRecognizers>
</Grid> </Grid>
<!-- <Border Style="{StaticResource Separator}" /> <Border Style="{StaticResource Separator}" />
<Grid <Grid
ColumnDefinitions="24,*,24" ColumnDefinitions="24,*,24"
@ -599,7 +599,7 @@
<Grid.GestureRecognizers> <Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding PayoutsCommand}" /> <TapGestureRecognizer Command="{Binding PayoutsCommand}" />
</Grid.GestureRecognizers> </Grid.GestureRecognizers>
</Grid> --> </Grid>
<Border Style="{StaticResource Separator}" /> <Border Style="{StaticResource Separator}" />

View File

@ -441,7 +441,7 @@
</Grid.GestureRecognizers> </Grid.GestureRecognizers>
</Grid> </Grid>
<!-- <Border Style="{StaticResource Separator}" /> <Border Style="{StaticResource Separator}" />
<Grid <Grid
ColumnDefinitions="24,*,24" ColumnDefinitions="24,*,24"
@ -484,9 +484,9 @@
<Grid.GestureRecognizers> <Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding BankAccountCommand}" /> <TapGestureRecognizer Command="{Binding BankAccountCommand}" />
</Grid.GestureRecognizers> </Grid.GestureRecognizers>
</Grid> --> </Grid>
<!-- <Border Style="{StaticResource Separator}" /> <Border Style="{StaticResource Separator}" />
<Grid <Grid
ColumnDefinitions="24,*,24" ColumnDefinitions="24,*,24"
@ -529,9 +529,9 @@
<Grid.GestureRecognizers> <Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding IdentityProofCommand}" /> <TapGestureRecognizer Command="{Binding IdentityProofCommand}" />
</Grid.GestureRecognizers> </Grid.GestureRecognizers>
</Grid> --> </Grid>
<!-- <Border Style="{StaticResource Separator}" /> <Border Style="{StaticResource Separator}" />
<Grid <Grid
ColumnDefinitions="24,*,24" ColumnDefinitions="24,*,24"
@ -564,7 +564,7 @@
<Grid.GestureRecognizers> <Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding PayoutsCommand}" /> <TapGestureRecognizer Command="{Binding PayoutsCommand}" />
</Grid.GestureRecognizers> </Grid.GestureRecognizers>
</Grid> --> </Grid>
<Border Style="{StaticResource Separator}" /> <Border Style="{StaticResource Separator}" />

View File

@ -136,7 +136,7 @@
BorderWidth="1" BorderWidth="1"
Command="{Binding PreviousStepCommand}" Command="{Binding PreviousStepCommand}"
CornerRadius="30" CornerRadius="30"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
FontSize="40" FontSize="40"
HeightRequest="60" HeightRequest="60"
HorizontalOptions="Start" HorizontalOptions="Start"
@ -158,7 +158,7 @@
BorderWidth="1" BorderWidth="1"
Command="{Binding NextStepCommand}" Command="{Binding NextStepCommand}"
CornerRadius="30" CornerRadius="30"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
FontSize="40" FontSize="40"
HeightRequest="60" HeightRequest="60"
HorizontalOptions="End" HorizontalOptions="End"

View File

@ -1,98 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<toolkit:Popup
x:Class="gehGassiApp.Views.Popups.PaymentInfoPopup"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:res="clr-namespace:gehGassiApp.Resources"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
CanBeDismissedByTappingOutsideOfPopup="True"
Color="Transparent">
<!-- Popup Content -->
<Border
Padding="0"
BackgroundColor="White"
StrokeShape="RoundRectangle 16"
StrokeThickness="0"
WidthRequest="350">
<!-- Drop Shadow Effect -->
<Border.Shadow>
<Shadow
Brush="{AppThemeBinding Light={StaticResource Grey_Dark},
Dark={StaticResource Grey_Dark_Dark}}"
Opacity="0.3"
Radius="8"
Offset="0,4" />
</Border.Shadow>
<Grid RowDefinitions="Auto,Auto,Auto">
<!-- Header -->
<Border
Grid.Row="0"
Padding="20,16"
BackgroundColor="{AppThemeBinding Light={StaticResource Primary_DarkBlue},
Dark={StaticResource Primary_DarkBlue_Dark}}"
StrokeShape="RoundRectangle 16,16,0,0"
StrokeThickness="0">
<Label
Style="{StaticResource H4}"
Text="Zahlungshinweis"
TextColor="{AppThemeBinding Light={StaticResource Primary_White},
Dark={StaticResource Primary_White_Dark}}"
VerticalOptions="Center" />
</Border>
<!-- Content Bereich -->
<VerticalStackLayout
Grid.Row="1"
Padding="20,20"
Spacing="16">
<!-- Info Icon -->
<Label
FontFamily="MaterialIconsRegular"
FontSize="48"
HorizontalOptions="Center"
Text="info"
TextColor="{AppThemeBinding Light={StaticResource Primary_DarkBlue},
Dark={StaticResource Primary_DarkBlue_Dark}}" />
<!-- Info Text -->
<Label
HorizontalTextAlignment="Center"
LineHeight="1.4"
Style="{StaticResource BodyM}"
Text="Leider sind diese Funktionen im Juli nicht verfügbar. Wir arbeiten aber fleißig an einer Lösung."
TextColor="{AppThemeBinding Light={StaticResource Grey_Dark},
Dark={StaticResource Grey_Dark_Dark}}" />
<!-- Additional Info -->
<Label
HorizontalTextAlignment="Center"
LineHeight="1.4"
Style="{StaticResource BodyM}"
Text="Im Juli sind nur Barzahlungen verfügbar."
TextColor="{AppThemeBinding Light={StaticResource Primary_DarkBlue},
Dark={StaticResource Primary_DarkBlue_Dark}}"
FontAttributes="Bold" />
</VerticalStackLayout>
<!-- Action Button -->
<Button
Grid.Row="2"
Margin="20,0,20,20"
BackgroundColor="{AppThemeBinding Light={StaticResource Primary_DarkBlue},
Dark={StaticResource Primary_DarkBlue_Dark}}"
Command="{Binding AcknowledgeCommand}"
CornerRadius="12"
FontAttributes="Bold"
FontSize="{StaticResource FontLabelM}"
Text="Verstanden"
TextColor="White" />
</Grid>
</Border>
</toolkit:Popup>

View File

@ -1,13 +0,0 @@
using CommunityToolkit.Maui.Views;
using gehGassiApp.ViewModels.Popups;
namespace gehGassiApp.Views.Popups;
public partial class PaymentInfoPopup : Popup
{
public PaymentInfoPopup()
{
InitializeComponent();
BindingContext = new PaymentInfoPopupViewModel(this);
}
}

View File

@ -36,7 +36,7 @@
Background="Transparent" Background="Transparent"
Command="{Binding DeclineCommand}" Command="{Binding DeclineCommand}"
FontAttributes="Bold" FontAttributes="Bold"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
FontSize="40" FontSize="40"
HorizontalOptions="End" HorizontalOptions="End"
Text="close" Text="close"
@ -53,7 +53,7 @@
<!-- Icon - Gestapelte Napf-Icons --> <!-- Icon - Gestapelte Napf-Icons -->
<Image <Image
Margin="0,0,0,-20" Margin="0,0,0,-10"
HeightRequest="120" HeightRequest="120"
HorizontalOptions="Center" HorizontalOptions="Center"
Source="coins.png" Source="coins.png"
@ -109,7 +109,7 @@
<!-- Action Button --> <!-- Action Button -->
<Button <Button
Grid.Row="2" Grid.Row="2"
Margin="30,0,30,20" Margin="30,0,30,30"
BackgroundColor="{AppThemeBinding Light={StaticResource Primary_DarkBlue}, BackgroundColor="{AppThemeBinding Light={StaticResource Primary_DarkBlue},
Dark={StaticResource Primary_DarkBlue_Dark}}" Dark={StaticResource Primary_DarkBlue_Dark}}"
Command="{Binding AcceptCommand}" Command="{Binding AcceptCommand}"

View File

@ -36,7 +36,7 @@
BackgroundColor="Transparent" BackgroundColor="Transparent"
Command="{Binding CloseCommand}" Command="{Binding CloseCommand}"
FontAttributes="Bold" FontAttributes="Bold"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
FontSize="40" FontSize="40"
HorizontalOptions="End" HorizontalOptions="End"
Style="{StaticResource LinkButton}" Style="{StaticResource LinkButton}"

View File

@ -89,7 +89,7 @@
WidthRequest="40"> WidthRequest="40">
<Button.ImageSource> <Button.ImageSource>
<FontImageSource <FontImageSource
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
Glyph="photo_camera" Glyph="photo_camera"
Size="20" Size="20"
Color="{StaticResource Primary_White}" /> Color="{StaticResource Primary_White}" />
@ -442,7 +442,7 @@
SelectedItem="{Binding SelectedMainResidence}" /> SelectedItem="{Binding SelectedMainResidence}" />
</Border> </Border>
<!-- <Grid Margin="{StaticResource MarginVerySmall}" ColumnDefinitions="*,*"> <Grid Margin="{StaticResource MarginVerySmall}" ColumnDefinitions="*,*">
<Label <Label
Grid.Column="0" Grid.Column="0"
LineBreakMode="TailTruncation" LineBreakMode="TailTruncation"
@ -467,7 +467,7 @@
<Label <Label
Margin="{StaticResource MarginBig}" Margin="{StaticResource MarginBig}"
Style="{StaticResource BodyCaption_GreyDark}" Style="{StaticResource BodyCaption_GreyDark}"
Text="{x:Static res:Text.Profile_AutoPayout_Desc}" /> --> Text="{x:Static res:Text.Profile_AutoPayout_Desc}" />
<ActivityIndicator <ActivityIndicator
HorizontalOptions="Center" HorizontalOptions="Center"

View File

@ -95,7 +95,7 @@
WidthRequest="40"> WidthRequest="40">
<Button.ImageSource> <Button.ImageSource>
<FontImageSource <FontImageSource
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
Glyph="photo_camera" Glyph="photo_camera"
Size="20" Size="20"
Color="{StaticResource Primary_White}" /> Color="{StaticResource Primary_White}" />
@ -500,7 +500,7 @@
SelectedItem="{Binding SelectedMainResidence}" /> SelectedItem="{Binding SelectedMainResidence}" />
</Border> </Border>
<!-- <Grid Margin="{StaticResource MarginVerySmall}" ColumnDefinitions="*,*"> <Grid Margin="{StaticResource MarginVerySmall}" ColumnDefinitions="*,*">
<Label <Label
Grid.Column="0" Grid.Column="0"
LineBreakMode="TailTruncation" LineBreakMode="TailTruncation"
@ -522,7 +522,7 @@
</Switch> </Switch>
</Grid> </Grid>
<Label Style="{StaticResource BodyCaption_GreyDark}" Text="{x:Static res:Text.Profile_AutoPayout_Desc}" /> --> <Label Style="{StaticResource BodyCaption_GreyDark}" Text="{x:Static res:Text.Profile_AutoPayout_Desc}" />
<ActivityIndicator <ActivityIndicator
HorizontalOptions="Center" HorizontalOptions="Center"

View File

@ -51,7 +51,7 @@
<Button <Button
Margin="0,0,-5,-35" Margin="0,0,-5,-35"
Command="{Binding NavigateBackCommand}" Command="{Binding NavigateBackCommand}"
FontFamily="MaterialIconsRegular" FontFamily="IconFont"
FontSize="30" FontSize="30"
HorizontalOptions="End" HorizontalOptions="End"
Style="{StaticResource LinkButton}" Style="{StaticResource LinkButton}"

View File

@ -45,12 +45,16 @@
<GenerateSatelliteAssembliesForCore>True</GenerateSatelliteAssembliesForCore> <GenerateSatelliteAssembliesForCore>True</GenerateSatelliteAssembliesForCore>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-android|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-android|AnyCPU'">
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<AndroidUseAapt2>True</AndroidUseAapt2> <AndroidUseAapt2>True</AndroidUseAapt2>
<AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi> <AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
<AndroidPackageFormat>apk</AndroidPackageFormat> <AndroidPackageFormat>apk</AndroidPackageFormat>
<ApplicationId>com.gehgassi.local</ApplicationId> <ApplicationId>com.gehgassi.local</ApplicationId>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='DebugStaging|net8.0-android|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='DebugStaging|net8.0-android|AnyCPU'">
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<AndroidUseAapt2>True</AndroidUseAapt2> <AndroidUseAapt2>True</AndroidUseAapt2>
<AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi> <AndroidCreatePackagePerAbi>False</AndroidCreatePackagePerAbi>
<AndroidPackageFormat>apk</AndroidPackageFormat> <AndroidPackageFormat>apk</AndroidPackageFormat>
@ -58,6 +62,8 @@
<ApplicationId>com.gehgassi.local</ApplicationId> <ApplicationId>com.gehgassi.local</ApplicationId>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-android|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-android|AnyCPU'">
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk> <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<RunAOTCompilation>True</RunAOTCompilation> <RunAOTCompilation>True</RunAOTCompilation>
<PublishTrimmed>True</PublishTrimmed> <PublishTrimmed>True</PublishTrimmed>
@ -67,6 +73,8 @@
<ApplicationId>com.gehgassi.gehgassi</ApplicationId> <ApplicationId>com.gehgassi.gehgassi</ApplicationId>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Staging|net8.0-android|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Staging|net8.0-android|AnyCPU'">
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk> <EmbedAssembliesIntoApk>True</EmbedAssembliesIntoApk>
<RunAOTCompilation>True</RunAOTCompilation> <RunAOTCompilation>True</RunAOTCompilation>
<PublishTrimmed>True</PublishTrimmed> <PublishTrimmed>True</PublishTrimmed>
@ -76,6 +84,8 @@
<ApplicationId>com.gehgassi.local</ApplicationId> <ApplicationId>com.gehgassi.local</ApplicationId>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net8.0-ios|AnyCPU'">
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<ApplicationId>com.gehgassi.local</ApplicationId> <ApplicationId>com.gehgassi.local</ApplicationId>
<MtouchDebug>True</MtouchDebug> <MtouchDebug>True</MtouchDebug>
<MtouchLink>None</MtouchLink> <MtouchLink>None</MtouchLink>
@ -84,12 +94,16 @@
<ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE> <ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='DebugStaging|net8.0-ios|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='DebugStaging|net8.0-ios|AnyCPU'">
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<ApplicationId>com.gehgassi.local</ApplicationId> <ApplicationId>com.gehgassi.local</ApplicationId>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-ios|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-ios|AnyCPU'">
<UseInterpreter>True</UseInterpreter> <UseInterpreter>True</UseInterpreter>
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<CodesignEntitlements>Platforms\iOS\Entitlements.production.plist</CodesignEntitlements> <CodesignEntitlements>Platforms\iOS\Entitlements.production.plist</CodesignEntitlements>
<CodesignKey></CodesignKey> <CodesignKey></CodesignKey>
<CodesignProvision></CodesignProvision> <CodesignProvision></CodesignProvision>
@ -99,6 +113,8 @@
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Staging|net8.0-ios|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Staging|net8.0-ios|AnyCPU'">
<ApplicationDisplayVersion>1.274</ApplicationDisplayVersion>
<ApplicationVersion>274</ApplicationVersion>
<ApplicationId>com.gehgassi.local</ApplicationId> <ApplicationId>com.gehgassi.local</ApplicationId>
</PropertyGroup> </PropertyGroup>
@ -124,13 +140,8 @@
<MauiImage Include="Resources\Images\*" /> <MauiImage Include="Resources\Images\*" />
<!-- Custom Fonts --> <!-- Custom Fonts -->
<!-- <MauiFont Include="Resources\Fonts\*" /> --> <MauiFont Include="Resources\Fonts\*" />
<!-- Durch akuellen Bug müssen alle Fonts einzeln referenziert werden: https://learn.microsoft.com/en-us/answers/questions/1684493/custom-fonts-not-working-when-uploading-maui-andro -->
<MauiFont Include="Resources\Fonts\icomoon.ttf" Alias="IconMoon" />
<MauiFont Include="Resources\Fonts\Inter-Medium.ttf" Alias="InterMedium" />
<MauiFont Include="Resources\Fonts\Inter-Regular.ttf" Alias="InterRegular" />
<MauiFont Include="Resources\Fonts\Inter-SemiBold.ttf" Alias="InterSemiBold" />
<MauiFont Include="Resources\Fonts\MaterialIcons-Regular.ttf" Alias="MaterialIconsRegular" />
<!-- Raw Assets (also remove the "Resources\Raw" prefix) --> <!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
<!-- https://github.com/dotnet/maui/issues/14044 --> <!-- https://github.com/dotnet/maui/issues/14044 -->
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" /> <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
@ -147,6 +158,10 @@
<None Remove="Platforms\Android\google-services_Live.json" /> <None Remove="Platforms\Android\google-services_Live.json" />
<None Remove="Platforms\Android\Resources\drawable\appiconpush2.svg" /> <None Remove="Platforms\Android\Resources\drawable\appiconpush2.svg" />
<None Remove="Platforms\Android\Resources\xml\auto_backup_rules.xml" /> <None Remove="Platforms\Android\Resources\xml\auto_backup_rules.xml" />
<None Remove="Resources\Fonts\icomoon.ttf" />
<None Remove="Resources\Fonts\Inter-Medium.ttf" />
<None Remove="Resources\Fonts\Inter-Regular.ttf" />
<None Remove="Resources\Fonts\Inter-SemiBold.ttf" />
<None Remove="Resources\Images\aggression_level_high.svg" /> <None Remove="Resources\Images\aggression_level_high.svg" />
<None Remove="Resources\Images\aggression_level_low.svg" /> <None Remove="Resources\Images\aggression_level_low.svg" />
<None Remove="Resources\Images\aggression_level_medium.svg" /> <None Remove="Resources\Images\aggression_level_medium.svg" />