Version 3.0.370
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.369" android:versionCode="369">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.370" android:versionCode="370">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
|
||||
<!-- Google Maps related permissions -->
|
||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace TINK.Droid
|
|||
{
|
||||
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.1.111")]
|
||||
public partial class Resource
|
||||
{
|
||||
|
||||
|
|
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>LastenradBayern</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>369</string>
|
||||
<string>370</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.369</string>
|
||||
<string>3.0.370</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -270,9 +270,6 @@
|
|||
<HintPath>..\..\..\..\.nuget\packages\xamarin.google.ios.maps\2.5.0\lib\Xamarin.iOS10\Google.Maps.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BundleResource Include="Resources\tink2.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\LockItBLE\LockItBLE.csproj">
|
||||
<Project>{bde9ce26-15cf-47da-a4f6-b6956d02d0fc}</Project>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6245" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="X5k-f2-b5h">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
|
||||
|
@ -42,6 +42,5 @@
|
|||
<image name="Icon-76.png" width="76" height="76"/>
|
||||
<image name="Icon-Small-40.png" width="40" height="40"/>
|
||||
<image name="Icon-Small.png" width="29" height="29"/>
|
||||
<image name="tink2.png" width="208" height="208"/>
|
||||
</resources>
|
||||
</document>
|
||||
</document>
|
||||
|
|
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 582 B |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 344 KiB |
Before Width: | Height: | Size: 451 KiB |
Before Width: | Height: | Size: 1,004 KiB |
Before Width: | Height: | Size: 356 KiB |
Before Width: | Height: | Size: 804 KiB |
Before Width: | Height: | Size: 283 KiB |
Before Width: | Height: | Size: 399 KiB |
Before Width: | Height: | Size: 500 KiB |
Before Width: | Height: | Size: 886 KiB |
Before Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 457 KiB |
Before Width: | Height: | Size: 396 KiB |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 388 KiB |
Before Width: | Height: | Size: 997 KiB |
Before Width: | Height: | Size: 352 KiB |
Before Width: | Height: | Size: 488 KiB |
Before Width: | Height: | Size: 622 KiB |
Before Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 600 KiB |
Before Width: | Height: | Size: 965 KiB |
Before Width: | Height: | Size: 338 KiB |
|
@ -20,11 +20,11 @@
|
|||
<Label Text="{Binding LoggedInInfo}" />
|
||||
<Label IsVisible="{Binding IsBookingStateInfoVisible}"
|
||||
Text="{Binding BookingStateInfo}" />
|
||||
<Button Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"
|
||||
<Button Text="{x:Static resources:AppResources.MarkingAccountPageManagePersonalData}"
|
||||
Command="{Binding OnManageAccount}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
|
||||
Text="{x:Static resources:AppResources.MarkingAccountPageManageLogout}"
|
||||
Command="{Binding OnLogoutRequest}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
</StackLayout>
|
||||
|
|
|
@ -24,6 +24,7 @@ namespace TINK.View.BikesAtStation
|
|||
using TINK.ViewModel.Bikes;
|
||||
using Xamarin.CommunityToolkit.Extensions;
|
||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
|
||||
using TINK.MultilingualResources;
|
||||
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
#if USEFLYOUT
|
||||
|
@ -110,7 +111,12 @@ namespace TINK.View.BikesAtStation
|
|||
catch (Exception exception)
|
||||
{
|
||||
Log.ForContext<BikesAtStationPage>().Error("Displaying bikes at station page failed. {Exception}", exception);
|
||||
await DisplayAlert("Fehler", $"Seite Räder an Station kann nicht angezeigt werden. ${exception.Message}", "OK");
|
||||
|
||||
await DisplayAlert(
|
||||
AppResources.ErrorPageNotLoadedTitle,
|
||||
$"{AppResources.ErrorPageNotLoaded}\r\n{exception.Message}",
|
||||
AppResources.MessageAnswerOk);
|
||||
|
||||
isInitializationStarted = false;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
|
||||
</StackLayout>
|
||||
|
||||
<!--Contact operator of selected station-->
|
||||
<!--contact customer support of selected station-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}">
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<Shell.TitleView>
|
||||
<Grid ColumnDefinitions="Auto, 1*">
|
||||
<Label Style="{StaticResource Label-Navbar}"
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"/>
|
||||
Text="{x:Static resources:AppResources.MarkingAccountPageManagePersonalData}"/>
|
||||
</Grid>
|
||||
</Shell.TitleView>
|
||||
<ContentPage.Content>
|
||||
|
|
|
@ -5,6 +5,7 @@ using Serilog;
|
|||
using TINK.Model;
|
||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
|
||||
using TINK.Model.Device;
|
||||
using TINK.MultilingualResources;
|
||||
using TINK.ViewModel.FindBike;
|
||||
using Xamarin.CommunityToolkit.Extensions;
|
||||
using Xamarin.Forms;
|
||||
|
@ -65,7 +66,10 @@ namespace TINK.View.FindBike
|
|||
catch (Exception exception)
|
||||
{
|
||||
Log.ForContext<FindBikePage>().Error("Displaying bikes at station page failed. {Exception}", exception);
|
||||
await DisplayAlert("Fehler", $"Seite Fahrrad Wählen kann nicht angezeigt werden. ${exception.Message}", "OK");
|
||||
await DisplayAlert(
|
||||
AppResources.ErrorPageNotLoadedTitle,
|
||||
$"{AppResources.ErrorPageNotLoaded}\r\n{exception.Message}",
|
||||
AppResources.MessageAnswerOk);
|
||||
return;
|
||||
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ namespace TINK.View.MyBikes
|
|||
using TINK.Model;
|
||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
|
||||
using TINK.Model.Device;
|
||||
using TINK.MultilingualResources;
|
||||
using TINK.ViewModel.MyBikes;
|
||||
using Xamarin.CommunityToolkit.Extensions;
|
||||
|
||||
|
@ -78,7 +79,10 @@ namespace TINK.View.MyBikes
|
|||
catch (Exception exception)
|
||||
{
|
||||
Log.ForContext<MyBikesPage>().Error("Displaying bikes at station page failed. {Exception}", exception);
|
||||
await DisplayAlert("Fehler", $"Seite Räder an Station kann nicht angezeigt werden. ${exception.Message}", "OK");
|
||||
await DisplayAlert(
|
||||
AppResources.ErrorPageNotLoadedTitle,
|
||||
$"{AppResources.ErrorPageNotLoaded}\r\n{exception.Message}",
|
||||
AppResources.MessageAnswerOk);
|
||||
isInitializationStarted = false;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
/// <summary> Manages a single lock.</summary>
|
||||
public abstract class LockItBase : ILockService
|
||||
{
|
||||
/// <summary> Lenght of seed in bytes.</summary>
|
||||
/// <summary> Length of seed in bytes.</summary>
|
||||
private const int SEEDLENGTH = 16;
|
||||
|
||||
/// <summary> Timeout for open/ close operations.</summary>
|
||||
|
@ -160,7 +160,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting activate lock charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting activate lock characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception($"Can not get activate characteristic. {exception.Message}", exception);
|
||||
}
|
||||
|
||||
|
@ -184,7 +184,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting alarm-charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting alarm-characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception($"Can not get alarm characteristic. {exception.Message}", exception);
|
||||
}
|
||||
|
||||
|
@ -207,7 +207,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting alarm settings charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting alarm settings characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception($"Can not get alarm settings characteristic. {exception.Message}", exception);
|
||||
}
|
||||
|
||||
|
@ -229,7 +229,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting auth-charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting auth-characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception(string.Format("Can not get auth characteristic. {0}", exception.Message), exception);
|
||||
}
|
||||
|
||||
|
@ -251,7 +251,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting state charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting state characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception(string.Format("Can not get state characteristic. {0}", exception.Message), exception);
|
||||
}
|
||||
|
||||
|
@ -273,7 +273,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting sound charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting sound characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception($"Can not get sound characteristic. {exception.Message}", exception);
|
||||
}
|
||||
|
||||
|
@ -295,7 +295,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting battery charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting battery characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception($"Can not get battery characteristic. {exception.Message}", exception);
|
||||
}
|
||||
|
||||
|
@ -317,7 +317,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
catch (System.Exception exception)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Error("Getting versions info charcteristic failed. {Exception}", exception);
|
||||
Log.ForContext<LockItBase>().Error("Getting versions info characteristic failed. {Exception}", exception);
|
||||
throw new System.Exception(string.Format("Can not get versions info characteristic. {0}", exception.Message), exception);
|
||||
}
|
||||
|
||||
|
@ -349,10 +349,10 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
return;
|
||||
}
|
||||
|
||||
/// <summary> Full idvertisement name.</summary>
|
||||
/// <summary> Full advertisement name.</summary>
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
|
||||
/// <summary> Id part of idvertisement name.</summary>
|
||||
/// <summary> Id part of advertisement name.</summary>
|
||||
public int Id { get; private set; }
|
||||
|
||||
/// <summary> Query GUID of lock.</summary>
|
||||
|
@ -603,12 +603,12 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
LockInfoAuthTdo lockInfo,
|
||||
ICipher cipher)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Debug($"Request to autenticate for {lockIt.Name}.");
|
||||
Log.ForContext<LockItBase>().Debug($"Request to authenticate for {lockIt.Name}.");
|
||||
|
||||
var authCharacteristic = await lockIt.GetAuthCharacteristicAsync();
|
||||
if (authCharacteristic == null)
|
||||
{
|
||||
Log.ForContext<LockItBase>().Debug("Getting auth-charcteristic failed.");
|
||||
Log.ForContext<LockItBase>().Debug("Getting auth-characteristic failed.");
|
||||
throw new CoundntGetCharacteristicException("Authentication failed. Auth characteristic must not be null.");
|
||||
}
|
||||
|
||||
|
@ -687,14 +687,14 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
/// <summary> Gets the lock state like locking state (open/ close). </summary>
|
||||
/// <param name="doWaitRetry">True if to wait and retry in case of failures. </param>
|
||||
/// <remarks>
|
||||
/// Lock state is first byte of of value read from state characteristic ("0000baaa-1212-efde-1523-785fef13d123").
|
||||
/// Lock state is first byte of value read from state characteristic ("0000baaa-1212-efde-1523-785fef13d123").
|
||||
/// Values are as follows
|
||||
/// Open = 0x00,
|
||||
/// Closed = 0x01,
|
||||
/// Unknown = 0x02,
|
||||
/// CouldntCloseMoving = 0x03,
|
||||
/// CouldntOpenBoldBlocked = 0x04,
|
||||
/// CouldntCloseBoldBlocked = 0x05
|
||||
/// CouldntOpenBoltBlocked = 0x04,
|
||||
/// CouldntCloseBoltBlocked = 0x05
|
||||
/// TINK.Services.BluetoothLock.Tdo.LockitLockingState.
|
||||
/// </remarks>
|
||||
/// <returns> Lock state.</returns>
|
||||
|
@ -750,6 +750,8 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
|
||||
byte[] state;
|
||||
|
||||
// Reads the lock state from characteristic
|
||||
async Task<byte[]> readAsyncDelegate()
|
||||
{
|
||||
var cts = new CancellationTokenSource();
|
||||
|
@ -786,11 +788,12 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
throw new System.Exception("Can not get lock state. No data read");
|
||||
}
|
||||
|
||||
int lockingState = state[0];
|
||||
var lockInfoTdo = new LockInfoTdo.Builder
|
||||
{
|
||||
Id = Id,
|
||||
Guid = Guid,
|
||||
State = (LockitLockingState?)state[0]
|
||||
State = Enum.IsDefined(typeof(LockitLockingState), lockingState) ? (LockitLockingState?) lockingState : null
|
||||
}.Build();
|
||||
|
||||
Log.ForContext<LockItBase>().Debug("Retrieving lock state (ReadAsync-call) succeeded. {@LockInfoTdo}{StateCharacteristic}{Reading}",
|
||||
|
@ -1251,6 +1254,6 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
=> charcteristic.Id.ToString();
|
||||
|
||||
private static string ToSerilogString(byte[] byteArray)
|
||||
=> "***"; // For debugging purposes it might be required to return string.Join(",", byteArray); Do not log any confidental value in production context.
|
||||
=> "***"; // For debugging purposes it might be required to return string.Join(",", byteArray); Do not log any confidential value in production context.
|
||||
}
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
Log.ForContext<LockItEventBased>().Information($"Lock was opened successfully.");
|
||||
return lockingState.Value;
|
||||
|
||||
case LockitLockingState.CouldntOpenBoldBlocked:
|
||||
case LockitLockingState.CouldntOpenBoltBlocked:
|
||||
// Expected error. ILockIt count not be opened (Spoke blocks lock, ....)
|
||||
Log.ForContext<LockItEventBased>().Debug($"Opening lock failed. Bold is blocked.");
|
||||
throw new CouldntOpenBoldIsBlockedException();
|
||||
|
@ -161,7 +161,7 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
// Comprises values
|
||||
// - LockitLockingState.Closed
|
||||
// - LockitLockingState.Unknown
|
||||
// - LockitLockingState.CouldntOpenBoldBlocked
|
||||
// - LockitLockingState.CouldntOpenBoltBlocked
|
||||
// Internal error which should never occur. Lock refuses to open but connection is ok.
|
||||
Log.ForContext<LockItEventBased>().Debug($"Opening lock failed. Unexpected lock state {lockingState.Value.GetLockingState()} detected.");
|
||||
throw new CouldntOpenInconsistentStateExecption(lockingState.Value.GetLockingState());
|
||||
|
@ -256,10 +256,10 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
|
||||
switch (lockingState.Value)
|
||||
{
|
||||
case LockitLockingState.CouldntCloseBoldBlocked:
|
||||
case LockitLockingState.CouldntCloseBoltBlocked:
|
||||
// Expected error. ILockIt could not be closed (Spoke blocks lock, ....)
|
||||
Log.ForContext<LockItEventBased>().Debug($"Closing lock failed. Bold is blocked.");
|
||||
throw new CouldntCloseBoldBlockedException();
|
||||
throw new CouldntCloseBoltBlockedException();
|
||||
|
||||
case LockitLockingState.CouldntCloseMoving:
|
||||
// Expected error. ILockIt could not be closed (bike is moving)
|
||||
|
@ -273,13 +273,13 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
case LockitLockingState.Open:
|
||||
// Expected error. ILockIt could not be closed. Bolt was blocked but was opened again.
|
||||
Log.ForContext<LockItPolling>().Debug($"Closing lock failed. Bold is blocked but was reopened again.");
|
||||
throw new CouldntCloseBoldBlockedException(LockingState.Open);
|
||||
throw new CouldntCloseBoltBlockedException(LockingState.Open);
|
||||
|
||||
default:
|
||||
// Comprises values
|
||||
// - LockitLockingState.Open
|
||||
// - LockitLockingState.Unknown
|
||||
// - LockitLockingState.CouldntOpenBoldBlocked
|
||||
// - LockitLockingState.CouldntOpenBoltBlocked
|
||||
// Internal error which should never occur. Lock refuses to close but connection is ok.
|
||||
Log.ForContext<LockItEventBased>().Debug($"Opening lock failed. Unexpected lock state {lockingState.Value.GetLockingState()} detected.");
|
||||
throw new CouldntCloseInconsistentStateExecption(lockingState.Value.GetLockingState());
|
||||
|
|
|
@ -55,34 +55,35 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
}
|
||||
|
||||
var info = await GetLockStateAsync();
|
||||
if (info?.State == null)
|
||||
if (!(info?.State is LockitLockingState initialLockingState))
|
||||
{
|
||||
// Device not reachable.
|
||||
Log.ForContext<LockItPolling>().Information("Can not open lock. Device is not reachable (get state).");
|
||||
return await Task.FromResult((LockitLockingState?)null);
|
||||
}
|
||||
|
||||
if (info.State.Value.GetLockingState() == LockingState.Open)
|
||||
if (initialLockingState.GetLockingState() == LockingState.Open)
|
||||
{
|
||||
// Lock is already open.
|
||||
Log.ForContext<LockItPolling>().Information("No need to open lock. Lock is already open.");
|
||||
return await Task.FromResult((LockitLockingState?)null);
|
||||
}
|
||||
|
||||
|
||||
Log.ForContext<LockItPolling>().Debug($"Request to open lock. Current locking state is {info}, counter value {ActivateLockWriteCounter}.");
|
||||
|
||||
// Send command to open to lock.
|
||||
var result = await OpenCloseLockAsync(
|
||||
true); // Close lock);
|
||||
true /* Close lock*/ );
|
||||
|
||||
if (!result)
|
||||
{
|
||||
// State did not change. Return previous state.
|
||||
Log.ForContext<LockItPolling>().Information($"Opening lock failed.");
|
||||
return await Task.FromResult(info.State.Value);
|
||||
return await Task.FromResult(initialLockingState);
|
||||
}
|
||||
|
||||
info = await GetLockStateAsync();
|
||||
if (info?.State == null)
|
||||
var subsequentLockingStateNullable = (await GetLockStateAsync()).State;
|
||||
if (subsequentLockingStateNullable == null)
|
||||
{
|
||||
// Device not reachable.
|
||||
Log.ForContext<LockItPolling>().Information($"State after open command unknown. Device is not reachable (get state).");
|
||||
|
@ -92,28 +93,28 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
var watch = new Stopwatch();
|
||||
watch.Start();
|
||||
|
||||
while (info?.State != null
|
||||
&& info.State.Value != LockitLockingState.CouldntOpenBoldBlocked
|
||||
&& info.State.Value != LockitLockingState.Open
|
||||
while (subsequentLockingStateNullable != null
|
||||
&& subsequentLockingStateNullable != LockitLockingState.CouldntOpenBoltBlocked
|
||||
&& subsequentLockingStateNullable != LockitLockingState.Open
|
||||
&& watch.Elapsed < TimeSpan.FromMilliseconds(OPEN_CLOSE_TIMEOUT_MS))
|
||||
{
|
||||
info = await GetLockStateAsync(true); // While opening lock seems not always respond to reading operations.
|
||||
Log.ForContext<LockItPolling>().Debug($"Waiting for lock to open. Current lock state is {info?.State.Value}.");
|
||||
subsequentLockingStateNullable = (await GetLockStateAsync(true)).State; // While opening lock seems not always respond to reading operations.
|
||||
Log.ForContext<LockItPolling>().Debug($"Waiting for lock to open. Current lock state is {subsequentLockingStateNullable}.");
|
||||
}
|
||||
|
||||
if (info == null)
|
||||
if (!(subsequentLockingStateNullable is LockitLockingState subsequentLockingState))
|
||||
{
|
||||
Log.ForContext<LockItPolling>().Fatal($"Opening lock failed. State object is null.");
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (info.State.Value)
|
||||
switch (subsequentLockingState)
|
||||
{
|
||||
case LockitLockingState.Open:
|
||||
Log.ForContext<LockItPolling>().Information($"Lock was opened successfully.");
|
||||
return info.State.Value;
|
||||
return subsequentLockingState;
|
||||
|
||||
case LockitLockingState.CouldntOpenBoldBlocked:
|
||||
case LockitLockingState.CouldntOpenBoltBlocked:
|
||||
// Expected error. ILockIt count not be opened (Spoke blocks lock, ....)
|
||||
Log.ForContext<LockItPolling>().Debug($"Opening lock failed. Bold is blocked.");
|
||||
throw new CouldntOpenBoldIsBlockedException();
|
||||
|
@ -127,10 +128,10 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
// Comprises values
|
||||
// - LockitLockingState.Closed
|
||||
// - LockitLockingState.CouldntCloseMoving (should never happen because command open was send)
|
||||
// - LockitLockingState.CouldntCloseBoldBlocked (should never happen because command open was send)
|
||||
// - LockitLockingState.CouldntCloseBoltBlocked (should never happen because command open was send)
|
||||
// Internal error which should never occur. Lock refuses to open but connection is ok.
|
||||
Log.ForContext<LockItPolling>().Debug($"Opening lock failed. Unexpected lock state {info.State.Value.GetLockingState()} detected.");
|
||||
throw new CouldntOpenInconsistentStateExecption(info.State.Value.GetLockingState());
|
||||
Log.ForContext<LockItPolling>().Debug($"Opening lock failed. Unexpected lock state {subsequentLockingState.GetLockingState()} detected.");
|
||||
throw new CouldntOpenInconsistentStateExecption(subsequentLockingState.GetLockingState());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -145,33 +146,35 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
|
||||
// Get current state
|
||||
var info = await GetLockStateAsync();
|
||||
if (info?.State == null)
|
||||
if (!(info?.State is LockitLockingState initialLockingState))
|
||||
{
|
||||
// Device not reachable.
|
||||
Log.ForContext<LockItPolling>().Error("Can not close lock. Device is not reachable (get state).");
|
||||
return await Task.FromResult((LockitLockingState?)null);
|
||||
}
|
||||
|
||||
if (info.State.Value.GetLockingState() == LockingState.Closed)
|
||||
if (initialLockingState.GetLockingState() == LockingState.Closed)
|
||||
{
|
||||
// Lock is already closed.
|
||||
Log.ForContext<LockItPolling>().Error("No need to close lock. Lock is already closed.");
|
||||
return await Task.FromResult(info.State.Value);
|
||||
return await Task.FromResult(initialLockingState);
|
||||
}
|
||||
|
||||
Log.ForContext<LockItPolling>().Debug($"Request to close lock. Current locking state is {info}, counter value {ActivateLockWriteCounter}.");
|
||||
|
||||
var result = await OpenCloseLockAsync(false); // Close lock
|
||||
// Send command to close to lock.
|
||||
var result = await OpenCloseLockAsync(
|
||||
false /*Close lock*/);
|
||||
if (!result)
|
||||
{
|
||||
// State did not change. Return previous state.
|
||||
Log.ForContext<LockItPolling>().Information($"Closing lock failed.");
|
||||
return await Task.FromResult(info.State.Value);
|
||||
return await Task.FromResult(initialLockingState);
|
||||
}
|
||||
|
||||
// Get lock state until either lock state chaneges or until log gets unreachable.
|
||||
info = await GetLockStateAsync();
|
||||
if (info?.State == null)
|
||||
// Get lock state until either lock state changes or until log gets unreachable.
|
||||
var subsequentLockingStateNullable = (await GetLockStateAsync()).State;
|
||||
if (subsequentLockingStateNullable == null)
|
||||
{
|
||||
// Device not reachable.
|
||||
Log.ForContext<LockItPolling>().Information($"Lock state after close command unknown.");
|
||||
|
@ -182,14 +185,14 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
watch.Start();
|
||||
|
||||
var hasBeenLocked = false;
|
||||
while (info.State != null
|
||||
&& info.State.Value != LockitLockingState.CouldntCloseMoving
|
||||
&& info.State.Value != LockitLockingState.Closed
|
||||
while (subsequentLockingStateNullable != null
|
||||
&& subsequentLockingStateNullable != LockitLockingState.CouldntCloseMoving
|
||||
&& subsequentLockingStateNullable != LockitLockingState.Closed
|
||||
&& watch.Elapsed < TimeSpan.FromMilliseconds(OPEN_CLOSE_TIMEOUT_MS))
|
||||
{
|
||||
info = await GetLockStateAsync(true); ; // While closing lock seems not always respond to reading operations.
|
||||
subsequentLockingStateNullable = (await GetLockStateAsync(true)).State; ; // While closing lock seems not always respond to reading operations.
|
||||
|
||||
if (info.State.Value == LockitLockingState.CouldntCloseBoldBlocked)
|
||||
if (subsequentLockingStateNullable == LockitLockingState.CouldntCloseBoltBlocked)
|
||||
{
|
||||
// Lock reported a blocked bold.
|
||||
hasBeenLocked = true;
|
||||
|
@ -197,14 +200,14 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
continue;
|
||||
}
|
||||
|
||||
if (hasBeenLocked && info.State.Value == LockitLockingState.Open)
|
||||
if (hasBeenLocked && subsequentLockingStateNullable == LockitLockingState.Open)
|
||||
{
|
||||
// ILockIt could not be closed. Bolt was blocked but was opened again.
|
||||
Log.ForContext<LockItPolling>().Debug($"Closing lock failed. Bold was blocked and lock was reopened.");
|
||||
throw new CouldntCloseBoldBlockedException(LockingState.Open);
|
||||
throw new CouldntCloseBoltBlockedException(LockingState.Open);
|
||||
}
|
||||
|
||||
Log.ForContext<LockItPolling>().Debug($"Waiting for lock to close. Current lock state is {info?.State.Value}.");
|
||||
Log.ForContext<LockItPolling>().Debug($"Waiting for lock to close. Current lock state is {subsequentLockingStateNullable}.");
|
||||
}
|
||||
|
||||
if (info == null)
|
||||
|
@ -213,12 +216,19 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
return null;
|
||||
}
|
||||
|
||||
switch (info.State.Value)
|
||||
if (!(subsequentLockingStateNullable is LockitLockingState subsequentLockingState))
|
||||
{
|
||||
case LockitLockingState.CouldntCloseBoldBlocked:
|
||||
// Device not reachable.
|
||||
Log.ForContext<LockItPolling>().Information($"Lock state after close command unknown.");
|
||||
return await Task.FromResult((LockitLockingState?)null);
|
||||
}
|
||||
|
||||
switch (subsequentLockingState)
|
||||
{
|
||||
case LockitLockingState.CouldntCloseBoltBlocked:
|
||||
// Expected error. ILockIt could not be closed (Spoke blocks lock, ....)
|
||||
Log.ForContext<LockItPolling>().Debug($"Closing lock failed. Bold is blocked.");
|
||||
throw new CouldntCloseBoldBlockedException();
|
||||
throw new CouldntCloseBoltBlockedException();
|
||||
|
||||
case LockitLockingState.CouldntCloseMoving:
|
||||
// Expected error. ILockIt could not be closed (bike is moving)
|
||||
|
@ -228,16 +238,16 @@ namespace TINK.Services.BluetoothLock.BLE
|
|||
case LockitLockingState.Closed:
|
||||
// Everything is ok.
|
||||
Log.ForContext<LockItPolling>().Information($"Lock was closed successfully.");
|
||||
return info.State.Value;
|
||||
return subsequentLockingState;
|
||||
|
||||
default:
|
||||
// Comprises values
|
||||
// - LockitLockingState.Open
|
||||
// - LockitLockingState.Unknown
|
||||
// - LockitLockingState.CouldntOpenBoldBlocked
|
||||
// - LockitLockingState.CouldntOpenBoltBlocked
|
||||
// Internal error which should never occur. Lock refuses to close but connection is ok.
|
||||
Log.ForContext<LockItPolling>().Debug($"Closing lock failed. Unexpected lock state {info.State.Value.GetLockingState()} detected.");
|
||||
throw new CouldntCloseInconsistentStateExecption(info.State.Value.GetLockingState());
|
||||
Log.ForContext<LockItPolling>().Debug($"Closing lock failed. Unexpected lock state {subsequentLockingState.GetLockingState()} detected.");
|
||||
throw new CouldntCloseInconsistentStateExecption(subsequentLockingState.GetLockingState());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,54 +6,57 @@
|
|||
</header>
|
||||
<body>
|
||||
<group id="LOCKITSHARED/MULTILINGUALRESOURCES/RESOURCES.RESX" datatype="resx">
|
||||
<trans-unit id="ErrorCloseLockUnexpectedState" translate="yes" xml:space="preserve">
|
||||
<source>Unexpected locking state "{0}" detected after sending close command.</source>
|
||||
<target state="translated">Unerwarteter Schlosszustand "{0}" gemeldet nach Ausführung des Abschließen-Befehls.</target>
|
||||
<trans-unit id="LockItExceptionCloseLockUnknownPosition" translate="yes" xml:space="preserve">
|
||||
<source>Lock reports unknown bold position. Lock could be closed or open. Please try again or contact customer support.</source>
|
||||
<target state="translated">Das Schloss meldet unbekannte Position des Schlossbügels. Das Schloss könnte geschlossen oder offen sein. Bitte versuchen Sie es erneut oder melden Sie das Fahrrad dem Betreiber!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorCloseLockUnknownPosition" translate="yes" xml:space="preserve">
|
||||
<source>Lock reports unknown bold position.</source>
|
||||
<target state="translated">Schloss meldet unbekannten Schließzustand.</target>
|
||||
<trans-unit id="LockItExceptionOpenLockUnexpectedState" translate="yes" xml:space="preserve">
|
||||
<source>Unexpected locking state "{0}" detected after sending open command. Please try again or contact customer support.</source>
|
||||
<target state="translated">Unerwarteter Schlosszustand "{0}" nach Ausführen des Öffnen-Befehls erkannt. Bitte versuchen Sie es erneut oder kontaktieren Sie den Kundensupport.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorOpenLockUnexpectedState" translate="yes" xml:space="preserve">
|
||||
<source>Unexpected locking state "{0}" detected after sending open command.</source>
|
||||
<target state="translated">Unerwarteter Schlosszustand "{0}" gemeldet nach Ausführen des Öffnen-Befehls.</target>
|
||||
<trans-unit id="LockItExceptionBluetoothDisconnected" translate="yes" xml:space="preserve">
|
||||
<source>Bluetooth connection to the lock could not be established. Activate Bluetooth and try again.</source>
|
||||
<target state="translated">Es konnte keine Bluetooth-Verbindung zum Schloss hergestellt werden. Aktivieren Sie Bluetooth und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorBluetoothDisconnectedException" translate="yes" xml:space="preserve">
|
||||
<source>No bluetooth connection.</source>
|
||||
<target state="translated">Keine Bluetooth-Verbindung.</target>
|
||||
<trans-unit id="LockItExceptionCloseLockMoving" translate="yes" xml:space="preserve">
|
||||
<source>The process is motion sensitive. Step close to the lock, do not move, and try again.</source>
|
||||
<target state="translated">Der Vorgang ist bewegungssensibel. Treten Sie nah an das Schloss heran, bewegen Sie sich nicht und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorCloseLockBikeMoving" translate="yes" xml:space="preserve">
|
||||
<source>Bike is moving.</source>
|
||||
<target state="translated">Rad ist in Bewegung.</target>
|
||||
<trans-unit id="LockItExceptionOpenLockBoldWasBlocked" translate="yes" xml:space="preserve">
|
||||
<source>Bolt was blocked. Make sure that no spoke presses against the lock bolt and try again.</source>
|
||||
<target state="translated">Der Schlossbügel war blockiert. Stellen Sie sicher, dass keine Speiche oder anderer Gegenstand das Schloss blockiert und wiederholen Sie den Vorgang.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorCloseLockBoldBlocked" translate="yes" xml:space="preserve">
|
||||
<source>Bold is blocked.</source>
|
||||
<target state="translated">Schloss ist blockiert.</target>
|
||||
<trans-unit id="LockItExceptionConnectLockBluetoothNotOnException" translate="yes" xml:space="preserve">
|
||||
<source>Bluetooth connection to the lock could not be established. Current Blutooth status is {0}. Activate Bluetooth and try again.</source>
|
||||
<target state="translated">Es kann keine Bluetooth-Verbindung hergestellt werden. Der aktuelle Blutooth-Status ist {0}. Aktivieren Sie Bluetooth und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorOpenLockBoldBlocked" translate="yes" xml:space="preserve">
|
||||
<source>Bold is blocked.</source>
|
||||
<target state="translated">Schloss ist blockiert.</target>
|
||||
<trans-unit id="LockItExceptionConnectLockBluetoothOffException" translate="yes" xml:space="preserve">
|
||||
<source>Bluetooth connection to the lock could not be established. Activate Bluetooth and try again.</source>
|
||||
<target state="translated">Es kann keine Bluetooth-Verbindung hergestellt werden. Aktivieren Sie Bluetooth und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorOpenLockBoldWasBlocked" translate="yes" xml:space="preserve">
|
||||
<source>Bold was or is blocked.</source>
|
||||
<target state="needs-review-translation">Schloss war oder ist blockiert.</target>
|
||||
<note from="MultilingualUpdate" annotates="source" priority="2">Please verify the translation’s accuracy as the source string was updated after it was translated.</note>
|
||||
<trans-unit id="LockItExceptionConnectLockLocationOffException" translate="yes" xml:space="preserve">
|
||||
<source>Connection to the lock could not be established. Activate Location services and try again.</source>
|
||||
<target state="translated">Es konnte keine Verbindung zum Schloss hergestellt werden. Aktivieren Sie die Standortdienste und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorConnectLockBluetoothNotOnException" translate="yes" xml:space="preserve">
|
||||
<source>Can not connect to lock. Unexpected bluetooth state {0} detected.</source>
|
||||
<target state="translated">Kann keine Verbindung zum Schloss herstellen. Unerwarteter Bluetooth-Status {0} erkannt.</target>
|
||||
<trans-unit id="LockItExceptionConnectLockLocationPermissingMissingException" translate="yes" xml:space="preserve">
|
||||
<source>Connection to the lock could not be established. Grant Location permission, activate Location services and try again.</source>
|
||||
<target state="translated">Es konnte keine Verbindung zum Schloss hergestellt werden. Erlauben Sie den Standort-Zugriff, aktivieren Sie die Standortdienste und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorConnectLockBluetoothOffException" translate="yes" xml:space="preserve">
|
||||
<source>Can not connect to lock. Bluetooth is off but has to be turned on.</source>
|
||||
<target state="translated">Kann keine Verbindung zum Schloss herstellen. Bluetooth ist aus und sollte aber angeschalten sein.</target>
|
||||
<trans-unit id="LockItExceptionOpenLockBoldStatusIsUnknown" translate="yes" xml:space="preserve">
|
||||
<source>Position of lock bolt is unknown. Lock could be closed or open. Please try again or contact customer support.</source>
|
||||
<target state="translated">Position des Schlossbügels ist unbekannt. Schloss könnte geschlossen oder offen sein. Bitte versuchen Sie es erneut oder kontaktieren Sie den Kundensupport.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorConnectLockLocationOffException" translate="yes" xml:space="preserve">
|
||||
<source>Can not connect to lock. Location is off but has to be turned on.</source>
|
||||
<target state="translated">Kann keine Verbindung zum Schloss herstellen. Standortbestimmung ist deaktiviert, sollte aber aktiviert sein.</target>
|
||||
<trans-unit id="LockItExceptionCloseLockBoltBlocked" translate="yes" xml:space="preserve">
|
||||
<source>Lock bolt is blocked. Make sure that no spoke or any other obstacle prevents the lock from closing and try again.</source>
|
||||
<target state="translated">Der Schlossbügel ist blockiert. Stellen Sie sicher, dass keine Speiche oder ein anderes Hindernis das Schließen des Schlosses verhindert, und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="ErrorConnectLockLocationPermissingMissingException" translate="yes" xml:space="preserve">
|
||||
<source>Can not connect to lock. Location permission is required but not granted. </source>
|
||||
<target state="translated">Kann keine Verbindung zum Schloss herstellen. Standort-Zugriffserlaubnis muss erteilt sein wurde aber nicht erteilt. </target>
|
||||
<trans-unit id="LockItExceptionOpenLockBoltBlocked" translate="yes" xml:space="preserve">
|
||||
<source>Lock bolt is blocked. Make sure that no spoke presses against the lock bolt and try again.</source>
|
||||
<target state="translated">Der Schlossbügel ist blockiert. Stellen Sie sicher, dass keine Speiche gegen den Bügel drückt und versuchen Sie es erneut.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="LockItExceptionCloseLockUnexpectedLockState" translate="yes" xml:space="preserve">
|
||||
<source>Unexpected locking state "{0}" detected after sending close command. Please try again or contact customer support.</source>
|
||||
<target state="translated">Unerwarteter Schlosszustand "{0}" nach Senden des Schließbefehls festgestellt. Bitte versuchen Sie es erneut oder kontaktieren Sie den Kundensupport.</target>
|
||||
</trans-unit>
|
||||
</group>
|
||||
</body>
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace TINK.MultilingualResources {
|
|||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
@ -61,110 +61,119 @@ namespace TINK.MultilingualResources {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to No bluetooth connection..
|
||||
/// Looks up a localized string similar to Bluetooth connection to the lock could not be established. Activate Bluetooth and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorBluetoothDisconnectedException {
|
||||
internal static string LockItExceptionBluetoothDisconnected {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorBluetoothDisconnectedException", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionBluetoothDisconnected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bike is moving..
|
||||
/// Looks up a localized string similar to Lock bolt is blocked. Make sure that no spoke or any other obstacle prevents the lock from closing and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorCloseLockBikeMoving {
|
||||
internal static string LockItExceptionCloseLockBoltBlocked {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorCloseLockBikeMoving", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionCloseLockBoltBlocked", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bold is blocked..
|
||||
/// Looks up a localized string similar to The process is motion sensitive. Step close to the lock, do not move, and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorCloseLockBoldBlocked {
|
||||
internal static string LockItExceptionCloseLockMoving {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorCloseLockBoldBlocked", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionCloseLockMoving", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Unexpected locking state "{0}" detected after sending close command..
|
||||
/// Looks up a localized string similar to Unexpected locking state "{0}" detected after sending close command. Please try again or contact customer support..
|
||||
/// </summary>
|
||||
internal static string ErrorCloseLockUnexpectedState {
|
||||
internal static string LockItExceptionCloseLockUnexpectedLockState {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorCloseLockUnexpectedState", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionCloseLockUnexpectedLockState", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Lock reports unknown bold position..
|
||||
/// Looks up a localized string similar to Lock reports unknown bold position. Lock could be closed or open. Please try again or contact customer support..
|
||||
/// </summary>
|
||||
internal static string ErrorCloseLockUnknownPosition {
|
||||
internal static string LockItExceptionCloseLockUnknownPosition {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorCloseLockUnknownPosition", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionCloseLockUnknownPosition", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can not connect to lock. Unexpected bluetooth state {0} detected..
|
||||
/// Looks up a localized string similar to Bluetooth connection to the lock could not be established. Current Blutooth status is {0}. Activate Bluetooth and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorConnectLockBluetoothNotOnException {
|
||||
internal static string LockItExceptionConnectLockBluetoothNotOnException {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorConnectLockBluetoothNotOnException", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionConnectLockBluetoothNotOnException", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can not connect to lock. Bluetooth is off but has to be turned on..
|
||||
/// Looks up a localized string similar to Bluetooth connection to the lock could not be established. Activate Bluetooth and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorConnectLockBluetoothOffException {
|
||||
internal static string LockItExceptionConnectLockBluetoothOffException {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorConnectLockBluetoothOffException", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionConnectLockBluetoothOffException", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can not connect to lock. Location is off but has to be turned on..
|
||||
/// Looks up a localized string similar to Connection to the lock could not be established. Activate Location services and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorConnectLockLocationOffException {
|
||||
internal static string LockItExceptionConnectLockLocationOffException {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorConnectLockLocationOffException", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionConnectLockLocationOffException", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Can not connect to lock. Location permission is required but not granted. .
|
||||
/// Looks up a localized string similar to Connection to the lock could not be established. Grant Location permission, activate Location services and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorConnectLockLocationPermissingMissingException {
|
||||
internal static string LockItExceptionConnectLockLocationPermissingMissingException {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorConnectLockLocationPermissingMissingException", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionConnectLockLocationPermissingMissingException", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bold is blocked..
|
||||
/// Looks up a localized string similar to Position of lock bolt is unknown. Lock could be closed or open. Please try again or contact customer support..
|
||||
/// </summary>
|
||||
internal static string ErrorOpenLockBoldIsBlocked {
|
||||
internal static string LockItExceptionOpenLockBoldStatusIsUnknown {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorOpenLockBoldIsBlocked", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionOpenLockBoldStatusIsUnknown", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Bold status is unknown..
|
||||
/// Looks up a localized string similar to Bolt was blocked. Make sure that no spoke presses against the lock bolt and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorOpenLockBoldStatusIsUnknown {
|
||||
internal static string LockItExceptionOpenLockBoldWasBlocked {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorOpenLockBoldStatusIsUnknown", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionOpenLockBoldWasBlocked", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Unexpected locking state "{0}" detected after sending open command..
|
||||
/// Looks up a localized string similar to Lock bolt is blocked. Make sure that no spoke presses against the lock bolt and try again..
|
||||
/// </summary>
|
||||
internal static string ErrorOpenLockUnexpectedState {
|
||||
internal static string LockItExceptionOpenLockBoltBlocked {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorOpenLockUnexpectedState", resourceCulture);
|
||||
return ResourceManager.GetString("LockItExceptionOpenLockBoltBlocked", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Unexpected locking state "{0}" detected after sending open command. Please try again or contact customer support..
|
||||
/// </summary>
|
||||
internal static string LockItExceptionOpenLockUnexpectedState {
|
||||
get {
|
||||
return ResourceManager.GetString("LockItExceptionOpenLockUnexpectedState", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,40 +12,43 @@
|
|||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ErrorCloseLockUnexpectedState" xml:space="preserve">
|
||||
<value>Unerwarteter Schlosszustand "{0}" gemeldet nach Ausführung des Abschließen-Befehls.</value>
|
||||
<data name="LockItExceptionCloseLockUnknownPosition" xml:space="preserve">
|
||||
<value>Das Schloss meldet unbekannte Position des Schlossbügels. Das Schloss könnte geschlossen oder offen sein. Bitte versuchen Sie es erneut oder melden Sie das Fahrrad dem Betreiber!</value>
|
||||
</data>
|
||||
<data name="ErrorCloseLockUnknownPosition" xml:space="preserve">
|
||||
<value>Schloss meldet unbekannten Schließzustand.</value>
|
||||
<data name="LockItExceptionOpenLockUnexpectedState" xml:space="preserve">
|
||||
<value>Unerwarteter Schlosszustand "{0}" nach Ausführen des Öffnen-Befehls erkannt. Bitte versuchen Sie es erneut oder kontaktieren Sie den Kundensupport.</value>
|
||||
</data>
|
||||
<data name="ErrorOpenLockUnexpectedState" xml:space="preserve">
|
||||
<value>Unerwarteter Schlosszustand "{0}" gemeldet nach Ausführen des Öffnen-Befehls.</value>
|
||||
<data name="LockItExceptionBluetoothDisconnected" xml:space="preserve">
|
||||
<value>Es konnte keine Bluetooth-Verbindung zum Schloss hergestellt werden. Aktivieren Sie Bluetooth und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="ErrorBluetoothDisconnectedException" xml:space="preserve">
|
||||
<value>Keine Bluetooth-Verbindung.</value>
|
||||
<data name="LockItExceptionCloseLockMoving" xml:space="preserve">
|
||||
<value>Der Vorgang ist bewegungssensibel. Treten Sie nah an das Schloss heran, bewegen Sie sich nicht und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="ErrorCloseLockBikeMoving" xml:space="preserve">
|
||||
<value>Rad ist in Bewegung.</value>
|
||||
<data name="LockItExceptionOpenLockBoldWasBlocked" xml:space="preserve">
|
||||
<value>Der Schlossbügel war blockiert. Stellen Sie sicher, dass keine Speiche oder anderer Gegenstand das Schloss blockiert und wiederholen Sie den Vorgang.</value>
|
||||
</data>
|
||||
<data name="ErrorCloseLockBoldBlocked" xml:space="preserve">
|
||||
<value>Schloss ist blockiert.</value>
|
||||
<data name="LockItExceptionConnectLockBluetoothNotOnException" xml:space="preserve">
|
||||
<value>Es kann keine Bluetooth-Verbindung hergestellt werden. Der aktuelle Blutooth-Status ist {0}. Aktivieren Sie Bluetooth und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="ErrorOpenLockBoldBlocked" xml:space="preserve">
|
||||
<value>Schloss ist blockiert.</value>
|
||||
<data name="LockItExceptionConnectLockBluetoothOffException" xml:space="preserve">
|
||||
<value>Es kann keine Bluetooth-Verbindung hergestellt werden. Aktivieren Sie Bluetooth und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="ErrorOpenLockBoldWasBlocked" xml:space="preserve">
|
||||
<value>Schloss war oder ist blockiert.</value>
|
||||
<data name="LockItExceptionConnectLockLocationOffException" xml:space="preserve">
|
||||
<value>Es konnte keine Verbindung zum Schloss hergestellt werden. Aktivieren Sie die Standortdienste und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockBluetoothNotOnException" xml:space="preserve">
|
||||
<value>Kann keine Verbindung zum Schloss herstellen. Unerwarteter Bluetooth-Status {0} erkannt.</value>
|
||||
<data name="LockItExceptionConnectLockLocationPermissingMissingException" xml:space="preserve">
|
||||
<value>Es konnte keine Verbindung zum Schloss hergestellt werden. Erlauben Sie den Standort-Zugriff, aktivieren Sie die Standortdienste und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockBluetoothOffException" xml:space="preserve">
|
||||
<value>Kann keine Verbindung zum Schloss herstellen. Bluetooth ist aus und sollte aber angeschalten sein.</value>
|
||||
<data name="LockItExceptionOpenLockBoldStatusIsUnknown" xml:space="preserve">
|
||||
<value>Position des Schlossbügels ist unbekannt. Schloss könnte geschlossen oder offen sein. Bitte versuchen Sie es erneut oder kontaktieren Sie den Kundensupport.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockLocationOffException" xml:space="preserve">
|
||||
<value>Kann keine Verbindung zum Schloss herstellen. Standortbestimmung ist deaktiviert, sollte aber aktiviert sein.</value>
|
||||
<data name="LockItExceptionCloseLockBoltBlocked" xml:space="preserve">
|
||||
<value>Der Schlossbügel ist blockiert. Stellen Sie sicher, dass keine Speiche oder ein anderes Hindernis das Schließen des Schlosses verhindert, und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockLocationPermissingMissingException" xml:space="preserve">
|
||||
<value>Kann keine Verbindung zum Schloss herstellen. Standort-Zugriffserlaubnis muss erteilt sein wurde aber nicht erteilt. </value>
|
||||
<data name="LockItExceptionOpenLockBoltBlocked" xml:space="preserve">
|
||||
<value>Der Schlossbügel ist blockiert. Stellen Sie sicher, dass keine Speiche gegen den Bügel drückt und versuchen Sie es erneut.</value>
|
||||
</data>
|
||||
<data name="LockItExceptionCloseLockUnexpectedLockState" xml:space="preserve">
|
||||
<value>Unerwarteter Schlosszustand "{0}" nach Senden des Schließbefehls festgestellt. Bitte versuchen Sie es erneut oder kontaktieren Sie den Kundensupport.</value>
|
||||
</data>
|
||||
</root>
|
|
@ -117,40 +117,43 @@
|
|||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ErrorBluetoothDisconnectedException" xml:space="preserve">
|
||||
<value>No bluetooth connection.</value>
|
||||
<data name="LockItExceptionBluetoothDisconnected" xml:space="preserve">
|
||||
<value>Bluetooth connection to the lock could not be established. Activate Bluetooth and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorCloseLockBikeMoving" xml:space="preserve">
|
||||
<value>Bike is moving.</value>
|
||||
<data name="LockItExceptionCloseLockMoving" xml:space="preserve">
|
||||
<value>The process is motion sensitive. Step close to the lock, do not move, and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorCloseLockBoldBlocked" xml:space="preserve">
|
||||
<value>Bold is blocked.</value>
|
||||
<data name="LockItExceptionCloseLockBoltBlocked" xml:space="preserve">
|
||||
<value>Lock bolt is blocked. Make sure that no spoke or any other obstacle prevents the lock from closing and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorCloseLockUnexpectedState" xml:space="preserve">
|
||||
<value>Unexpected locking state "{0}" detected after sending close command.</value>
|
||||
<data name="LockItExceptionCloseLockUnexpectedLockState" xml:space="preserve">
|
||||
<value>Unexpected locking state "{0}" detected after sending close command. Please try again or contact customer support.</value>
|
||||
</data>
|
||||
<data name="ErrorCloseLockUnknownPosition" xml:space="preserve">
|
||||
<value>Lock reports unknown bold position.</value>
|
||||
<data name="LockItExceptionCloseLockUnknownPosition" xml:space="preserve">
|
||||
<value>Lock reports unknown bold position. Lock could be closed or open. Please try again or contact customer support.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockBluetoothNotOnException" xml:space="preserve">
|
||||
<value>Can not connect to lock. Unexpected bluetooth state {0} detected.</value>
|
||||
<data name="LockItExceptionConnectLockBluetoothNotOnException" xml:space="preserve">
|
||||
<value>Bluetooth connection to the lock could not be established. Current Blutooth status is {0}. Activate Bluetooth and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockBluetoothOffException" xml:space="preserve">
|
||||
<value>Can not connect to lock. Bluetooth is off but has to be turned on.</value>
|
||||
<data name="LockItExceptionConnectLockBluetoothOffException" xml:space="preserve">
|
||||
<value>Bluetooth connection to the lock could not be established. Activate Bluetooth and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockLocationOffException" xml:space="preserve">
|
||||
<value>Can not connect to lock. Location is off but has to be turned on.</value>
|
||||
<data name="LockItExceptionConnectLockLocationOffException" xml:space="preserve">
|
||||
<value>Connection to the lock could not be established. Activate Location services and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorConnectLockLocationPermissingMissingException" xml:space="preserve">
|
||||
<value>Can not connect to lock. Location permission is required but not granted. </value>
|
||||
<data name="LockItExceptionConnectLockLocationPermissingMissingException" xml:space="preserve">
|
||||
<value>Connection to the lock could not be established. Grant Location permission, activate Location services and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorOpenLockBoldBlocked" xml:space="preserve">
|
||||
<value>Bold is blocked.</value>
|
||||
<data name="LockItExceptionOpenLockBoltBlocked" xml:space="preserve">
|
||||
<value>Lock bolt is blocked. Make sure that no spoke presses against the lock bolt and try again.</value>
|
||||
</data>
|
||||
<data name="ErrorOpenLockBoldWasBlocked" xml:space="preserve">
|
||||
<value>Bold was or is blocked.</value>
|
||||
<data name="LockItExceptionOpenLockBoldStatusIsUnknown" xml:space="preserve">
|
||||
<value>Position of lock bolt is unknown. Lock could be closed or open. Please try again or contact customer support.</value>
|
||||
</data>
|
||||
<data name="ErrorOpenLockUnexpectedState" xml:space="preserve">
|
||||
<value>Unexpected locking state "{0}" detected after sending open command.</value>
|
||||
<data name="LockItExceptionOpenLockBoldWasBlocked" xml:space="preserve">
|
||||
<value>Bolt was blocked. Make sure that no spoke presses against the lock bolt and try again.</value>
|
||||
</data>
|
||||
<data name="LockItExceptionOpenLockUnexpectedState" xml:space="preserve">
|
||||
<value>Unexpected locking state "{0}" detected after sending open command. Please try again or contact customer support.</value>
|
||||
</data>
|
||||
</root>
|
|
@ -13,7 +13,7 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
{
|
||||
public BluetoothDisconnectedException() : base(
|
||||
LockingState.UnknownDisconnected,
|
||||
MultilingualResources.Resources.ErrorBluetoothDisconnectedException)
|
||||
MultilingualResources.Resources.LockItExceptionBluetoothDisconnected)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,8 +10,8 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
/// </remarks>
|
||||
public class ConnectBluetoothNotOnException : System.Exception
|
||||
{
|
||||
public ConnectBluetoothNotOnException() : base(Resources.ErrorConnectLockBluetoothOffException) { }
|
||||
public ConnectBluetoothNotOnException() : base(Resources.LockItExceptionConnectLockBluetoothOffException) { }
|
||||
|
||||
public ConnectBluetoothNotOnException(object state) : base(string.Format(Resources.ErrorConnectLockBluetoothNotOnException, state.ToString())) { }
|
||||
public ConnectBluetoothNotOnException(object state) : base(string.Format(Resources.LockItExceptionConnectLockBluetoothNotOnException, state.ToString())) { }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,6 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
{
|
||||
public class ConnectLocationOffException : System.Exception
|
||||
{
|
||||
public ConnectLocationOffException() : base(Resources.ErrorConnectLockLocationOffException) { }
|
||||
public ConnectLocationOffException() : base(Resources.LockItExceptionConnectLockLocationOffException) { }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,6 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
{
|
||||
public class ConnectLocationPermissionMissingException : System.Exception
|
||||
{
|
||||
public ConnectLocationPermissionMissingException() : base(Resources.ErrorConnectLockLocationPermissingMissingException) { }
|
||||
public ConnectLocationPermissionMissingException() : base(Resources.LockItExceptionConnectLockLocationPermissingMissingException) { }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
|||
|
||||
namespace TINK.Services.BluetoothLock.Exception
|
||||
{
|
||||
public class CouldntCloseBoldBlockedException : StateAwareException
|
||||
public class CouldntCloseBoltBlockedException : StateAwareException
|
||||
{
|
||||
/// <summary>
|
||||
/// Constructs a bold blocked exception.
|
||||
|
@ -13,9 +13,9 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
/// <param name="state">State of the lock while/ after bold blocked event.</param>
|
||||
/// <remarks>
|
||||
/// </remarks>
|
||||
public CouldntCloseBoldBlockedException(LockingState state = LockingState.UnknownFromHardwareError) : base(
|
||||
public CouldntCloseBoltBlockedException(LockingState state = LockingState.UnknownFromHardwareError) : base(
|
||||
state,
|
||||
MultilingualResources.Resources.ErrorCloseLockBoldBlocked)
|
||||
MultilingualResources.Resources.LockItExceptionCloseLockBoltBlocked)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
|
||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||
using TINK.MultilingualResources;
|
||||
|
||||
|
@ -10,8 +10,8 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
base(
|
||||
state,
|
||||
state != LockingState.UnknownFromHardwareError
|
||||
? string.Format(Resources.ErrorCloseLockUnexpectedState, state)
|
||||
: Resources.ErrorCloseLockUnknownPosition)
|
||||
? string.Format(Resources.LockItExceptionCloseLockUnexpectedLockState, state)
|
||||
: Resources.LockItExceptionCloseLockUnknownPosition)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||
|
||||
namespace TINK.Services.BluetoothLock.Exception
|
||||
{
|
||||
|
@ -6,7 +6,7 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
{
|
||||
public CouldntCloseMovingException() : base(
|
||||
LockingState.Open, // Locking bold is probable (according to haveltec) still open.
|
||||
MultilingualResources.Resources.ErrorCloseLockBikeMoving)
|
||||
MultilingualResources.Resources.LockItExceptionCloseLockMoving)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
{
|
||||
public CouldntOpenBoldIsBlockedException() : base(
|
||||
LockingState.UnknownFromHardwareError,
|
||||
MultilingualResources.Resources.ErrorOpenLockBoldIsBlocked)
|
||||
MultilingualResources.Resources.LockItExceptionOpenLockBoltBlocked)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
{
|
||||
public CouldntOpenBoldStatusIsUnknownException() : base(
|
||||
LockingState.UnknownFromHardwareError,
|
||||
MultilingualResources.Resources.ErrorOpenLockBoldStatusIsUnknown)
|
||||
MultilingualResources.Resources.LockItExceptionOpenLockBoldStatusIsUnknown)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
|
||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||
using TINK.MultilingualResources;
|
||||
|
||||
|
@ -9,7 +9,7 @@ namespace TINK.Services.BluetoothLock.Exception
|
|||
public CouldntOpenInconsistentStateExecption(LockingState state) :
|
||||
base(
|
||||
state,
|
||||
string.Format(Resources.ErrorOpenLockUnexpectedState, state))
|
||||
string.Format(Resources.LockItExceptionOpenLockUnexpectedState, state))
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
namespace TINK.Services.BluetoothLock.Exception
|
||||
namespace TINK.Services.BluetoothLock.Exception
|
||||
{
|
||||
/// <summary> Thrown whenever lock is out of reach.</summary>
|
||||
/// <remarks> If fired when scan for devices does not result in lock beeing found.</remarks>
|
||||
/// <remarks> If fired when scan for devices does not result in lock being found.</remarks>
|
||||
public class OutOfReachException : System.Exception
|
||||
{
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using TINK.Services.BluetoothLock.Tdo;
|
||||
|
@ -42,12 +42,12 @@ namespace TINK.Model.Bikes.BikeInfoNS.BluetoothLock
|
|||
switch (lockingState)
|
||||
{
|
||||
case LockitLockingState.Unknown:
|
||||
case LockitLockingState.CouldntOpenBoldBlocked: // Lock is closed in most cases, but this is not guarnteed according to haveltec.
|
||||
case LockitLockingState.CouldntOpenBoltBlocked: // Lock is closed in most cases, but this is not guaranteed according to haveltec.
|
||||
return LockingState.UnknownFromHardwareError;
|
||||
|
||||
case LockitLockingState.Open:
|
||||
case LockitLockingState.CouldntCloseMoving:
|
||||
case LockitLockingState.CouldntCloseBoldBlocked:
|
||||
case LockitLockingState.CouldntCloseBoltBlocked:
|
||||
return LockingState.Open;
|
||||
|
||||
case LockitLockingState.Closed:
|
||||
|
|
|
@ -13,9 +13,9 @@ namespace TINK.Services.BluetoothLock.Tdo
|
|||
|
||||
CouldntCloseMoving = 0x03,
|
||||
|
||||
CouldntOpenBoldBlocked = 0x04,
|
||||
CouldntOpenBoltBlocked = 0x04,
|
||||
|
||||
CouldntCloseBoldBlocked = 0x05
|
||||
CouldntCloseBoltBlocked = 0x05
|
||||
}
|
||||
|
||||
/// <summary> Object holding info about bluetooth lock. </summary>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.369" android:versionCode="369">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.370" android:versionCode="370">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
|
||||
<!-- Google Maps related permissions -->
|
||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace TINK.Droid
|
|||
{
|
||||
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.1.111")]
|
||||
public partial class Resource
|
||||
{
|
||||
|
||||
|
|
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>Mein konrad</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>369</string>
|
||||
<string>370</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.369</string>
|
||||
<string>3.0.370</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -269,9 +269,6 @@
|
|||
<HintPath>..\..\..\..\.nuget\packages\xamarin.google.ios.maps\2.5.0\lib\Xamarin.iOS10\Google.Maps.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BundleResource Include="Resources\tink2.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\LockItBLE\LockItBLE.csproj">
|
||||
<Project>{bde9ce26-15cf-47da-a4f6-b6956d02d0fc}</Project>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6245" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="X5k-f2-b5h">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
|
||||
|
@ -42,6 +42,5 @@
|
|||
<image name="Icon-76.png" width="76" height="76"/>
|
||||
<image name="Icon-Small-40.png" width="40" height="40"/>
|
||||
<image name="Icon-Small.png" width="29" height="29"/>
|
||||
<image name="tink2.png" width="208" height="208"/>
|
||||
</resources>
|
||||
</document>
|
||||
</document>
|
||||
|
|
|
@ -31,6 +31,8 @@ using Arendi.BleLibrary.Local;
|
|||
|
||||
// Add ExportFont attribute
|
||||
[assembly: ExportFont("Font Awesome 5 Free-Solid-900.otf", Alias = "FA-S")]
|
||||
[assembly: ExportFont("Font Awesome 5 Brands-Regular-400.otf", Alias = "FA-B")]
|
||||
[assembly: ExportFont("Font Awesome 5 Free-Regular-400.otf", Alias = "FA-R")]
|
||||
|
||||
namespace TINK
|
||||
{
|
||||
|
|
|
@ -181,7 +181,6 @@
|
|||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="$(MSBuildThisFileDirectory)Resources\Fonts\" />
|
||||
<Folder Include="$(MSBuildThisFileDirectory)View\BikesAtStation\" />
|
||||
<Folder Include="$(MSBuildThisFileDirectory)View\FeesAndBikes\" />
|
||||
<Folder Include="$(MSBuildThisFileDirectory)View\Login\" />
|
||||
|
@ -323,4 +322,12 @@
|
|||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Fonts\Font Awesome 5 Brands-Regular-400.otf">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\Fonts\Font Awesome 5 Free-Regular-400.otf">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -49,13 +49,13 @@
|
|||
Text="{Binding BookingStateInfo}" />
|
||||
|
||||
<Button
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"
|
||||
Text="{x:Static resources:AppResources.MarkingAccountPageManagePersonalData}"
|
||||
Command="{Binding OnManageAccount}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
|
||||
<Button
|
||||
Style="{StaticResource SecondaryButton}"
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManageLogout}"
|
||||
Text="{x:Static resources:AppResources.MarkingAccountPageManageLogout}"
|
||||
Command="{Binding OnLogoutRequest}"
|
||||
IsEnabled="{Binding IsLogoutPossible}"/>
|
||||
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
|
||||
x:Class="TINK.View.BikesAtStation.BikesAtStationPage"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:bikeRentalProcess="clr-namespace:ShareeSharedGuiLib.View.Bike.RentalProcess"
|
||||
BackgroundColor="{DynamicResource background-color}"
|
||||
Shell.FlyoutBehavior="Disabled"
|
||||
Shell.NavBarIsVisible="{Binding IsIdle}">
|
||||
|
||||
<Shell.TitleView>
|
||||
|
@ -21,6 +23,15 @@
|
|||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
||||
<xct:MultiConverter x:Key="RentalProcessToVisibleConverter">
|
||||
<xct:EnumToBoolConverter>
|
||||
<xct:EnumToBoolConverter.TrueValues>
|
||||
<rental_process:CurrentRentalProcess>CloseLock</rental_process:CurrentRentalProcess>
|
||||
<rental_process:CurrentRentalProcess>EndRental</rental_process:CurrentRentalProcess>
|
||||
</xct:EnumToBoolConverter.TrueValues>
|
||||
</xct:EnumToBoolConverter>
|
||||
<xct:InvertedBoolConverter />
|
||||
</xct:MultiConverter>
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
|
||||
|
@ -28,8 +39,10 @@
|
|||
|
||||
<!--Grid for Bike(s) view and Running process in same row-->
|
||||
<Grid>
|
||||
<!-- Grid for Content -->
|
||||
|
||||
<!--BikesAtStationPage Content-->
|
||||
<Grid
|
||||
IsVisible="{Binding RentalProcess.State, Converter={StaticResource RentalProcessToVisibleConverter}}"
|
||||
Grid.Row="0"
|
||||
RowSpacing="0"
|
||||
RowDefinitions="1*,Auto">
|
||||
|
@ -41,7 +54,7 @@
|
|||
|
||||
<!--Station-->
|
||||
<StackLayout
|
||||
BackgroundColor="{DynamicResource secondary-back-title-color}"
|
||||
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||
IsVisible="{Binding IsIdle}"
|
||||
Padding="20,0,20,0">
|
||||
|
||||
|
@ -189,6 +202,14 @@
|
|||
IsVisible="{Binding IsProcessWithRunningProcessView}"
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--CloseLock View-->
|
||||
<bikeRentalProcess:RentalProcessBookedOpenCloseLock
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--EndRental View-->
|
||||
<bikeRentalProcess:RentalProcessBookedClosedEndRental
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
|
|
@ -24,6 +24,7 @@ namespace TINK.View.BikesAtStation
|
|||
using TINK.ViewModel.Bikes;
|
||||
using Xamarin.CommunityToolkit.Extensions;
|
||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
|
||||
using TINK.MultilingualResources;
|
||||
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
#if USEFLYOUT
|
||||
|
@ -111,7 +112,10 @@ namespace TINK.View.BikesAtStation
|
|||
catch (Exception exception)
|
||||
{
|
||||
Log.ForContext<BikesAtStationPage>().Error("Displaying bikes at station page failed. {Exception}", exception);
|
||||
await DisplayAlert("Fehler", $"Seite Räder an Station kann nicht angezeigt werden. ${exception.Message}", "OK");
|
||||
await DisplayAlert(
|
||||
AppResources.ErrorPageNotLoadedTitle,
|
||||
$"{AppResources.ErrorPageNotLoaded}\r\n{exception.Message}",
|
||||
AppResources.MessageAnswerOk);
|
||||
isInitializationStarted = false;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@
|
|||
|
||||
</StackLayout>
|
||||
|
||||
<!--Contact operator of selected station-->
|
||||
<!--contact customer support of selected station-->
|
||||
<StackLayout
|
||||
IsVisible="{Binding IsOperatorInfoAvaliable}">
|
||||
|
||||
|
|
|
@ -20,8 +20,9 @@
|
|||
|
||||
<!--Grid for Map with Buttons and Running process-->
|
||||
<Grid
|
||||
RowDefinitions="3,46,1*,32"
|
||||
RowDefinitions="3,46,1*,Auto"
|
||||
ColumnDefinitions="1*,Auto,1*"
|
||||
RowSpacing="0"
|
||||
IsEnabled="{Binding IsMapPageEnabled}"
|
||||
VerticalOptions="FillAndExpand">
|
||||
|
||||
|
@ -119,10 +120,23 @@
|
|||
Grid.ColumnSpan="3"
|
||||
Text="{Binding StatusInfoText}"
|
||||
IsVisible="{Binding Path=IsProcessWithRunningProcessView, Converter={StaticResource InvertedBoolConverter}}"
|
||||
TextColor="White"
|
||||
FontSize="Small"
|
||||
HorizontalOptions="CenterAndExpand"
|
||||
VerticalOptions="CenterAndExpand"/>
|
||||
Padding="5"
|
||||
TextColor="DimGray"
|
||||
HorizontalOptions="CenterAndExpand">
|
||||
<Label.Triggers>
|
||||
<DataTrigger
|
||||
TargetType="Label"
|
||||
Binding="{Binding Path=StatusInfoText.Length}" Value="0">
|
||||
<Setter Property="HeightRequest" Value="0" />
|
||||
</DataTrigger>
|
||||
<DataTrigger
|
||||
TargetType="Label"
|
||||
Binding="{Binding Path=StatusInfoText}" Value="Offline.">
|
||||
<Setter Property="HeightRequest" Value="0" />
|
||||
</DataTrigger>
|
||||
</Label.Triggers>
|
||||
</Label>
|
||||
|
||||
<!--While process is running-->
|
||||
<sharedGui:RunningProcessView
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<Grid ColumnDefinitions="Auto, 1*">
|
||||
<Image Style="{StaticResource Image-Navbar}"/>
|
||||
<Label Style="{StaticResource Label-Navbar}"
|
||||
Text="{x:Static resources:AppResources.MessageAccountPageManagePersonalData}"/>
|
||||
Text="{x:Static resources:AppResources.MarkingAccountPageManagePersonalData}"/>
|
||||
</Grid>
|
||||
</Shell.TitleView>
|
||||
<Shell.BackButtonBehavior>
|
||||
|
|
|
@ -6,10 +6,12 @@
|
|||
x:TypeArguments="local:FeedbackPopup+Result"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
IsLightDismissEnabled="false"
|
||||
x:Class="TINK.View.FeedbackPopup">
|
||||
|
||||
<xct:Popup.Resources>
|
||||
<x:String x:Key="check_circle"></x:String>
|
||||
<x:String x:Key="WriteFeedback"></x:String>
|
||||
</xct:Popup.Resources>
|
||||
|
||||
<ScrollView
|
||||
|
@ -20,95 +22,124 @@
|
|||
<StackLayout
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="FillAndExpand"
|
||||
Padding="0,0,0,300">
|
||||
Padding="0,0,0,400">
|
||||
|
||||
<!-- Head and title -->
|
||||
<StackLayout
|
||||
Padding="20"
|
||||
BackgroundColor="{DynamicResource primary-back-title-color}">
|
||||
<Label
|
||||
HorizontalTextAlignment="Center"
|
||||
FontSize="Large"
|
||||
TextColor="White"
|
||||
Text="{x:Static resources:AppResources.MarkingReturnBikeMainMessage}"/>
|
||||
<Image>
|
||||
<!-- Head -->
|
||||
<Grid
|
||||
Padding="0,30,0,10"
|
||||
ColumnDefinitions="10,Auto,1*,10"
|
||||
ColumnSpacing="10"
|
||||
HorizontalOptions="CenterAndExpand">
|
||||
|
||||
<!--icon-->
|
||||
<Image
|
||||
Grid.Column="1"
|
||||
HorizontalOptions="End">
|
||||
<Image.Source>
|
||||
<FontImageSource Size="60" Glyph="{StaticResource check_circle}" FontFamily="FA-S" Color="White"/>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource WriteFeedback}"
|
||||
FontFamily="FA-S"
|
||||
Size="40"
|
||||
Color="Black"/>
|
||||
|
||||
</Image.Source>
|
||||
</Image>
|
||||
</StackLayout>
|
||||
|
||||
<!--text-->
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
TextType="Html"
|
||||
Text="{x:Static resources:AppResources.ActionGiveFeedback}"
|
||||
FontSize="Large"
|
||||
HorizontalOptions="StartAndExpand"
|
||||
VerticalOptions="Center"
|
||||
TextColor="Black"
|
||||
Padding="0">
|
||||
</Label>
|
||||
|
||||
</Grid>
|
||||
|
||||
<BoxView
|
||||
Margin="20,0,20,10"
|
||||
HeightRequest="1"
|
||||
WidthRequest="400"
|
||||
HorizontalOptions="Center"
|
||||
Color="{DynamicResource primary-back-title-color}"/>
|
||||
|
||||
<!-- Content -->
|
||||
<StackLayout
|
||||
Margin="10"
|
||||
Spacing="10">
|
||||
|
||||
<!-- Co2saving -->
|
||||
<Frame
|
||||
x:Name="Co2SavingFrame">
|
||||
<Label
|
||||
x:Name="Co2SavingLabel"
|
||||
Text=""/>
|
||||
</Frame>
|
||||
|
||||
<!-- Battery level -->
|
||||
<sharedGui:BarLevelInputView
|
||||
x:Name="BarLevelInputView"
|
||||
HorizontalOptions="Center"/>
|
||||
x:Name="BarLevelInputView"
|
||||
HorizontalOptions="Center"/>
|
||||
|
||||
<!-- Is bike okay? -->
|
||||
<Grid
|
||||
ColumnDefinitions="*,Auto,Auto,Auto,*"
|
||||
ColumnDefinitions="*,Auto,*"
|
||||
RowDefinitions="Auto,Auto"
|
||||
Margin="0,20,0,0">
|
||||
<Label
|
||||
<Grid
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
FontSize="Medium"
|
||||
FontAttributes="Bold"
|
||||
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeIsStateOkQuestion}">
|
||||
</Label>
|
||||
<Switch
|
||||
Grid.Column="2"
|
||||
Grid.Row="0"
|
||||
ColumnDefinitions="1*,Auto,Auto">
|
||||
<Label
|
||||
Grid.Column="0"
|
||||
FontAttributes="Bold"
|
||||
HorizontalTextAlignment="End"
|
||||
Text= "{x:Static resources:AppResources.MarkingReturnBikeBikeIsStateOkQuestion}">
|
||||
</Label>
|
||||
<Switch
|
||||
Grid.Column="1"
|
||||
VerticalOptions="Center"
|
||||
HorizontalOptions="End"
|
||||
x:Name="bikeIsOkSwitch"
|
||||
IsToggled="True"/>
|
||||
<Label
|
||||
Grid.Column="3"
|
||||
Grid.Row="0"
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
FontSize="Small"
|
||||
VerticalOptions="Center"
|
||||
HorizontalOptions="Start">
|
||||
<Label.Triggers>
|
||||
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="False">
|
||||
<Setter Property="Text" Value="{x:Static resources:AppResources.QuestionAnswerNo}"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="True">
|
||||
<Setter Property="Text" Value="{x:Static resources:AppResources.QuestionAnswerYes}"/>
|
||||
</DataTrigger>
|
||||
</Label.Triggers>
|
||||
</Label>
|
||||
<Label.Triggers>
|
||||
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="False">
|
||||
<Setter Property="Text" Value="{x:Static resources:AppResources.MessageAnswerNo}"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}" Value="True">
|
||||
<Setter Property="Text" Value="{x:Static resources:AppResources.MessageAnswerYes}"/>
|
||||
</DataTrigger>
|
||||
</Label.Triggers>
|
||||
</Label>
|
||||
</Grid>
|
||||
|
||||
<!-- Text input bike is not OK -->
|
||||
<Editor
|
||||
<StackLayout Grid.Row="1"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="5"
|
||||
Grid.Row="1"
|
||||
x:Name="feedbackMessage"
|
||||
AutoSize="TextChanges"
|
||||
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}"
|
||||
Text=""
|
||||
IsVisible="False">
|
||||
<Editor.Triggers>
|
||||
<DataTrigger TargetType="Editor"
|
||||
Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}"
|
||||
Value="False">
|
||||
Grid.ColumnSpan="3"
|
||||
Padding="1"
|
||||
BackgroundColor="{DynamicResource primary-back-title-color}">
|
||||
<StackLayout.Triggers>
|
||||
<DataTrigger TargetType="StackLayout"
|
||||
Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}"
|
||||
Value="False">
|
||||
<Setter Property="IsVisible" Value="True"/>
|
||||
<Setter Property="Text" Value=""/>
|
||||
<Setter Property="HeightRequest" Value="100"/>
|
||||
</DataTrigger>
|
||||
</Editor.Triggers>
|
||||
</Editor>
|
||||
<DataTrigger TargetType="StackLayout"
|
||||
Binding="{Binding Source={x:Reference bikeIsOkSwitch}, Path=IsToggled}"
|
||||
Value="True">
|
||||
<Setter Property="IsVisible" Value="False"/>
|
||||
<Setter Property="HeightRequest" Value="0"/>
|
||||
</DataTrigger>
|
||||
</StackLayout.Triggers>
|
||||
<Editor
|
||||
x:Name="feedbackMessage"
|
||||
HeightRequest="100"
|
||||
Placeholder="{x:Static resources:AppResources.MarkingReturnBikeErrorDescriptionInputPlaceholder}"
|
||||
Text=""
|
||||
BackgroundColor="White">
|
||||
</Editor>
|
||||
</StackLayout>
|
||||
|
||||
</Grid>
|
||||
|
||||
|
|
|
@ -17,11 +17,6 @@ namespace TINK.View
|
|||
{
|
||||
InitializeComponent();
|
||||
|
||||
if (string.IsNullOrEmpty(co2Saving))
|
||||
Co2SavingFrame.IsVisible = false;
|
||||
else
|
||||
Co2SavingLabel.Text = co2Saving;
|
||||
|
||||
if (battery == null
|
||||
|| (battery.IsBackendAccessible.HasValue && battery.IsBackendAccessible.Value))
|
||||
{
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
|
||||
x:Class="TINK.View.FindBike.FindBikePage"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
xmlns:bikeRentalProcess="clr-namespace:ShareeSharedGuiLib.View.Bike.RentalProcess"
|
||||
BackgroundColor="{DynamicResource background-color}">
|
||||
|
||||
<Shell.TitleView>
|
||||
|
@ -19,6 +23,15 @@
|
|||
<ResourceDictionary>
|
||||
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="Label_Converter"/>
|
||||
<xct:MultiConverter x:Key="RentalProcessToVisibleConverter">
|
||||
<xct:EnumToBoolConverter>
|
||||
<xct:EnumToBoolConverter.TrueValues>
|
||||
<rental_process:CurrentRentalProcess>CloseLock</rental_process:CurrentRentalProcess>
|
||||
<rental_process:CurrentRentalProcess>EndRental</rental_process:CurrentRentalProcess>
|
||||
</xct:EnumToBoolConverter.TrueValues>
|
||||
</xct:EnumToBoolConverter>
|
||||
<xct:InvertedBoolConverter />
|
||||
</xct:MultiConverter>
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
|
||||
|
@ -29,9 +42,10 @@
|
|||
|
||||
<!-- Grid for Content -->
|
||||
<Grid
|
||||
RowDefinitions="1*,Auto"
|
||||
IsVisible="{Binding RentalProcess.State, Converter={StaticResource RentalProcessToVisibleConverter}}"
|
||||
Grid.Row="0"
|
||||
RowSpacing="0"
|
||||
Grid.Row="0">
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0"
|
||||
|
@ -40,37 +54,7 @@
|
|||
|
||||
<StackLayout
|
||||
BackgroundColor="White"
|
||||
Padding="20,5,20,0">
|
||||
|
||||
<!--Bike type-->
|
||||
<StackLayout Orientation="Horizontal"
|
||||
HorizontalOptions="Center"
|
||||
IsVisible="{Binding ActiveFilteredBikeType, Converter={StaticResource Label_Converter}}"
|
||||
Spacing="0">
|
||||
<Label
|
||||
TextColor="DimGray"
|
||||
Text="{x:Static resources:AppResources.MarkingFindBikeTypeOfBikeText}"/>
|
||||
<Label
|
||||
TextColor="{DynamicResource primary-back-title-color}"
|
||||
FontAttributes="Bold"
|
||||
Text="{Binding ActiveFilteredBikeType}"/>
|
||||
<Button
|
||||
Command="{Binding ShowFilterBikeTypeInfoCommand}"
|
||||
WidthRequest="24"
|
||||
HeightRequest="24"
|
||||
BackgroundColor="Transparent"
|
||||
BorderWidth="0"
|
||||
Padding="0"
|
||||
Margin="5,0,0,0">
|
||||
<Button.ImageSource>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource InfoCircle}"
|
||||
Color="DimGray"
|
||||
FontFamily="FA-S"
|
||||
Size="20"/>
|
||||
</Button.ImageSource>
|
||||
</Button>
|
||||
</StackLayout>
|
||||
Padding="20,0,20,0">
|
||||
|
||||
<Grid
|
||||
RowDefinitions="Auto,Auto"
|
||||
|
@ -171,6 +155,14 @@
|
|||
Grid.Row="0"
|
||||
IsVisible="{Binding IsProcessWithRunningProcessView}"/>
|
||||
|
||||
<!--CloseLock View-->
|
||||
<bikeRentalProcess:RentalProcessBookedOpenCloseLock
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--EndRental View-->
|
||||
<bikeRentalProcess:RentalProcessBookedClosedEndRental
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
|
|
@ -4,6 +4,7 @@ using System.Threading.Tasks;
|
|||
using Serilog;
|
||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
|
||||
using TINK.Model.Device;
|
||||
using TINK.MultilingualResources;
|
||||
using TINK.ViewModel.FindBike;
|
||||
using Xamarin.CommunityToolkit.Extensions;
|
||||
using Xamarin.Forms;
|
||||
|
@ -64,7 +65,10 @@ namespace TINK.View.FindBike
|
|||
catch (Exception exception)
|
||||
{
|
||||
Log.ForContext<FindBikePage>().Error("Displaying bikes at station page failed. {Exception}", exception);
|
||||
await DisplayAlert("Fehler", $"Seite Fahrrad Wählen kann nicht angezeigt werden. ${exception.Message}", "OK");
|
||||
await DisplayAlert(
|
||||
AppResources.ErrorPageNotLoadedTitle,
|
||||
$"{AppResources.ErrorPageNotLoaded}\r\n{exception.Message}",
|
||||
AppResources.MessageAnswerOk);
|
||||
return;
|
||||
|
||||
}
|
||||
|
|
|
@ -2,13 +2,16 @@
|
|||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
|
||||
x:Class="TINK.View.MyBikes.MyBikesPage"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
xmlns:bikeRentalProcess="clr-namespace:ShareeSharedGuiLib.View.Bike.RentalProcess"
|
||||
xmlns:local_bike="clr-namespace:TINK.View.Bike"
|
||||
BackgroundColor="{DynamicResource background-color}"
|
||||
Shell.FlyoutBehavior="{Binding FlyoutBehavior}"
|
||||
>
|
||||
Shell.NavBarIsVisible="{Binding IsIdle}">
|
||||
|
||||
<Shell.TitleView>
|
||||
<Grid ColumnDefinitions="Auto, 1*">
|
||||
|
@ -22,6 +25,15 @@
|
|||
<ContentPage.Resources>
|
||||
<ResourceDictionary>
|
||||
<local_bike:BikeViewCellTemplateSelector x:Key="bikeTemplateSelector"/>
|
||||
<xct:MultiConverter x:Key="RentalProcessToVisibleConverter">
|
||||
<xct:EnumToBoolConverter>
|
||||
<xct:EnumToBoolConverter.TrueValues>
|
||||
<rental_process:CurrentRentalProcess>CloseLock</rental_process:CurrentRentalProcess>
|
||||
<rental_process:CurrentRentalProcess>EndRental</rental_process:CurrentRentalProcess>
|
||||
</xct:EnumToBoolConverter.TrueValues>
|
||||
</xct:EnumToBoolConverter>
|
||||
<xct:InvertedBoolConverter />
|
||||
</xct:MultiConverter>
|
||||
</ResourceDictionary>
|
||||
</ContentPage.Resources>
|
||||
|
||||
|
@ -32,9 +44,10 @@
|
|||
|
||||
<!--Bike(s) view-->
|
||||
<Grid
|
||||
RowDefinitions="1*,Auto"
|
||||
IsVisible="{Binding RentalProcess.State, Converter={StaticResource RentalProcessToVisibleConverter}}"
|
||||
Grid.Row="0"
|
||||
RowSpacing="0"
|
||||
Grid.Row="0">
|
||||
RowDefinitions="1*,Auto">
|
||||
|
||||
<StackLayout
|
||||
Grid.Row="0"
|
||||
|
@ -107,6 +120,14 @@
|
|||
Grid.Row="0"
|
||||
IsVisible="{Binding IsProcessWithRunningProcessView}"/>
|
||||
|
||||
<!--CloseLock View-->
|
||||
<bikeRentalProcess:RentalProcessBookedOpenCloseLock
|
||||
Grid.Row="0"/>
|
||||
|
||||
<!--EndRental View-->
|
||||
<bikeRentalProcess:RentalProcessBookedClosedEndRental
|
||||
Grid.Row="0"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentPage.Content>
|
||||
|
|
|
@ -14,6 +14,7 @@ namespace TINK.View.MyBikes
|
|||
using TINK.Model;
|
||||
using TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS;
|
||||
using TINK.Model.Device;
|
||||
using TINK.MultilingualResources;
|
||||
using TINK.ViewModel.MyBikes;
|
||||
using Xamarin.CommunityToolkit.Extensions;
|
||||
|
||||
|
@ -78,7 +79,10 @@ namespace TINK.View.MyBikes
|
|||
catch (Exception exception)
|
||||
{
|
||||
Log.ForContext<MyBikesPage>().Error("Displaying bikes at station page failed. {Exception}", exception);
|
||||
await DisplayAlert("Fehler", $"Seite Räder an Station kann nicht angezeigt werden. ${exception.Message}", "OK");
|
||||
await DisplayAlert(
|
||||
AppResources.ErrorPageNotLoadedTitle,
|
||||
$"{AppResources.ErrorPageNotLoaded}\r\n{exception.Message}",
|
||||
AppResources.MessageAnswerOk);
|
||||
isInitializationStarted = false;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,10 @@
|
|||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\BarLevelView.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessBookedOpenCloseLock.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\VersionNumberView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
|
@ -30,9 +34,32 @@
|
|||
<DependentUpon>BarLevelView.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcess2StepsBar.xaml.cs">
|
||||
<DependentUpon>RentalProcess2StepsBar.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcess3StepsBar.xaml.cs">
|
||||
<DependentUpon>RentalProcess3StepsBar.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessBikeInfo.xaml.cs">
|
||||
<DependentUpon>RentalProcessBikeInfo.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessStepBarFinished.xaml.cs">
|
||||
<DependentUpon>RentalProcessStepBarFinished.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\HintForRefreshingPageView.xaml.cs">
|
||||
<DependentUpon>HintForRefreshingPageView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessBookedClosedEndRental.xaml.cs">
|
||||
<DependentUpon>RentalProcessBookedClosedEndRental.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessBookedOpenCloseLock.xaml.cs">
|
||||
<DependentUpon>RentalProcessBookedOpenCloseLock.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)View\NotConnectedToNetView.xaml.cs">
|
||||
<DependentUpon>NotConnectedToNetView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
@ -86,4 +113,34 @@
|
|||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessBookedClosedEndRental.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcess2StepsBar.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcess3StepsBar.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessBikeInfo.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(MSBuildThisFileDirectory)View\Bike\RentalProcess\RentalProcessStepBarFinished.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -7,7 +7,9 @@
|
|||
<ContentView.Content>
|
||||
<StackLayout>
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.MarkingDriveBatteryTitel}"/>
|
||||
Text="{x:Static resources:AppResources.MarkingDriveBatteryTitel}"
|
||||
TextType="Html"
|
||||
HorizontalOptions="CenterAndExpand"/>
|
||||
<sharedGui:BarLevelView
|
||||
x:Name="BarLevelElement"
|
||||
HorizontalOptions="CenterAndExpand"
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
<!-- Nice battery images symbolizing filling level for batteries with 5 bars -->
|
||||
<Image
|
||||
x:Name="BarLevelImage"
|
||||
WidthRequest="50"
|
||||
HeightRequest="30"
|
||||
WidthRequest="60"
|
||||
HeightRequest="36"
|
||||
Aspect="AspectFit"
|
||||
HorizontalOptions="CenterAndExpand"
|
||||
IsVisible="{Binding IsBatteryChargeLevelImageVisible}"
|
||||
|
|
|
@ -0,0 +1,313 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View.Bike.RentalProcess"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
x:Class="ShareeSharedGuiLib.View.Bike.RentalProcess.RentalProcess2StepsBar">
|
||||
|
||||
<ContentView.Resources>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
|
||||
<x:String x:Key="check"></x:String>
|
||||
<x:String x:Key="xmark"></x:String>
|
||||
</ContentView.Resources>
|
||||
|
||||
<ContentView.Content>
|
||||
|
||||
<Grid>
|
||||
|
||||
<!-- Progress bar finished-->
|
||||
<Grid
|
||||
Grid.Row="0"
|
||||
IsVisible="False">
|
||||
|
||||
<Grid.Triggers>
|
||||
<MultiTrigger TargetType="Grid">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</MultiTrigger>
|
||||
</Grid.Triggers>
|
||||
|
||||
<sharedGui:RentalProcessStepBarFinished/>
|
||||
|
||||
</Grid>
|
||||
|
||||
<!-- 2 Steps Progress bar -->
|
||||
<Grid
|
||||
Grid.Row="0"
|
||||
IsVisible="True"
|
||||
ColumnDefinitions="*,*">
|
||||
|
||||
<Grid.Triggers>
|
||||
<MultiTrigger TargetType="Grid">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</MultiTrigger>
|
||||
</Grid.Triggers>
|
||||
|
||||
<!--1st step-->
|
||||
<Grid
|
||||
Grid.Column="0"
|
||||
RowDefinitions="40,10"
|
||||
RowSpacing="0">
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
BackgroundColor="{DynamicResource process-step-upcoming}"
|
||||
Padding="0">
|
||||
<Frame.Triggers>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
</Frame.Triggers>
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center">
|
||||
<Label
|
||||
Text="1"
|
||||
TextColor="White"
|
||||
FontAttributes="Bold"/>
|
||||
<Image
|
||||
IsVisible="False">
|
||||
<Image.Triggers>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="1">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="2">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource xmark}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
</Image.Triggers>
|
||||
</Image>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
<Polygon
|
||||
Grid.Row="1"
|
||||
Points="0,0 20,0 10,10"
|
||||
IsVisible="False"
|
||||
HorizontalOptions="Center">
|
||||
<Polygon.Triggers>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.None}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</MultiTrigger>
|
||||
</Polygon.Triggers>
|
||||
</Polygon>
|
||||
</Grid>
|
||||
|
||||
<!--2nd step-->
|
||||
<Grid
|
||||
Grid.Column="1"
|
||||
RowDefinitions="40,10"
|
||||
RowSpacing="0">
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
BackgroundColor="{DynamicResource process-step-upcoming}"
|
||||
Padding="0">
|
||||
<Frame.Triggers>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-upcoming}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
</Frame.Triggers>
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center">
|
||||
<Label
|
||||
Text="2"
|
||||
TextColor="White"
|
||||
FontAttributes="Bold"/>
|
||||
<Image
|
||||
IsVisible="False">
|
||||
<Image.Triggers>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="2">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource xmark}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
</Image.Triggers>
|
||||
</Image>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
<Polygon
|
||||
Grid.Row="1"
|
||||
Points="0,0 20,0 10,10"
|
||||
IsVisible="False"
|
||||
HorizontalOptions="Center">
|
||||
<Polygon.Triggers>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.None}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</MultiTrigger>
|
||||
</Polygon.Triggers>
|
||||
</Polygon>
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentView.Content>
|
||||
|
||||
</ContentView>
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace ShareeSharedGuiLib.View.Bike.RentalProcess
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class RentalProcess2StepsBar : ContentView
|
||||
{
|
||||
public RentalProcess2StepsBar ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,483 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View.Bike.RentalProcess"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
x:Class="ShareeSharedGuiLib.View.Bike.RentalProcess.RentalProcess3StepsBar">
|
||||
|
||||
<ContentView.Resources>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
|
||||
<x:String x:Key="check"></x:String>
|
||||
<x:String x:Key="xmark"></x:String>
|
||||
</ContentView.Resources>
|
||||
|
||||
<ContentView.Content>
|
||||
|
||||
<Grid>
|
||||
|
||||
<!-- Progress bar finished-->
|
||||
<Grid
|
||||
Grid.Row="0"
|
||||
IsVisible="False">
|
||||
|
||||
<Grid.Triggers>
|
||||
<MultiTrigger TargetType="Grid">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</MultiTrigger>
|
||||
</Grid.Triggers>
|
||||
|
||||
<sharedGui:RentalProcessStepBarFinished/>
|
||||
|
||||
</Grid>
|
||||
|
||||
<!-- 3 Steps Progress bar -->
|
||||
<Grid
|
||||
Grid.Row="0"
|
||||
IsVisible="True"
|
||||
ColumnDefinitions="*,*,*">
|
||||
|
||||
<Grid.Triggers>
|
||||
<MultiTrigger TargetType="Grid">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</MultiTrigger>
|
||||
</Grid.Triggers>
|
||||
|
||||
<!--1st step-->
|
||||
<Grid
|
||||
Grid.Column="0"
|
||||
RowDefinitions="40,10"
|
||||
RowSpacing="0">
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
BackgroundColor="{DynamicResource process-step-upcoming}"
|
||||
Padding="0">
|
||||
<Frame.Triggers>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
</Frame.Triggers>
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center">
|
||||
<Label
|
||||
Text="1"
|
||||
TextColor="White"
|
||||
FontAttributes="Bold"/>
|
||||
<Image
|
||||
IsVisible="False">
|
||||
<Image.Triggers>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="1">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="2">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="3">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource xmark}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
</Image.Triggers>
|
||||
</Image>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
<Polygon
|
||||
Grid.Row="1"
|
||||
Points="0,0 20,0 10,10"
|
||||
IsVisible="False"
|
||||
HorizontalOptions="Center">
|
||||
<Polygon.Triggers>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.None}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</MultiTrigger>
|
||||
</Polygon.Triggers>
|
||||
</Polygon>
|
||||
</Grid>
|
||||
|
||||
<!--2nd step-->
|
||||
<Grid
|
||||
Grid.Column="1"
|
||||
RowDefinitions="40,10"
|
||||
RowSpacing="0">
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
BackgroundColor="{DynamicResource process-step-upcoming}"
|
||||
Padding="0">
|
||||
<Frame.Triggers>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-upcoming}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
</Frame.Triggers>
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center">
|
||||
<Label
|
||||
Text="2"
|
||||
TextColor="White"
|
||||
FontAttributes="Bold"/>
|
||||
<Image
|
||||
IsVisible="False">
|
||||
<Image.Triggers>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="2">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="3">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource xmark}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
</Image.Triggers>
|
||||
</Image>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
<Polygon
|
||||
Grid.Row="1"
|
||||
Points="0,0 20,0 10,10"
|
||||
IsVisible="False"
|
||||
HorizontalOptions="Center">
|
||||
<Polygon.Triggers>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.None}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</MultiTrigger>
|
||||
</Polygon.Triggers>
|
||||
</Polygon>
|
||||
</Grid>
|
||||
|
||||
<!--3rd step-->
|
||||
<Grid
|
||||
Grid.Column="2"
|
||||
RowDefinitions="40,10"
|
||||
RowSpacing="0">
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
BackgroundColor="{DynamicResource process-step-upcoming}"
|
||||
Padding="0">
|
||||
<Frame.Triggers>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-upcoming}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-upcoming}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-succeeded}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Frame">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="BackgroundColor" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
</Frame.Triggers>
|
||||
<StackLayout
|
||||
Orientation="Horizontal"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center">
|
||||
<Label
|
||||
Text="3"
|
||||
TextColor="White"
|
||||
FontAttributes="Bold"/>
|
||||
<Image
|
||||
IsVisible="False">
|
||||
<Image.Triggers>
|
||||
<DataTrigger TargetType="Image" Binding="{Binding RentalProcess.StepIndex}" Value="3">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource xmark}"
|
||||
FontFamily="FA-S"
|
||||
Size="Small"
|
||||
Color="White"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
</Image.Triggers>
|
||||
</Image>
|
||||
</StackLayout>
|
||||
</Frame>
|
||||
<Polygon
|
||||
Grid.Row="1"
|
||||
Points="0,0 20,0 10,10"
|
||||
IsVisible="False"
|
||||
HorizontalOptions="Center">
|
||||
<Polygon.Triggers>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.None}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-active}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Failed}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
<Setter Property="Fill" Value="{DynamicResource process-step-failed}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Polygon">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
</MultiTrigger>
|
||||
</Polygon.Triggers>
|
||||
</Polygon>
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentView.Content>
|
||||
|
||||
</ContentView>
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace ShareeSharedGuiLib.View.Bike.RentalProcess
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class RentalProcess3StepsBar : ContentView
|
||||
{
|
||||
public RentalProcess3StepsBar ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
x:Class="ShareeSharedGuiLib.View.Bike.RentalProcess.RentalProcessBikeInfo">
|
||||
|
||||
<ContentView.Resources>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
|
||||
</ContentView.Resources>
|
||||
|
||||
<ContentView.Content>
|
||||
|
||||
<!--Bike info-->
|
||||
<Frame
|
||||
Padding="20,30,20,30"
|
||||
Margin="0,5,0,5"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
BackgroundColor="White">
|
||||
|
||||
<Grid
|
||||
ColumnDefinitions="Auto,*"
|
||||
RowDefinitions="Auto,Auto"
|
||||
RowSpacing="0">
|
||||
|
||||
<!-- Icon of the bike -->
|
||||
<Image
|
||||
Grid.Column="0"
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="2"
|
||||
Source="{Binding BikeInRentalProcess.DisplayedBikeImageSourceString}"
|
||||
HeightRequest="60"
|
||||
Aspect="AspectFit"
|
||||
HorizontalOptions="Start"
|
||||
VerticalOptions="End"/>
|
||||
|
||||
<!-- Name of the bike -->
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
FontAttributes="Bold"
|
||||
FontSize="Large"
|
||||
HorizontalTextAlignment="Right"
|
||||
IsVisible="{Binding BikeInRentalProcess.DisplayName, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding BikeInRentalProcess.DisplayName}"/>
|
||||
|
||||
<!-- Id of the bike -->
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
Grid.Row="1"
|
||||
FontAttributes="Bold"
|
||||
HorizontalTextAlignment="Right"
|
||||
VerticalTextAlignment="Start"
|
||||
IsVisible="{Binding BikeInRentalProcess.DisplayId, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
Text="{Binding BikeInRentalProcess.DisplayId}"/>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Frame>
|
||||
|
||||
</ContentView.Content>
|
||||
|
||||
</ContentView>
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace ShareeSharedGuiLib.View.Bike.RentalProcess
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class RentalProcessBikeInfo : ContentView
|
||||
{
|
||||
public RentalProcessBikeInfo ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,219 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View.Bike.RentalProcess"
|
||||
x:Class="ShareeSharedGuiLib.View.Bike.RentalProcess.RentalProcessBookedClosedEndRental"
|
||||
IsVisible="False">
|
||||
|
||||
<ContentView.Triggers>
|
||||
<DataTrigger TargetType="ContentView"
|
||||
Binding="{Binding RentalProcess.State}"
|
||||
Value="{x:Static rental_process:CurrentRentalProcess.EndRental}">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="ContentView"
|
||||
Binding="{Binding RentalProcess.State}"
|
||||
Value="{x:Static rental_process:CurrentRentalProcess.CloseLock}">
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
<Setter Property="HeightRequest" Value="0"/>
|
||||
</DataTrigger>
|
||||
</ContentView.Triggers>
|
||||
|
||||
<ContentView.Resources>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
|
||||
<x:String x:Key="Triangle"></x:String>
|
||||
<x:String x:Key="LocationServiceSymbol"></x:String>
|
||||
<x:String x:Key="Upload"></x:String>
|
||||
<x:String x:Key="WriteFeedback"></x:String>
|
||||
</ContentView.Resources>
|
||||
|
||||
<ContentView.Content>
|
||||
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="FillAndExpand"
|
||||
BackgroundColor="White"
|
||||
Padding="0"
|
||||
Margin="0">
|
||||
|
||||
<Grid RowDefinitions="60,Auto,Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!-- Title of rental process-->
|
||||
<Frame Grid.Row="0"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="FillAndExpand"
|
||||
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||
Padding="0"
|
||||
Margin="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.ActionReturn}"
|
||||
FontSize="Large"
|
||||
TextColor="White"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center"/>
|
||||
</Frame>
|
||||
|
||||
<!--Bike info-->
|
||||
<sharedGui:RentalProcessBikeInfo Grid.Row="1"/>
|
||||
|
||||
<!-- Progress bar -->
|
||||
<sharedGui:RentalProcess3StepsBar Grid.Row="2"/>
|
||||
|
||||
<!--EndRental Content-->
|
||||
<Grid Grid.Row="3"
|
||||
RowSpacing="10"
|
||||
RowDefinitions="Auto,1*,Auto"
|
||||
Margin="0,40,0,20">
|
||||
<Grid.Triggers>
|
||||
<MultiTrigger TargetType="Grid">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False"/>
|
||||
<Setter Property="HeightRequest" Value="0"/>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Grid">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
<BindingCondition Binding="{Binding RentalProcess.Result}" Value="{x:Static rental_process:CurrentStepStatus.Succeeded}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False"/>
|
||||
<Setter Property="HeightRequest" Value="0"/>
|
||||
</MultiTrigger>
|
||||
</Grid.Triggers>
|
||||
|
||||
<!--Step icon and Step text-->
|
||||
<Grid Grid.Row="0"
|
||||
Padding="30,0,0,0"
|
||||
ColumnDefinitions="20,Auto,1*,20"
|
||||
ColumnSpacing="10"
|
||||
HorizontalOptions="CenterAndExpand">
|
||||
|
||||
<!--Step icon-->
|
||||
<Image
|
||||
Grid.Column="1"
|
||||
HorizontalOptions="End">
|
||||
<Image.Triggers>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="1" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource LocationServiceSymbol}"
|
||||
FontFamily="FA-S"
|
||||
Size="40"
|
||||
Color="Black"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="3" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource Upload}"
|
||||
FontFamily="FA-S"
|
||||
Size="40"
|
||||
Color="Black"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
</Image.Triggers>
|
||||
</Image>
|
||||
|
||||
<!--Step text-->
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
TextType="Html"
|
||||
Text="{Binding RentalProcess.StepInfoText}"
|
||||
FontSize="Large"
|
||||
HorizontalOptions="StartAndExpand"
|
||||
VerticalOptions="Center"
|
||||
TextColor="Black"
|
||||
Padding="0">
|
||||
</Label>
|
||||
|
||||
</Grid>
|
||||
|
||||
<!--Spinner & Info text-->
|
||||
<StackLayout Grid.Row="1"
|
||||
Margin="30,30,30,0"
|
||||
Spacing="30"
|
||||
IsVisible="True">
|
||||
|
||||
<!--Spinner-->
|
||||
<ActivityIndicator
|
||||
IsRunning="{Binding IsProcessWithRunningProcessView}"
|
||||
Scale="2"
|
||||
HorizontalOptions="Center"
|
||||
Color="{x:DynamicResource primary-back-title-color}"/>
|
||||
|
||||
<!--Info text-->
|
||||
<Label
|
||||
TextType="Html"
|
||||
Text="{Binding StatusInfoText}"
|
||||
FontSize="Medium"
|
||||
TextColor="DimGray"
|
||||
HorizontalOptions="CenterAndExpand"
|
||||
HorizontalTextAlignment="Center"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--Attention: Important info-->
|
||||
<Frame Grid.Row="2"
|
||||
Margin="0,20,0,60"
|
||||
Padding="10"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
HasShadow="False"
|
||||
IsVisible="{Binding RentalProcess.ImportantStepInfoText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
BackgroundColor="{DynamicResource important-text-color}">
|
||||
|
||||
<Grid
|
||||
ColumnDefinitions="20,*,Auto,20"
|
||||
RowDefinitions="Auto">
|
||||
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
HorizontalOptions="End"
|
||||
IsVisible="True"
|
||||
TextColor="White"
|
||||
FontSize="Large"
|
||||
|
||||
Text="{Binding RentalProcess.ImportantStepInfoText}"
|
||||
FontAttributes="Bold">
|
||||
</Label>
|
||||
|
||||
<Image
|
||||
Grid.Column="2"
|
||||
HorizontalOptions="Start">
|
||||
<Image.Source>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource Triangle}"
|
||||
FontFamily="FA-S"
|
||||
Size="40"
|
||||
Color="White"/>
|
||||
</Image.Source>
|
||||
</Image>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Frame>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Frame>
|
||||
|
||||
</ContentView.Content>
|
||||
|
||||
</ContentView>
|
|
@ -0,0 +1,21 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
#if !NOXCT
|
||||
namespace ShareeSharedGuiLib.View.Bike.RentalProcess
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class RentalProcessBookedClosedEndRental : ContentView
|
||||
{
|
||||
public RentalProcessBookedClosedEndRental()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
||||
# endif
|
|
@ -0,0 +1,209 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
xmlns:sharedGui="clr-namespace:ShareeSharedGuiLib.View.Bike.RentalProcess"
|
||||
x:Class="ShareeSharedGuiLib.View.Bike.RentalProcess.RentalProcessBookedOpenCloseLock"
|
||||
IsVisible="False">
|
||||
|
||||
<ContentView.Triggers>
|
||||
<DataTrigger TargetType="ContentView"
|
||||
Binding="{Binding RentalProcess.State}"
|
||||
Value="{x:Static rental_process:CurrentRentalProcess.CloseLock}">
|
||||
<Setter Property="IsVisible" Value="True" />
|
||||
</DataTrigger>
|
||||
<DataTrigger TargetType="ContentView"
|
||||
Binding="{Binding RentalProcess.State}"
|
||||
Value="{x:Static rental_process:CurrentRentalProcess.EndRental}">
|
||||
<Setter Property="IsVisible" Value="False" />
|
||||
<Setter Property="HeightRequest" Value="0"/>
|
||||
</DataTrigger>
|
||||
</ContentView.Triggers>
|
||||
|
||||
<ContentView.Resources>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
|
||||
<x:String x:Key="Glasses"></x:String>
|
||||
<x:String x:Key="Bluetooth"></x:String>
|
||||
<x:String x:Key="Upload"></x:String>
|
||||
</ContentView.Resources>
|
||||
|
||||
<ContentView.Content>
|
||||
|
||||
<Frame
|
||||
Grid.Row="0"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="FillAndExpand"
|
||||
BackgroundColor="White"
|
||||
Padding="0"
|
||||
Margin="0">
|
||||
|
||||
<Grid RowDefinitions="60,Auto,Auto,1*"
|
||||
RowSpacing="0">
|
||||
|
||||
<!-- Title of rental process -->
|
||||
<Frame Grid.Row="0"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
VerticalOptions="FillAndExpand"
|
||||
BackgroundColor="{DynamicResource primary-back-title-color}"
|
||||
Padding="0"
|
||||
Margin="0">
|
||||
<Label
|
||||
Text="{x:Static resources:AppResources.ActionClose}"
|
||||
FontSize="Large"
|
||||
TextColor="White"
|
||||
HorizontalOptions="Center"
|
||||
VerticalOptions="Center"/>
|
||||
</Frame>
|
||||
|
||||
<!--Bike info-->
|
||||
<sharedGui:RentalProcessBikeInfo Grid.Row="1"/>
|
||||
|
||||
<!-- Progress bar -->
|
||||
<sharedGui:RentalProcess2StepsBar Grid.Row="2"/>
|
||||
|
||||
<!--CloseLock Content-->
|
||||
<Grid Grid.Row="3"
|
||||
RowSpacing="10"
|
||||
RowDefinitions="Auto,1*,Auto"
|
||||
Margin="0,40,0,20">
|
||||
<Grid.Triggers>
|
||||
<MultiTrigger TargetType="Grid">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepIndex}" Value="2" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="IsVisible" Value="False"/>
|
||||
<Setter Property="HeightRequest" Value="0"/>
|
||||
</MultiTrigger>
|
||||
</Grid.Triggers>
|
||||
|
||||
<!--Step-->
|
||||
<Grid Grid.Row="0"
|
||||
Padding="30,0,0,0"
|
||||
ColumnDefinitions="20,Auto,1*,20"
|
||||
ColumnSpacing="10"
|
||||
HorizontalOptions="CenterAndExpand">
|
||||
|
||||
<!--Step icon-->
|
||||
<Image
|
||||
Grid.Column="1"
|
||||
HorizontalOptions="End">
|
||||
<Image.Triggers>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepInfoText}" Value="{x:Static resources:AppResources.MarkingRentalProcessCloseLockStepCloseLock}"/>
|
||||
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource Bluetooth}"
|
||||
FontFamily="FA-B"
|
||||
Size="40"
|
||||
Color="Black"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Image">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.StepInfoText}" Value="{x:Static resources:AppResources.MarkingRentalProcessCloseLockStepUpload}"/>
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Source">
|
||||
<Setter.Value>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource Upload}"
|
||||
FontFamily="FA-S"
|
||||
Size="40"
|
||||
Color="Black"/>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</MultiTrigger>
|
||||
</Image.Triggers>
|
||||
</Image>
|
||||
|
||||
<!--Step text-->
|
||||
<Label
|
||||
Grid.Column="2"
|
||||
TextType="Html"
|
||||
Text="{Binding RentalProcess.StepInfoText}"
|
||||
FontSize="Large"
|
||||
HorizontalOptions="Start"
|
||||
VerticalOptions="Center"
|
||||
TextColor="Black"
|
||||
Padding="0">
|
||||
</Label>
|
||||
|
||||
</Grid>
|
||||
|
||||
<!--Spinner-->
|
||||
<StackLayout Grid.Row="1"
|
||||
Margin="30,30,30,0"
|
||||
Spacing="30">
|
||||
|
||||
<!--Spinner-->
|
||||
<ActivityIndicator
|
||||
IsRunning="{Binding IsProcessWithRunningProcessView}"
|
||||
Scale="2"
|
||||
HorizontalOptions="Center"
|
||||
Color="{x:DynamicResource primary-back-title-color}"/>
|
||||
|
||||
<!--Info text-->
|
||||
<Label
|
||||
TextType="Html"
|
||||
Text="{Binding StatusInfoText}"
|
||||
FontSize="Medium"
|
||||
TextColor="DimGray"
|
||||
HorizontalOptions="CenterAndExpand"
|
||||
HorizontalTextAlignment="Center"/>
|
||||
|
||||
</StackLayout>
|
||||
|
||||
<!--Attention: Important info-->
|
||||
<Frame Grid.Row="2"
|
||||
Margin="0,20,0,60"
|
||||
Padding="10"
|
||||
HorizontalOptions="FillAndExpand"
|
||||
HasShadow="False"
|
||||
IsVisible="{Binding RentalProcess.ImportantStepInfoText, Converter={StaticResource StringNotNullOrEmpty_Converter}}"
|
||||
BackgroundColor="{DynamicResource important-text-color}">
|
||||
|
||||
<Grid
|
||||
ColumnDefinitions="20,*,Auto,20"
|
||||
RowDefinitions="Auto">
|
||||
|
||||
<Label
|
||||
Grid.Column="1"
|
||||
HorizontalOptions="End"
|
||||
IsVisible="True"
|
||||
TextColor="White"
|
||||
FontSize="Large"
|
||||
Text="{Binding RentalProcess.ImportantStepInfoText}"
|
||||
FontAttributes="Bold">
|
||||
</Label>
|
||||
|
||||
<Image
|
||||
Grid.Column="2"
|
||||
HorizontalOptions="Start">
|
||||
<Image.Source>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource Glasses}"
|
||||
FontFamily="FA-S"
|
||||
Size="40"
|
||||
Color="White"/>
|
||||
</Image.Source>
|
||||
</Image>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Frame>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
|
||||
</Frame>
|
||||
|
||||
</ContentView.Content>
|
||||
|
||||
</ContentView>
|
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace ShareeSharedGuiLib.View.Bike.RentalProcess
|
||||
{
|
||||
#if !NOXCT
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class RentalProcessBookedOpenCloseLock : ContentView
|
||||
{
|
||||
|
||||
public RentalProcessBookedOpenCloseLock()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:conv="clr-namespace:TINK.View"
|
||||
xmlns:rental_process="clr-namespace:TINK.ViewModel.Bikes;assembly=TINKLib"
|
||||
xmlns:resources="clr-namespace:TINK.MultilingualResources;assembly=TINKLib"
|
||||
x:Class="ShareeSharedGuiLib.View.Bike.RentalProcess.RentalProcessStepBarFinished">
|
||||
|
||||
<ContentView.Resources>
|
||||
<conv:StringNotNullOrEmptyToVisibleConverter x:Key="StringNotNullOrEmpty_Converter"/>
|
||||
<x:String x:Key="check"></x:String>
|
||||
<x:String x:Key="xmark"></x:String>
|
||||
</ContentView.Resources>
|
||||
|
||||
<ContentView.Content>
|
||||
|
||||
<!-- Progress bar -->
|
||||
<Grid
|
||||
ColumnDefinitions="1*,80,40"
|
||||
RowDefinitions="15,50,15"
|
||||
RowSpacing="0">
|
||||
|
||||
<Frame
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
Grid.Row="1"
|
||||
BackgroundColor="{DynamicResource process-step-succeeded}"
|
||||
Padding="0">
|
||||
|
||||
<Label
|
||||
Padding="40,0,0,0"
|
||||
VerticalOptions="Center"
|
||||
TextColor="White"
|
||||
FontAttributes="Bold"
|
||||
Text="">
|
||||
<Label.Triggers>
|
||||
<MultiTrigger TargetType="Label">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.State}" Value="{x:Static rental_process:CurrentRentalProcess.CloseLock}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Text" Value="{x:Static resources:AppResources.StatusTextLockClosed}" />
|
||||
</MultiTrigger>
|
||||
<MultiTrigger TargetType="Label">
|
||||
<MultiTrigger.Conditions>
|
||||
<BindingCondition Binding="{Binding RentalProcess.State}" Value="{x:Static rental_process:CurrentRentalProcess.EndRental}" />
|
||||
</MultiTrigger.Conditions>
|
||||
<Setter Property="Text" Value="{x:Static resources:AppResources.StatusTextRentalEnded}" />
|
||||
</MultiTrigger>
|
||||
</Label.Triggers>
|
||||
</Label>
|
||||
|
||||
</Frame>
|
||||
|
||||
<Frame
|
||||
Grid.Column="1"
|
||||
Grid.Row="0"
|
||||
Grid.RowSpan="3"
|
||||
BackgroundColor="{DynamicResource process-step-succeeded}"
|
||||
BorderColor="White"
|
||||
CornerRadius="40">
|
||||
<Image>
|
||||
<Image.Source>
|
||||
<FontImageSource
|
||||
Glyph="{StaticResource check}"
|
||||
FontFamily="FA-S"
|
||||
Size="Large"
|
||||
Color="White"/>
|
||||
</Image.Source>
|
||||
</Image>
|
||||
</Frame>
|
||||
|
||||
</Grid>
|
||||
|
||||
</ContentView.Content>
|
||||
|
||||
</ContentView>
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace ShareeSharedGuiLib.View.Bike.RentalProcess
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class RentalProcessStepBarFinished : ContentView
|
||||
{
|
||||
public RentalProcessStepBarFinished ()
|
||||
{
|
||||
InitializeComponent ();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,7 +19,7 @@
|
|||
</DataTrigger>
|
||||
</StackLayout.Triggers>
|
||||
|
||||
<Label Text="{x:Static resources:AppResources.MarkingNoNetworkConnection}"
|
||||
<Label Text="{x:Static resources:AppResources.MarkingNoWeb}"
|
||||
TextColor="White"
|
||||
FontSize="Small"
|
||||
Padding="5"
|
||||
|
|
|
@ -14,6 +14,7 @@ using Xamarin.Forms.Platform.Android.AppLinks;
|
|||
using static Xamarin.Essentials.Permissions;
|
||||
using Xamarin.Essentials;
|
||||
using Android.Runtime;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace TINK.Droid
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.369" android:versionCode="369">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.370" android:versionCode="370">
|
||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="33" />
|
||||
<!-- Google Maps related permissions -->
|
||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||
|
|
141
TINK/TINK.Android/Resources/Resource.Designer.cs
generated
|
@ -14,7 +14,7 @@ namespace TINK.Droid
|
|||
{
|
||||
|
||||
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.1.111")]
|
||||
public partial class Resource
|
||||
{
|
||||
|
||||
|
@ -24011,208 +24011,211 @@ namespace TINK.Droid
|
|||
public const int ic_vol_unmute = 2131165510;
|
||||
|
||||
// aapt resource value: 0x7F070147
|
||||
public const int material_cursor_drawable = 2131165511;
|
||||
public const int Location_Button = 2131165511;
|
||||
|
||||
// aapt resource value: 0x7F070148
|
||||
public const int material_ic_calendar_black_24dp = 2131165512;
|
||||
public const int material_cursor_drawable = 2131165512;
|
||||
|
||||
// aapt resource value: 0x7F070149
|
||||
public const int material_ic_clear_black_24dp = 2131165513;
|
||||
public const int material_ic_calendar_black_24dp = 2131165513;
|
||||
|
||||
// aapt resource value: 0x7F07014A
|
||||
public const int material_ic_edit_black_24dp = 2131165514;
|
||||
public const int material_ic_clear_black_24dp = 2131165514;
|
||||
|
||||
// aapt resource value: 0x7F07014B
|
||||
public const int material_ic_keyboard_arrow_left_black_24dp = 2131165515;
|
||||
public const int material_ic_edit_black_24dp = 2131165515;
|
||||
|
||||
// aapt resource value: 0x7F07014C
|
||||
public const int material_ic_keyboard_arrow_next_black_24dp = 2131165516;
|
||||
public const int material_ic_keyboard_arrow_left_black_24dp = 2131165516;
|
||||
|
||||
// aapt resource value: 0x7F07014D
|
||||
public const int material_ic_keyboard_arrow_previous_black_24dp = 2131165517;
|
||||
public const int material_ic_keyboard_arrow_next_black_24dp = 2131165517;
|
||||
|
||||
// aapt resource value: 0x7F07014E
|
||||
public const int material_ic_keyboard_arrow_right_black_24dp = 2131165518;
|
||||
public const int material_ic_keyboard_arrow_previous_black_24dp = 2131165518;
|
||||
|
||||
// aapt resource value: 0x7F07014F
|
||||
public const int material_ic_menu_arrow_down_black_24dp = 2131165519;
|
||||
public const int material_ic_keyboard_arrow_right_black_24dp = 2131165519;
|
||||
|
||||
// aapt resource value: 0x7F070150
|
||||
public const int material_ic_menu_arrow_up_black_24dp = 2131165520;
|
||||
public const int material_ic_menu_arrow_down_black_24dp = 2131165520;
|
||||
|
||||
// aapt resource value: 0x7F070151
|
||||
public const int mr_button_connected_dark = 2131165521;
|
||||
public const int material_ic_menu_arrow_up_black_24dp = 2131165521;
|
||||
|
||||
// aapt resource value: 0x7F070152
|
||||
public const int mr_button_connected_light = 2131165522;
|
||||
public const int mr_button_connected_dark = 2131165522;
|
||||
|
||||
// aapt resource value: 0x7F070153
|
||||
public const int mr_button_connecting_dark = 2131165523;
|
||||
public const int mr_button_connected_light = 2131165523;
|
||||
|
||||
// aapt resource value: 0x7F070154
|
||||
public const int mr_button_connecting_light = 2131165524;
|
||||
public const int mr_button_connecting_dark = 2131165524;
|
||||
|
||||
// aapt resource value: 0x7F070155
|
||||
public const int mr_button_dark = 2131165525;
|
||||
public const int mr_button_connecting_light = 2131165525;
|
||||
|
||||
// aapt resource value: 0x7F070156
|
||||
public const int mr_button_dark_static = 2131165526;
|
||||
public const int mr_button_dark = 2131165526;
|
||||
|
||||
// aapt resource value: 0x7F070157
|
||||
public const int mr_button_light = 2131165527;
|
||||
public const int mr_button_dark_static = 2131165527;
|
||||
|
||||
// aapt resource value: 0x7F070158
|
||||
public const int mr_button_light_static = 2131165528;
|
||||
public const int mr_button_light = 2131165528;
|
||||
|
||||
// aapt resource value: 0x7F070159
|
||||
public const int mr_cast_checkbox = 2131165529;
|
||||
public const int mr_button_light_static = 2131165529;
|
||||
|
||||
// aapt resource value: 0x7F07015A
|
||||
public const int mr_cast_group_seekbar_track = 2131165530;
|
||||
public const int mr_cast_checkbox = 2131165530;
|
||||
|
||||
// aapt resource value: 0x7F07015B
|
||||
public const int mr_cast_mute_button = 2131165531;
|
||||
public const int mr_cast_group_seekbar_track = 2131165531;
|
||||
|
||||
// aapt resource value: 0x7F07015C
|
||||
public const int mr_cast_route_seekbar_track = 2131165532;
|
||||
public const int mr_cast_mute_button = 2131165532;
|
||||
|
||||
// aapt resource value: 0x7F07015D
|
||||
public const int mr_cast_stop = 2131165533;
|
||||
public const int mr_cast_route_seekbar_track = 2131165533;
|
||||
|
||||
// aapt resource value: 0x7F07015E
|
||||
public const int mr_cast_thumb = 2131165534;
|
||||
public const int mr_cast_stop = 2131165534;
|
||||
|
||||
// aapt resource value: 0x7F07015F
|
||||
public const int mr_dialog_close_dark = 2131165535;
|
||||
public const int mr_cast_thumb = 2131165535;
|
||||
|
||||
// aapt resource value: 0x7F070160
|
||||
public const int mr_dialog_close_light = 2131165536;
|
||||
public const int mr_dialog_close_dark = 2131165536;
|
||||
|
||||
// aapt resource value: 0x7F070161
|
||||
public const int mr_dialog_material_background_dark = 2131165537;
|
||||
public const int mr_dialog_close_light = 2131165537;
|
||||
|
||||
// aapt resource value: 0x7F070162
|
||||
public const int mr_dialog_material_background_light = 2131165538;
|
||||
public const int mr_dialog_material_background_dark = 2131165538;
|
||||
|
||||
// aapt resource value: 0x7F070163
|
||||
public const int mr_group_collapse = 2131165539;
|
||||
public const int mr_dialog_material_background_light = 2131165539;
|
||||
|
||||
// aapt resource value: 0x7F070164
|
||||
public const int mr_group_expand = 2131165540;
|
||||
public const int mr_group_collapse = 2131165540;
|
||||
|
||||
// aapt resource value: 0x7F070165
|
||||
public const int mr_media_pause_dark = 2131165541;
|
||||
public const int mr_group_expand = 2131165541;
|
||||
|
||||
// aapt resource value: 0x7F070166
|
||||
public const int mr_media_pause_light = 2131165542;
|
||||
public const int mr_media_pause_dark = 2131165542;
|
||||
|
||||
// aapt resource value: 0x7F070167
|
||||
public const int mr_media_play_dark = 2131165543;
|
||||
public const int mr_media_pause_light = 2131165543;
|
||||
|
||||
// aapt resource value: 0x7F070168
|
||||
public const int mr_media_play_light = 2131165544;
|
||||
public const int mr_media_play_dark = 2131165544;
|
||||
|
||||
// aapt resource value: 0x7F070169
|
||||
public const int mr_media_stop_dark = 2131165545;
|
||||
public const int mr_media_play_light = 2131165545;
|
||||
|
||||
// aapt resource value: 0x7F07016A
|
||||
public const int mr_media_stop_light = 2131165546;
|
||||
public const int mr_media_stop_dark = 2131165546;
|
||||
|
||||
// aapt resource value: 0x7F07016B
|
||||
public const int mr_vol_type_audiotrack_dark = 2131165547;
|
||||
public const int mr_media_stop_light = 2131165547;
|
||||
|
||||
// aapt resource value: 0x7F07016C
|
||||
public const int mr_vol_type_audiotrack_light = 2131165548;
|
||||
public const int mr_vol_type_audiotrack_dark = 2131165548;
|
||||
|
||||
// aapt resource value: 0x7F07016D
|
||||
public const int mtrl_dialog_background = 2131165549;
|
||||
public const int mr_vol_type_audiotrack_light = 2131165549;
|
||||
|
||||
// aapt resource value: 0x7F07016E
|
||||
public const int mtrl_dropdown_arrow = 2131165550;
|
||||
public const int mtrl_dialog_background = 2131165550;
|
||||
|
||||
// aapt resource value: 0x7F07016F
|
||||
public const int mtrl_ic_arrow_drop_down = 2131165551;
|
||||
public const int mtrl_dropdown_arrow = 2131165551;
|
||||
|
||||
// aapt resource value: 0x7F070170
|
||||
public const int mtrl_ic_arrow_drop_up = 2131165552;
|
||||
public const int mtrl_ic_arrow_drop_down = 2131165552;
|
||||
|
||||
// aapt resource value: 0x7F070171
|
||||
public const int mtrl_ic_cancel = 2131165553;
|
||||
public const int mtrl_ic_arrow_drop_up = 2131165553;
|
||||
|
||||
// aapt resource value: 0x7F070172
|
||||
public const int mtrl_ic_error = 2131165554;
|
||||
public const int mtrl_ic_cancel = 2131165554;
|
||||
|
||||
// aapt resource value: 0x7F070173
|
||||
public const int mtrl_navigation_bar_item_background = 2131165555;
|
||||
public const int mtrl_ic_error = 2131165555;
|
||||
|
||||
// aapt resource value: 0x7F070174
|
||||
public const int mtrl_popupmenu_background = 2131165556;
|
||||
public const int mtrl_navigation_bar_item_background = 2131165556;
|
||||
|
||||
// aapt resource value: 0x7F070175
|
||||
public const int mtrl_popupmenu_background_dark = 2131165557;
|
||||
public const int mtrl_popupmenu_background = 2131165557;
|
||||
|
||||
// aapt resource value: 0x7F070176
|
||||
public const int mtrl_tabs_default_indicator = 2131165558;
|
||||
public const int mtrl_popupmenu_background_dark = 2131165558;
|
||||
|
||||
// aapt resource value: 0x7F070177
|
||||
public const int navigation_empty_icon = 2131165559;
|
||||
public const int mtrl_tabs_default_indicator = 2131165559;
|
||||
|
||||
// aapt resource value: 0x7F070178
|
||||
public const int notification_action_background = 2131165560;
|
||||
public const int navigation_empty_icon = 2131165560;
|
||||
|
||||
// aapt resource value: 0x7F070179
|
||||
public const int notification_bg = 2131165561;
|
||||
public const int notification_action_background = 2131165561;
|
||||
|
||||
// aapt resource value: 0x7F07017A
|
||||
public const int notification_bg_low = 2131165562;
|
||||
public const int notification_bg = 2131165562;
|
||||
|
||||
// aapt resource value: 0x7F07017B
|
||||
public const int notification_bg_low_normal = 2131165563;
|
||||
public const int notification_bg_low = 2131165563;
|
||||
|
||||
// aapt resource value: 0x7F07017C
|
||||
public const int notification_bg_low_pressed = 2131165564;
|
||||
public const int notification_bg_low_normal = 2131165564;
|
||||
|
||||
// aapt resource value: 0x7F07017D
|
||||
public const int notification_bg_normal = 2131165565;
|
||||
public const int notification_bg_low_pressed = 2131165565;
|
||||
|
||||
// aapt resource value: 0x7F07017E
|
||||
public const int notification_bg_normal_pressed = 2131165566;
|
||||
public const int notification_bg_normal = 2131165566;
|
||||
|
||||
// aapt resource value: 0x7F07017F
|
||||
public const int notification_icon_background = 2131165567;
|
||||
public const int notification_bg_normal_pressed = 2131165567;
|
||||
|
||||
// aapt resource value: 0x7F070180
|
||||
public const int notification_template_icon_bg = 2131165568;
|
||||
public const int notification_icon_background = 2131165568;
|
||||
|
||||
// aapt resource value: 0x7F070181
|
||||
public const int notification_template_icon_low_bg = 2131165569;
|
||||
public const int notification_template_icon_bg = 2131165569;
|
||||
|
||||
// aapt resource value: 0x7F070182
|
||||
public const int notification_tile_bg = 2131165570;
|
||||
public const int notification_template_icon_low_bg = 2131165570;
|
||||
|
||||
// aapt resource value: 0x7F070183
|
||||
public const int notify_panel_notification_icon_bg = 2131165571;
|
||||
public const int notification_tile_bg = 2131165571;
|
||||
|
||||
// aapt resource value: 0x7F070184
|
||||
public const int preference_list_divider_material = 2131165572;
|
||||
public const int notify_panel_notification_icon_bg = 2131165572;
|
||||
|
||||
// aapt resource value: 0x7F070185
|
||||
public const int sharee = 2131165573;
|
||||
public const int preference_list_divider_material = 2131165573;
|
||||
|
||||
// aapt resource value: 0x7F070186
|
||||
public const int sharee_no_background = 2131165574;
|
||||
public const int sharee = 2131165574;
|
||||
|
||||
// aapt resource value: 0x7F070187
|
||||
public const int test_custom_background = 2131165575;
|
||||
public const int sharee_no_background = 2131165575;
|
||||
|
||||
// aapt resource value: 0x7F070188
|
||||
public const int test_level_drawable = 2131165576;
|
||||
public const int test_custom_background = 2131165576;
|
||||
|
||||
// aapt resource value: 0x7F070189
|
||||
public const int tooltip_frame_dark = 2131165577;
|
||||
public const int test_level_drawable = 2131165577;
|
||||
|
||||
// aapt resource value: 0x7F07018A
|
||||
public const int tooltip_frame_light = 2131165578;
|
||||
public const int tooltip_frame_dark = 2131165578;
|
||||
|
||||
// aapt resource value: 0x7F07018B
|
||||
public const int tooltip_frame_light = 2131165579;
|
||||
|
||||
static Drawable()
|
||||
{
|
||||
|
|
|
@ -56,8 +56,8 @@
|
|||
<key>CFBundleDisplayName</key>
|
||||
<string>sharee.bike</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>369</string>
|
||||
<string>370</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.369</string>
|
||||
<string>3.0.370</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6245" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="X5k-f2-b5h">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
|
||||
|
@ -41,6 +41,5 @@
|
|||
<image name="Icon-76.png" width="76" height="76"/>
|
||||
<image name="Icon-Small-40.png" width="40" height="40"/>
|
||||
<image name="Icon-Small.png" width="29" height="29"/>
|
||||
<image name="tink2.png" width="208" height="208"/>
|
||||
</resources>
|
||||
</document>
|
||||
</document>
|
||||
|
|