mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2025-04-01 20:06:26 +02:00
Version 3.0.347
This commit is contained in:
parent
a018f21fea
commit
7f49fb0ac5
41 changed files with 292 additions and 187 deletions
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?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.346" android:versionCode="346">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.LastenradBayern" android:versionName="3.0.347" android:versionCode="347">
|
||||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="30" />
|
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="30" />
|
||||||
<!-- Google Maps related permissions -->
|
<!-- Google Maps related permissions -->
|
||||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||||
|
|
|
@ -55,8 +55,8 @@
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>LastenradBayern</string>
|
<string>LastenradBayern</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>346</string>
|
<string>347</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.346</string>
|
<string>3.0.347</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -40,8 +40,8 @@
|
||||||
<MtouchLink>SdkOnly</MtouchLink>
|
<MtouchLink>SdkOnly</MtouchLink>
|
||||||
<MtouchArch>x86_64</MtouchArch>
|
<MtouchArch>x86_64</MtouchArch>
|
||||||
<ConsolePause>false</ConsolePause>
|
<ConsolePause>false</ConsolePause>
|
||||||
<CodesignProvision>VS: com.TeilRad.LastenradBayern Development</CodesignProvision>
|
<CodesignProvision>LastenradBayern to App Store 3</CodesignProvision>
|
||||||
<CodesignKey>Apple Development: Oliver Hauff (8SZ7J9P24J)</CodesignKey>
|
<CodesignKey>Apple Distribution: TeilRad GmbH (LXJD6URCHR)</CodesignKey>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -69,9 +69,9 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<MtouchArch>ARM64</MtouchArch>
|
<MtouchArch>ARM64</MtouchArch>
|
||||||
<ConsolePause>false</ConsolePause>
|
<ConsolePause>false</ConsolePause>
|
||||||
<CodesignKey>Apple Development: Oliver Hauff (8SZ7J9P24J)</CodesignKey>
|
<CodesignKey>Apple Distribution: TeilRad GmbH (LXJD6URCHR)</CodesignKey>
|
||||||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
|
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
|
||||||
<CodesignProvision>VS: com.TeilRad.LastenradBayern Development</CodesignProvision>
|
<CodesignProvision>LastenradBayern to App Store 3</CodesignProvision>
|
||||||
<IpaIncludeArtwork>
|
<IpaIncludeArtwork>
|
||||||
</IpaIncludeArtwork>
|
</IpaIncludeArtwork>
|
||||||
<CrashReportingApiKey>
|
<CrashReportingApiKey>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?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.346" android:versionCode="346">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.TeilRad.Meinkonrad" android:versionName="3.0.347" android:versionCode="347">
|
||||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="30" />
|
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="30" />
|
||||||
<!-- Google Maps related permissions -->
|
<!-- Google Maps related permissions -->
|
||||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||||
|
|
|
@ -55,8 +55,8 @@
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>Mein konrad</string>
|
<string>Mein konrad</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>346</string>
|
<string>347</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.346</string>
|
<string>3.0.347</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?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.346" android:versionCode="346">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="com.hauffware.sharee" android:versionName="3.0.347" android:versionCode="347">
|
||||||
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="30" />
|
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="30" />
|
||||||
<!-- Google Maps related permissions -->
|
<!-- Google Maps related permissions -->
|
||||||
<!-- Permission to receive remote notifications from Google Play Services -->
|
<!-- Permission to receive remote notifications from Google Play Services -->
|
||||||
|
|
|
@ -55,8 +55,8 @@
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>sharee.bike</string>
|
<string>sharee.bike</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>346</string>
|
<string>347</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.346</string>
|
<string>3.0.347</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -40,8 +40,8 @@
|
||||||
<MtouchLink>SdkOnly</MtouchLink>
|
<MtouchLink>SdkOnly</MtouchLink>
|
||||||
<MtouchArch>x86_64</MtouchArch>
|
<MtouchArch>x86_64</MtouchArch>
|
||||||
<ConsolePause>false</ConsolePause>
|
<ConsolePause>false</ConsolePause>
|
||||||
<CodesignProvision>VS: com.TeilRad.sharee.bike Development</CodesignProvision>
|
<CodesignProvision>sharee.bike to App Store 3</CodesignProvision>
|
||||||
<CodesignKey>Apple Development: Oliver Hauff (8SZ7J9P24J)</CodesignKey>
|
<CodesignKey>Apple Distribution: TeilRad GmbH (LXJD6URCHR)</CodesignKey>
|
||||||
<MtouchSdkVersion>15.5</MtouchSdkVersion>
|
<MtouchSdkVersion>15.5</MtouchSdkVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
|
||||||
|
@ -70,9 +70,9 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<MtouchArch>ARM64</MtouchArch>
|
<MtouchArch>ARM64</MtouchArch>
|
||||||
<ConsolePause>false</ConsolePause>
|
<ConsolePause>false</ConsolePause>
|
||||||
<CodesignKey>Apple Development: Oliver Hauff (8SZ7J9P24J)</CodesignKey>
|
<CodesignKey>Apple Distribution: TeilRad GmbH (LXJD6URCHR)</CodesignKey>
|
||||||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
|
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
|
||||||
<CodesignProvision>VS: com.TeilRad.sharee.bike Development</CodesignProvision>
|
<CodesignProvision>sharee.bike to App Store 3</CodesignProvision>
|
||||||
<IpaIncludeArtwork>
|
<IpaIncludeArtwork>
|
||||||
</IpaIncludeArtwork>
|
</IpaIncludeArtwork>
|
||||||
<CrashReportingApiKey>
|
<CrashReportingApiKey>
|
||||||
|
|
|
@ -616,13 +616,13 @@ namespace TINK.Model
|
||||||
new List<AppFlavor> { AppFlavor.LastenradBayern }
|
new List<AppFlavor> { AppFlavor.LastenradBayern }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
new Version(3, 0, 346),
|
new Version(3, 0, 347),
|
||||||
AppResources.ChangeLog_3_0_346_LB_MK,
|
AppResources.ChangeLog_3_0_347_LB_MK,
|
||||||
new List<AppFlavor> { AppFlavor.LastenradBayern, AppFlavor.MeinKonrad }
|
new List<AppFlavor> { AppFlavor.LastenradBayern, AppFlavor.MeinKonrad }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
new Version(3, 0, 346),
|
new Version(3, 0, 347),
|
||||||
AppResources.ChangeLog_3_0_346_SB,
|
AppResources.ChangeLog_3_0_347_SB,
|
||||||
new List<AppFlavor> { AppFlavor.ShareeBike }
|
new List<AppFlavor> { AppFlavor.ShareeBike }
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -669,11 +669,12 @@ namespace TINK.MultilingualResources {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to <i>Select Bike</i> page revised..
|
/// Looks up a localized string similar to <i>Select Bike</i> page revised.<br/>
|
||||||
|
///Minor improvements.<br/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string ChangeLog_3_0_346_LB_MK {
|
public static string ChangeLog_3_0_347_LB_MK {
|
||||||
get {
|
get {
|
||||||
return ResourceManager.GetString("ChangeLog_3_0_346_LB_MK", resourceCulture);
|
return ResourceManager.GetString("ChangeLog_3_0_347_LB_MK", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -684,11 +685,12 @@ namespace TINK.MultilingualResources {
|
||||||
///<li/><i>Bike Locations</i> or
|
///<li/><i>Bike Locations</i> or
|
||||||
///<li/><i>Select Bike</i>
|
///<li/><i>Select Bike</i>
|
||||||
///</ul>
|
///</ul>
|
||||||
///page..
|
///page.<br/>
|
||||||
|
///Minor improvements.<br/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string ChangeLog_3_0_346_SB {
|
public static string ChangeLog_3_0_347_SB {
|
||||||
get {
|
get {
|
||||||
return ResourceManager.GetString("ChangeLog_3_0_346_SB", resourceCulture);
|
return ResourceManager.GetString("ChangeLog_3_0_347_SB", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1500,6 +1502,15 @@ namespace TINK.MultilingualResources {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Not connected to network..
|
||||||
|
/// </summary>
|
||||||
|
public static string ErrorNotConnectedToNetwork {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ErrorNotConnectedToNetwork", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Lock is blocked. Please ensure that no obstacle prevents lock from opening and try again..
|
/// Looks up a localized string similar to Lock is blocked. Please ensure that no obstacle prevents lock from opening and try again..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1721,7 +1732,7 @@ namespace TINK.MultilingualResources {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Is WIFI available/ mobile networt available and mobile data activated / ... ?.
|
/// Looks up a localized string similar to Is WIFI available/ mobile network available and mobile data activated / ... ?.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static string ExceptionTextWebConnectFailureException {
|
public static string ExceptionTextWebConnectFailureException {
|
||||||
get {
|
get {
|
||||||
|
|
|
@ -1066,16 +1066,23 @@ Sie können nun auf einen Blick sehen, welche App-Version Sie installiert haben:
|
||||||
<data name="MarkingStartupPage" xml:space="preserve">
|
<data name="MarkingStartupPage" xml:space="preserve">
|
||||||
<value>Startseite</value>
|
<value>Startseite</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeLog_3_0_346_LB_MK" xml:space="preserve">
|
<data name="ChangeLog_3_0_347_LB_MK" xml:space="preserve">
|
||||||
<value><i>Rad auswählen</i> Seite überarbeitet.</value>
|
<value><i>Rad auswählen</i> Seite überarbeitet.<br/>
|
||||||
|
Kleinere Verbesserungen.<br/>
|
||||||
|
|
||||||
|
</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeLog_3_0_346_SB" xml:space="preserve">
|
<data name="ErrorNotConnectedToNetwork" xml:space="preserve">
|
||||||
|
<value>Keine Verbindung zum Netzwerk.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ChangeLog_3_0_347_SB" xml:space="preserve">
|
||||||
<value><i>Rad auswählen</i>- Seite überarbeitet.<br/>
|
<value><i>Rad auswählen</i>- Seite überarbeitet.<br/>
|
||||||
Einstellung hinzugefügt mit der festgelegt werden kann, ob die App mit der Seite
|
Einstellung hinzugefügt mit der festgelegt werden kann, ob die App mit der Seite
|
||||||
<ul>
|
<ul>
|
||||||
<li/><i>Radstandorte</i> oder
|
<li/><i>Radstandorte</i> oder
|
||||||
<li/><i>Rad auswählen</i>
|
<li/><i>Rad auswählen</i>
|
||||||
</ul>
|
</ul>
|
||||||
gestartet wird.</value>
|
gestartet wird.<br/>
|
||||||
|
Kleinere Verbesserungen.<br/></value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -941,7 +941,7 @@ Activity indicator added account management pages and logging extended.</value>
|
||||||
<value>Starting bike return...</value>
|
<value>Starting bike return...</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ExceptionTextWebConnectFailureException" xml:space="preserve">
|
<data name="ExceptionTextWebConnectFailureException" xml:space="preserve">
|
||||||
<value>Is WIFI available/ mobile networt available and mobile data activated / ... ?</value>
|
<value>Is WIFI available/ mobile network available and mobile data activated / ... ?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeLog3_0_289" xml:space="preserve">
|
<data name="ChangeLog3_0_289" xml:space="preserve">
|
||||||
<value>Flyout menu header improved.</value>
|
<value>Flyout menu header improved.</value>
|
||||||
|
@ -1158,16 +1158,21 @@ You can now see at a glance which app version you have installed: in the menu at
|
||||||
<data name="MarkingStartupPage" xml:space="preserve">
|
<data name="MarkingStartupPage" xml:space="preserve">
|
||||||
<value>Startup page</value>
|
<value>Startup page</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeLog_3_0_346_LB_MK" xml:space="preserve">
|
<data name="ChangeLog_3_0_347_LB_MK" xml:space="preserve">
|
||||||
<value><i>Select Bike</i> page revised.</value>
|
<value><i>Select Bike</i> page revised.<br/>
|
||||||
|
Minor improvements.<br/></value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ChangeLog_3_0_346_SB" xml:space="preserve">
|
<data name="ChangeLog_3_0_347_SB" xml:space="preserve">
|
||||||
<value><i>Select Bike</i>- page revised.<br/>
|
<value><i>Select Bike</i>- page revised.<br/>
|
||||||
Setting added to select whether the app starts up showing either
|
Setting added to select whether the app starts up showing either
|
||||||
<ul>
|
<ul>
|
||||||
<li/><i>Bike Locations</i> or
|
<li/><i>Bike Locations</i> or
|
||||||
<li/><i>Select Bike</i>
|
<li/><i>Select Bike</i>
|
||||||
</ul>
|
</ul>
|
||||||
page.</value>
|
page.<br/>
|
||||||
|
Minor improvements.<br/></value>
|
||||||
|
</data>
|
||||||
|
<data name="ErrorNotConnectedToNetwork" xml:space="preserve">
|
||||||
|
<value>Not connected to network.</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
||||||
|
|
|
@ -1145,7 +1145,7 @@ Activity Indicator zu Konto-Verwaltungsseiten hinzugefügt und Logging erweitert
|
||||||
<target state="translated">Starte Rückgabe...</target>
|
<target state="translated">Starte Rückgabe...</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ExceptionTextWebConnectFailureException" translate="yes" xml:space="preserve">
|
<trans-unit id="ExceptionTextWebConnectFailureException" translate="yes" xml:space="preserve">
|
||||||
<source>Is WIFI available/ mobile networt available and mobile data activated / ... ?</source>
|
<source>Is WIFI available/ mobile network available and mobile data activated / ... ?</source>
|
||||||
<target state="translated">Ist WLAN verfügbar/ Mobilfunknetz vefügbar und mobile Daten aktiviert / ... ?</target>
|
<target state="translated">Ist WLAN verfügbar/ Mobilfunknetz vefügbar und mobile Daten aktiviert / ... ?</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ChangeLog3_0_289" translate="yes" xml:space="preserve">
|
<trans-unit id="ChangeLog3_0_289" translate="yes" xml:space="preserve">
|
||||||
|
@ -1450,25 +1450,35 @@ Sie können nun auf einen Blick sehen, welche App-Version Sie installiert haben:
|
||||||
<source>Startup page</source>
|
<source>Startup page</source>
|
||||||
<target state="translated">Startseite</target>
|
<target state="translated">Startseite</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ChangeLog_3_0_346_LB_MK" translate="yes" xml:space="preserve">
|
<trans-unit id="ChangeLog_3_0_347_LB_MK" translate="yes" xml:space="preserve">
|
||||||
<source><bpt id="1"><i></bpt>Select Bike<ept id="1"></i></ept> page revised.</source>
|
<source><bpt id="1"><i></bpt>Select Bike<ept id="1"></i></ept> page revised.<br/>
|
||||||
<target state="translated"><bpt id="1"><i></bpt>Rad auswählen<ept id="1"></i></ept> Seite überarbeitet.</target>
|
Minor improvements.<br/></source>
|
||||||
|
<target state="translated"><bpt id="1"><i></bpt>Rad auswählen<ept id="1"></i></ept> Seite überarbeitet.<br/>
|
||||||
|
Kleinere Verbesserungen.<br/>
|
||||||
|
|
||||||
|
</target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
<trans-unit id="ChangeLog_3_0_346_SB" translate="yes" xml:space="preserve">
|
<trans-unit id="ErrorNotConnectedToNetwork" translate="yes" xml:space="preserve">
|
||||||
|
<source>Not connected to network.</source>
|
||||||
|
<target state="translated">Keine Verbindung zum Netzwerk.</target>
|
||||||
|
</trans-unit>
|
||||||
|
<trans-unit id="ChangeLog_3_0_347_SB" translate="yes" xml:space="preserve">
|
||||||
<source><bpt id="1"><i></bpt>Select Bike<ept id="1"></i></ept>- page revised.<br/>
|
<source><bpt id="1"><i></bpt>Select Bike<ept id="1"></i></ept>- page revised.<br/>
|
||||||
Setting added to select whether the app starts up showing either
|
Setting added to select whether the app starts up showing either
|
||||||
<bpt id="2"><ul></bpt>
|
<bpt id="2"><ul></bpt>
|
||||||
<li/><bpt id="3"><i></bpt>Bike Locations<ept id="3"></i></ept> or
|
<li/><bpt id="3"><i></bpt>Bike Locations<ept id="3"></i></ept> or
|
||||||
<li/><bpt id="4"><i></bpt>Select Bike<ept id="4"></i></ept>
|
<li/><bpt id="4"><i></bpt>Select Bike<ept id="4"></i></ept>
|
||||||
<ept id="2"></ul></ept>
|
<ept id="2"></ul></ept>
|
||||||
page.</source>
|
page.<br/>
|
||||||
<target state="translated"><bpt id="1"><i></bpt>Rad auswählen<ept id="1"></i></ept>- Seite überarbeitet.<br/>
|
Minor improvements.<br/></source>
|
||||||
|
<target state="translated"><i>Rad auswählen</i>- Seite überarbeitet.<br/>
|
||||||
Einstellung hinzugefügt mit der festgelegt werden kann, ob die App mit der Seite
|
Einstellung hinzugefügt mit der festgelegt werden kann, ob die App mit der Seite
|
||||||
<bpt id="2"><ul></bpt>
|
<ul>
|
||||||
<li/><bpt id="3"><i></bpt>Radstandorte<ept id="3"></i></ept> oder
|
<li/><i>Radstandorte</i> oder
|
||||||
<li/><bpt id="4"><i></bpt>Rad auswählen<ept id="4"></i></ept>
|
<li/><i>Rad auswählen</i>
|
||||||
<ept id="2"></ul></ept>
|
</ul>
|
||||||
gestartet wird.</target>
|
gestartet wird.<br/>
|
||||||
|
Kleinere Verbesserungen.<br/></target>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
</group>
|
</group>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -212,14 +212,10 @@ namespace TINK.Model.Services.CopriApi
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReservationBookingResponse> DoReserveAsync(string bikeId, Uri operatorUri)
|
public async Task<ReservationBookingResponse> DoReserveAsync(string bikeId, Uri operatorUri)
|
||||||
{
|
=> await HttpsServer.DoReserveAsync(bikeId, operatorUri);
|
||||||
return await HttpsServer.DoReserveAsync(bikeId, operatorUri);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<ReservationCancelReturnResponse> DoCancelReservationAsync(string bikeId, Uri operatorUri)
|
public async Task<ReservationCancelReturnResponse> DoCancelReservationAsync(string bikeId, Uri operatorUri)
|
||||||
{
|
=> await HttpsServer.DoCancelReservationAsync(bikeId, operatorUri);
|
||||||
return await HttpsServer.DoCancelReservationAsync(bikeId, operatorUri);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<ReservationBookingResponse> CalculateAuthKeysAsync(string bikeId, Uri operatorUri)
|
public async Task<ReservationBookingResponse> CalculateAuthKeysAsync(string bikeId, Uri operatorUri)
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,6 +6,7 @@ using TINK.Model.Device;
|
||||||
using TINK.Repository;
|
using TINK.Repository;
|
||||||
using TINK.Repository.Request;
|
using TINK.Repository.Request;
|
||||||
using TINK.Repository.Response;
|
using TINK.Repository.Response;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
|
|
||||||
namespace TINK.Model.Services.CopriApi
|
namespace TINK.Model.Services.CopriApi
|
||||||
{
|
{
|
||||||
|
@ -35,13 +36,13 @@ namespace TINK.Model.Services.CopriApi
|
||||||
public string MerchantId => monkeyStore.MerchantId;
|
public string MerchantId => monkeyStore.MerchantId;
|
||||||
|
|
||||||
public Task<ReservationBookingResponse> DoReserveAsync(string bikeId, Uri operatorUri)
|
public Task<ReservationBookingResponse> DoReserveAsync(string bikeId, Uri operatorUri)
|
||||||
=> throw new NotSupportedException($"{nameof(DoReserveAsync)} is not cachable.");
|
=> throw new RequestNotCachableException(nameof(DoReserveAsync));
|
||||||
|
|
||||||
public Task<ReservationCancelReturnResponse> DoCancelReservationAsync(string bikeId, Uri operatorUri)
|
public Task<ReservationCancelReturnResponse> DoCancelReservationAsync(string bikeId, Uri operatorUri)
|
||||||
=> throw new NotSupportedException($"{nameof(DoCancelReservationAsync)} is not cachable.");
|
=> throw new RequestNotCachableException(nameof(DoCancelReservationAsync));
|
||||||
|
|
||||||
public Task<ReservationBookingResponse> CalculateAuthKeysAsync(string bikeId, Uri operatorUri)
|
public Task<ReservationBookingResponse> CalculateAuthKeysAsync(string bikeId, Uri operatorUri)
|
||||||
=> throw new NotSupportedException($"{nameof(CalculateAuthKeysAsync)} is not cachable.");
|
=> throw new RequestNotCachableException(nameof(CalculateAuthKeysAsync));
|
||||||
|
|
||||||
public async Task<ResponseBase> StartReturningBike(
|
public async Task<ResponseBase> StartReturningBike(
|
||||||
string bikeId,
|
string bikeId,
|
||||||
|
@ -65,9 +66,7 @@ namespace TINK.Model.Services.CopriApi
|
||||||
versionInfo);
|
versionInfo);
|
||||||
|
|
||||||
public async Task<ReservationBookingResponse> DoBookAsync(string bikeId, Guid guid, double batteryPercentage, Uri operatorUri)
|
public async Task<ReservationBookingResponse> DoBookAsync(string bikeId, Guid guid, double batteryPercentage, Uri operatorUri)
|
||||||
{
|
=> await monkeyStore.DoBookAsync(bikeId, guid, batteryPercentage, operatorUri);
|
||||||
return await monkeyStore.DoBookAsync(bikeId, guid, batteryPercentage, operatorUri);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<ReservationBookingResponse> BookAvailableAndStartOpeningAsync(
|
public async Task<ReservationBookingResponse> BookAvailableAndStartOpeningAsync(
|
||||||
string bikeId,
|
string bikeId,
|
||||||
|
@ -93,37 +92,26 @@ namespace TINK.Model.Services.CopriApi
|
||||||
=> await monkeyStore.ReturnAndStartClosingAsync(bikeId, smartDevice, operatorUri);
|
=> await monkeyStore.ReturnAndStartClosingAsync(bikeId, smartDevice, operatorUri);
|
||||||
|
|
||||||
public Task<SubmitFeedbackResponse> DoSubmitFeedback(string bikeId, int? currentChargeBars, string messge, bool bIsBikeBroke, Uri operatorUri)
|
public Task<SubmitFeedbackResponse> DoSubmitFeedback(string bikeId, int? currentChargeBars, string messge, bool bIsBikeBroke, Uri operatorUri)
|
||||||
=> throw new NotImplementedException();
|
=> throw new RequestNotCachableException(nameof(DoSubmitFeedback));
|
||||||
|
|
||||||
/// <summary> Submits mini survey to copri server. </summary>
|
/// <summary> Submits mini survey to copri server. </summary>
|
||||||
/// <param name="answers">Collection of answers.</param>
|
/// <param name="answers">Collection of answers.</param>
|
||||||
public Task<ResponseBase> DoSubmitMiniSurvey(IDictionary<string, string> answers)
|
public Task<ResponseBase> DoSubmitMiniSurvey(IDictionary<string, string> answers)
|
||||||
=> throw new NotSupportedException();
|
=> throw new RequestNotCachableException(nameof(DoSubmitMiniSurvey));
|
||||||
|
|
||||||
|
|
||||||
public async Task<AuthorizationResponse> DoAuthorizationAsync(string p_strMailAddress, string p_strPassword, string p_strDeviceId)
|
public async Task<AuthorizationResponse> DoAuthorizationAsync(string p_strMailAddress, string p_strPassword, string p_strDeviceId)
|
||||||
{
|
=> await monkeyStore.DoAuthorizationAsync(p_strMailAddress, p_strPassword, p_strDeviceId);
|
||||||
return await monkeyStore.DoAuthorizationAsync(p_strMailAddress, p_strPassword, p_strDeviceId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<AuthorizationoutResponse> DoAuthoutAsync()
|
public async Task<AuthorizationoutResponse> DoAuthoutAsync()
|
||||||
{
|
=> await monkeyStore.DoAuthoutAsync();
|
||||||
return await monkeyStore.DoAuthoutAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<BikesAvailableResponse> GetBikesAvailableAsync()
|
public async Task<BikesAvailableResponse> GetBikesAvailableAsync()
|
||||||
{
|
=> await monkeyStore.GetBikesAvailableAsync();
|
||||||
return await monkeyStore.GetBikesAvailableAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<BikesReservedOccupiedResponse> GetBikesOccupiedAsync()
|
public async Task<BikesReservedOccupiedResponse> GetBikesOccupiedAsync()
|
||||||
{
|
=> await monkeyStore.GetBikesOccupiedAsync();
|
||||||
return await monkeyStore.GetBikesOccupiedAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<StationsAvailableResponse> GetStationsAsync()
|
public async Task<StationsAvailableResponse> GetStationsAsync()
|
||||||
{
|
=> await monkeyStore.GetStationsAsync();
|
||||||
return await monkeyStore.GetStationsAsync();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
using TINK.MultilingualResources;
|
||||||
|
|
||||||
|
namespace TINK.Services.CopriApi.Exception
|
||||||
|
{
|
||||||
|
public class RequestNotCachableException : System.Exception
|
||||||
|
{
|
||||||
|
public RequestNotCachableException(string nameOfAction) : base(AppResources.ErrorNotConnectedToNetwork, new System.Exception($"{nameOfAction} is not cacheable."))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using TINK.Model.Connector;
|
using TINK.Model.Connector;
|
||||||
|
@ -7,6 +7,7 @@ using TINK.Model.State;
|
||||||
using TINK.Model.User;
|
using TINK.Model.User;
|
||||||
using TINK.MultilingualResources;
|
using TINK.MultilingualResources;
|
||||||
using TINK.Repository.Exception;
|
using TINK.Repository.Exception;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
using BikeInfoMutable = TINK.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable;
|
using BikeInfoMutable = TINK.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable;
|
||||||
|
|
||||||
|
@ -59,20 +60,21 @@ namespace TINK.ViewModel.Bikes.Bike.BC.RequestHandler
|
||||||
{
|
{
|
||||||
await ConnectorFactory(IsConnected).Command.DoReserve(SelectedBike);
|
await ConnectorFactory(IsConnected).Command.DoReserve(SelectedBike);
|
||||||
}
|
}
|
||||||
catch (Exception l_oException)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
if (l_oException is BookingDeclinedException)
|
if (exception is BookingDeclinedException)
|
||||||
{
|
{
|
||||||
// Too many bikes booked.
|
// Too many bikes booked.
|
||||||
Log.ForContext<Disposable>().Information("Request declined because maximum count of bikes {l_oException.MaxBikesCount} already requested/ booked.", (l_oException as BookingDeclinedException).MaxBikesCount);
|
Log.ForContext<Disposable>().Information("Request declined because maximum count of bikes {l_oException.MaxBikesCount} already requested/ booked.", (exception as BookingDeclinedException).MaxBikesCount);
|
||||||
|
|
||||||
BikesViewModel.ActionText = string.Empty;
|
BikesViewModel.ActionText = string.Empty;
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageTitleHint,
|
AppResources.MessageTitleHint,
|
||||||
string.Format(AppResources.MessageReservationBikeErrorTooManyReservationsRentals, SelectedBike.Id, (l_oException as BookingDeclinedException).MaxBikesCount),
|
string.Format(AppResources.MessageReservationBikeErrorTooManyReservationsRentals, SelectedBike.Id, (exception as BookingDeclinedException).MaxBikesCount),
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else if (l_oException is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<Disposable>().Information("User selected availalbe bike {l_oId} but reserving failed (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<Disposable>().Information("User selected availalbe bike {l_oId} but reserving failed (Copri server not reachable).", SelectedBike.Id);
|
||||||
|
@ -80,15 +82,15 @@ namespace TINK.ViewModel.Bikes.Bike.BC.RequestHandler
|
||||||
BikesViewModel.ActionText = string.Empty;
|
BikesViewModel.ActionText = string.Empty;
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageReservingBikeErrorConnectionTitle,
|
AppResources.MessageReservingBikeErrorConnectionTitle,
|
||||||
string.Format("{0}\r\n{1}", l_oException.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
string.Format("{0}\r\n{1}", exception.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.ForContext<Disposable>().Error("User selected availalbe bike {l_oId} but reserving failed. {@l_oException}", SelectedBike.Id, l_oException);
|
Log.ForContext<Disposable>().Error("User selected availalbe bike {l_oId} but reserving failed. {@l_oException}", SelectedBike.Id, exception);
|
||||||
|
|
||||||
BikesViewModel.ActionText = string.Empty;
|
BikesViewModel.ActionText = string.Empty;
|
||||||
await ViewService.DisplayAlert(AppResources.MessageReservingBikeErrorGeneralTitle, l_oException.Message, AppResources.MessageAnswerOk);
|
await ViewService.DisplayAlert(AppResources.MessageReservingBikeErrorGeneralTitle, exception.Message, AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
|
|
||||||
BikesViewModel.ActionText = string.Empty; // Todo: Remove this statement because in catch block ActionText is already set to empty above.
|
BikesViewModel.ActionText = string.Empty; // Todo: Remove this statement because in catch block ActionText is already set to empty above.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using TINK.Model.Connector;
|
using TINK.Model.Connector;
|
||||||
|
@ -6,6 +6,7 @@ using TINK.Model.Device;
|
||||||
using TINK.Model.User;
|
using TINK.Model.User;
|
||||||
using TINK.MultilingualResources;
|
using TINK.MultilingualResources;
|
||||||
using TINK.Repository.Exception;
|
using TINK.Repository.Exception;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
using BikeInfoMutable = TINK.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable;
|
using BikeInfoMutable = TINK.Model.Bikes.BikeInfoNS.BC.BikeInfoMutable;
|
||||||
|
|
||||||
|
@ -63,34 +64,35 @@ namespace TINK.ViewModel.Bikes.Bike.BC.RequestHandler
|
||||||
// If canceling bike succedes remove bike because it is not ready to be booked again
|
// If canceling bike succedes remove bike because it is not ready to be booked again
|
||||||
IsRemoveBikeRequired = true;
|
IsRemoveBikeRequired = true;
|
||||||
}
|
}
|
||||||
catch (Exception l_oException)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
if (l_oException is InvalidAuthorizationResponseException)
|
if (exception is InvalidAuthorizationResponseException)
|
||||||
{
|
{
|
||||||
// Copri response is invalid.
|
// Copri response is invalid.
|
||||||
Log.ForContext<Reserved>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
Log.ForContext<Reserved>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
||||||
BikesViewModel.ActionText = String.Empty;
|
BikesViewModel.ActionText = String.Empty;
|
||||||
await ViewService.DisplayAlert("Fehler beim Stornieren der Buchung!", l_oException.Message, "OK");
|
await ViewService.DisplayAlert("Fehler beim Stornieren der Buchung!", exception.Message, "OK");
|
||||||
BikesViewModel.IsIdle = true;
|
BikesViewModel.IsIdle = true;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
else if (l_oException is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<Reserved>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<Reserved>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
||||||
BikesViewModel.ActionText = String.Empty;
|
BikesViewModel.ActionText = String.Empty;
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
"Verbingungsfehler beim Stornieren der Buchung!",
|
"Verbingungsfehler beim Stornieren der Buchung!",
|
||||||
string.Format("{0}\r\n{1}", l_oException.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
string.Format("{0}\r\n{1}", exception.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
||||||
"OK");
|
"OK");
|
||||||
BikesViewModel.IsIdle = true;
|
BikesViewModel.IsIdle = true;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.ForContext<Reserved>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, l_oException);
|
Log.ForContext<Reserved>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, exception);
|
||||||
BikesViewModel.ActionText = String.Empty;
|
BikesViewModel.ActionText = String.Empty;
|
||||||
await ViewService.DisplayAlert("Fehler beim Stornieren der Buchung!", l_oException.Message, "OK");
|
await ViewService.DisplayAlert("Fehler beim Stornieren der Buchung!", exception.Message, "OK");
|
||||||
BikesViewModel.IsIdle = true;
|
BikesViewModel.IsIdle = true;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,6 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
/// <summary> Open bike and update COPRI lock state. </summary>
|
/// <summary> Open bike and update COPRI lock state. </summary>
|
||||||
public async Task<IRequestHandler> HandleRequestOption2() => await OpenLock();
|
public async Task<IRequestHandler> HandleRequestOption2() => await OpenLock();
|
||||||
|
|
||||||
|
|
||||||
/// <summary> Return bike. </summary>
|
/// <summary> Return bike. </summary>
|
||||||
public async Task<IRequestHandler> ReturnBike()
|
public async Task<IRequestHandler> ReturnBike()
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||||
|
@ -10,6 +10,7 @@ using TINK.Repository.Exception;
|
||||||
using TINK.Services.BluetoothLock;
|
using TINK.Services.BluetoothLock;
|
||||||
using TINK.Services.BluetoothLock.Exception;
|
using TINK.Services.BluetoothLock.Exception;
|
||||||
using TINK.Services.BluetoothLock.Tdo;
|
using TINK.Services.BluetoothLock.Tdo;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.Services.Geolocation;
|
using TINK.Services.Geolocation;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
|
|
||||||
|
@ -85,7 +86,8 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
{
|
{
|
||||||
BikesViewModel.ActionText = string.Empty;
|
BikesViewModel.ActionText = string.Empty;
|
||||||
|
|
||||||
if (exception is WebConnectFailureException)
|
if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<BookedDisconnected>().Information("User selected booked bike {l_oId} to connect to lock. (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<BookedDisconnected>().Information("User selected booked bike {l_oId} to connect to lock. (Copri server not reachable).", SelectedBike.Id);
|
||||||
|
|
|
@ -11,6 +11,7 @@ using TINK.Repository.Exception;
|
||||||
using TINK.Services.BluetoothLock;
|
using TINK.Services.BluetoothLock;
|
||||||
using TINK.Services.BluetoothLock.Exception;
|
using TINK.Services.BluetoothLock.Exception;
|
||||||
using TINK.Services.BluetoothLock.Tdo;
|
using TINK.Services.BluetoothLock.Tdo;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.Services.Geolocation;
|
using TINK.Services.Geolocation;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
|
|
||||||
|
@ -101,7 +102,8 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
string.Format(AppResources.MessageReservationBikeErrorTooManyReservationsRentals, SelectedBike.Id, (exception as BookingDeclinedException).MaxBikesCount),
|
string.Format(AppResources.MessageReservationBikeErrorTooManyReservationsRentals, SelectedBike.Id, (exception as BookingDeclinedException).MaxBikesCount),
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else if (exception is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<DisposableDisconnected>().Information("User selected availalbe bike {bike} but reserving failed (Copri server not reachable).", SelectedBike);
|
Log.ForContext<DisposableDisconnected>().Information("User selected availalbe bike {bike} but reserving failed (Copri server not reachable).", SelectedBike);
|
||||||
|
|
|
@ -9,6 +9,7 @@ using TINK.MultilingualResources;
|
||||||
using TINK.Repository.Exception;
|
using TINK.Repository.Exception;
|
||||||
using TINK.Services.BluetoothLock;
|
using TINK.Services.BluetoothLock;
|
||||||
using TINK.Services.BluetoothLock.Exception;
|
using TINK.Services.BluetoothLock.Exception;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.Services.Geolocation;
|
using TINK.Services.Geolocation;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
using IBikeInfoMutable = TINK.Model.Bikes.BikeInfoNS.BluetoothLock.IBikeInfoMutable;
|
using IBikeInfoMutable = TINK.Model.Bikes.BikeInfoNS.BluetoothLock.IBikeInfoMutable;
|
||||||
|
@ -93,35 +94,36 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
// If canceling bike succedes remove bike because it is not ready to be booked again
|
// If canceling bike succedes remove bike because it is not ready to be booked again
|
||||||
IsRemoveBikeRequired = true;
|
IsRemoveBikeRequired = true;
|
||||||
}
|
}
|
||||||
catch (Exception l_oException)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
BikesViewModel.ActionText = string.Empty;
|
BikesViewModel.ActionText = string.Empty;
|
||||||
|
|
||||||
if (l_oException is InvalidAuthorizationResponseException)
|
if (exception is InvalidAuthorizationResponseException)
|
||||||
{
|
{
|
||||||
// Copri response is invalid.
|
// Copri response is invalid.
|
||||||
Log.ForContext<BikesViewModel>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
Log.ForContext<BikesViewModel>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
||||||
|
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
||||||
l_oException.Message,
|
exception.Message,
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else if (l_oException is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<BikesViewModel>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<BikesViewModel>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorConnectionTitle,
|
AppResources.MessageCancelReservationBikeErrorConnectionTitle,
|
||||||
string.Format("{0}\r\n{1}", l_oException.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
string.Format("{0}\r\n{1}", exception.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.ForContext<BikesViewModel>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, l_oException);
|
Log.ForContext<BikesViewModel>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, exception);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
||||||
l_oException.Message,
|
exception.Message,
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ using TINK.Repository.Exception;
|
||||||
using TINK.Services.BluetoothLock;
|
using TINK.Services.BluetoothLock;
|
||||||
using TINK.Services.BluetoothLock.Exception;
|
using TINK.Services.BluetoothLock.Exception;
|
||||||
using TINK.Services.BluetoothLock.Tdo;
|
using TINK.Services.BluetoothLock.Tdo;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.Services.Geolocation;
|
using TINK.Services.Geolocation;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
|
|
||||||
|
@ -88,33 +89,34 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
// If canceling bike succedes remove bike because it is not ready to be booked again
|
// If canceling bike succedes remove bike because it is not ready to be booked again
|
||||||
IsRemoveBikeRequired = true;
|
IsRemoveBikeRequired = true;
|
||||||
}
|
}
|
||||||
catch (Exception l_oException)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
BikesViewModel.ActionText = string.Empty;
|
BikesViewModel.ActionText = string.Empty;
|
||||||
if (l_oException is InvalidAuthorizationResponseException)
|
if (exception is InvalidAuthorizationResponseException)
|
||||||
{
|
{
|
||||||
// Copri response is invalid.
|
// Copri response is invalid.
|
||||||
Log.ForContext<ReservedDisconnected>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
Log.ForContext<ReservedDisconnected>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
||||||
l_oException.Message,
|
exception.Message,
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else if (l_oException is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<ReservedDisconnected>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<ReservedDisconnected>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorConnectionTitle,
|
AppResources.MessageCancelReservationBikeErrorConnectionTitle,
|
||||||
string.Format("{0}\r\n{1}", l_oException.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
string.Format("{0}\r\n{1}", exception.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.ForContext<ReservedDisconnected>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, l_oException);
|
Log.ForContext<ReservedDisconnected>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, exception);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
||||||
l_oException.Message,
|
exception.Message,
|
||||||
"OK");
|
"OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +158,8 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
{
|
{
|
||||||
BikesViewModel.ActionText = string.Empty;
|
BikesViewModel.ActionText = string.Empty;
|
||||||
|
|
||||||
if (exception is WebConnectFailureException)
|
if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<ReservedDisconnected>().Information("User selected requested bike {l_oId} to connect to lock. (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<ReservedDisconnected>().Information("User selected requested bike {l_oId} to connect to lock. (Copri server not reachable).", SelectedBike.Id);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
using TINK.Model.Bikes.BikeInfoNS.BluetoothLock;
|
||||||
|
@ -9,6 +9,7 @@ using TINK.MultilingualResources;
|
||||||
using TINK.Repository.Exception;
|
using TINK.Repository.Exception;
|
||||||
using TINK.Services.BluetoothLock;
|
using TINK.Services.BluetoothLock;
|
||||||
using TINK.Services.BluetoothLock.Exception;
|
using TINK.Services.BluetoothLock.Exception;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.Services.Geolocation;
|
using TINK.Services.Geolocation;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
|
|
||||||
|
@ -231,34 +232,35 @@ namespace TINK.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
// If canceling bike succedes remove bike because it is not ready to be booked again
|
// If canceling bike succedes remove bike because it is not ready to be booked again
|
||||||
IsRemoveBikeRequired = true;
|
IsRemoveBikeRequired = true;
|
||||||
}
|
}
|
||||||
catch (Exception l_oException)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
BikesViewModel.ActionText = String.Empty;
|
BikesViewModel.ActionText = String.Empty;
|
||||||
|
|
||||||
if (l_oException is InvalidAuthorizationResponseException)
|
if (exception is InvalidAuthorizationResponseException)
|
||||||
{
|
{
|
||||||
// Copri response is invalid.
|
// Copri response is invalid.
|
||||||
Log.ForContext<ReservedOpen>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
Log.ForContext<ReservedOpen>().Error("User selected reserved bike {l_oId} but canceling reservation failed (Invalid auth. response).", SelectedBike.Id);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
||||||
l_oException.Message,
|
exception.Message,
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else if (l_oException is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<ReservedOpen>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<ReservedOpen>().Information("User selected reserved bike {l_oId} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorConnectionTitle,
|
AppResources.MessageCancelReservationBikeErrorConnectionTitle,
|
||||||
string.Format("{0}\r\n{1}", l_oException.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
string.Format("{0}\r\n{1}", exception.Message, WebConnectFailureException.GetHintToPossibleExceptionsReasons),
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.ForContext<ReservedOpen>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, l_oException);
|
Log.ForContext<ReservedOpen>().Error("User selected reserved bike {l_oId} but cancel reservation failed. {@l_oException}.", SelectedBike.Id, exception);
|
||||||
await ViewService.DisplayAlert(
|
await ViewService.DisplayAlert(
|
||||||
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
AppResources.MessageCancelReservationBikeErrorGeneralTitle,
|
||||||
l_oException.Message,
|
exception.Message,
|
||||||
"OK");
|
"OK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
||||||
|
@ -8,6 +8,7 @@ using TINK.Model.State;
|
||||||
using TINK.Model.User;
|
using TINK.Model.User;
|
||||||
using TINK.MultilingualResources;
|
using TINK.MultilingualResources;
|
||||||
using TINK.Repository.Exception;
|
using TINK.Repository.Exception;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
|
|
||||||
namespace TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
namespace TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
|
@ -170,7 +171,8 @@ namespace TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
string.Format(AppResources.MessageReservationBikeErrorTooManyReservationsRentals, SelectedBike.GetFullDisplayName(), (exception as BookingDeclinedException).MaxBikesCount),
|
string.Format(AppResources.MessageReservationBikeErrorTooManyReservationsRentals, SelectedBike.GetFullDisplayName(), (exception as BookingDeclinedException).MaxBikesCount),
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else if (exception is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<DisposableClosed>().Information("User selected availalbe bike {bike} but reserving failed (Copri server not reachable).", SelectedBike);
|
Log.ForContext<DisposableClosed>().Information("User selected availalbe bike {bike} but reserving failed (Copri server not reachable).", SelectedBike);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
||||||
|
@ -7,6 +7,7 @@ using TINK.Model.Device;
|
||||||
using TINK.Model.User;
|
using TINK.Model.User;
|
||||||
using TINK.MultilingualResources;
|
using TINK.MultilingualResources;
|
||||||
using TINK.Repository.Exception;
|
using TINK.Repository.Exception;
|
||||||
|
using TINK.Services.CopriApi.Exception;
|
||||||
using TINK.View;
|
using TINK.View;
|
||||||
|
|
||||||
namespace TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
namespace TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
|
@ -101,7 +102,8 @@ namespace TINK.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
exception.Message,
|
exception.Message,
|
||||||
AppResources.MessageAnswerOk);
|
AppResources.MessageAnswerOk);
|
||||||
}
|
}
|
||||||
else if (exception is WebConnectFailureException)
|
else if (exception is WebConnectFailureException
|
||||||
|
|| exception is RequestNotCachableException)
|
||||||
{
|
{
|
||||||
// Copri server is not reachable.
|
// Copri server is not reachable.
|
||||||
Log.ForContext<BikesViewModel>().Information("User selected reserved bike {Id} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
Log.ForContext<BikesViewModel>().Information("User selected reserved bike {Id} but cancel reservation failed (Copri server not reachable).", SelectedBike.Id);
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
using TINK.Model;
|
using System.ComponentModel;
|
||||||
|
using TINK.Model;
|
||||||
|
|
||||||
namespace TINK.ViewModel.Settings
|
namespace TINK.ViewModel.Settings
|
||||||
{
|
{
|
||||||
/// <summary>Holds filter item incluting full state (avaialble, activated, name, ...). </summary>
|
/// <summary>Holds filter item incluting full state (avaialble, activated, name, ...). </summary>
|
||||||
public class FilterItemMutable
|
public class FilterItemMutable : INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
/// <summary> Switch value</summary>
|
/// <summary> Switch value</summary>
|
||||||
private bool m_bIsActivatedSwitch;
|
private bool m_bIsActivatedSwitch;
|
||||||
|
|
||||||
|
@ -42,6 +45,12 @@ namespace TINK.ViewModel.Settings
|
||||||
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
if (m_bIsActivatedSwitch == value)
|
||||||
|
{
|
||||||
|
// Nothing to do.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_bIsActivatedSwitch = value;
|
m_bIsActivatedSwitch = value;
|
||||||
if (!IsEnabled)
|
if (!IsEnabled)
|
||||||
{
|
{
|
||||||
|
@ -50,6 +59,7 @@ namespace TINK.ViewModel.Settings
|
||||||
}
|
}
|
||||||
|
|
||||||
State = m_bIsActivatedSwitch ? FilterState.On : FilterState.Off;
|
State = m_bIsActivatedSwitch ? FilterState.On : FilterState.Off;
|
||||||
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsActivated)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,5 +68,6 @@ namespace TINK.ViewModel.Settings
|
||||||
|
|
||||||
/// <summary> State of the filter.</summary>
|
/// <summary> State of the filter.</summary>
|
||||||
public FilterState State { get; private set; }
|
public FilterState State { get; private set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using TINK.Model;
|
using TINK.Model;
|
||||||
using TINK.Model.Connector;
|
using TINK.Model.Connector;
|
||||||
|
@ -9,8 +10,10 @@ namespace TINK.ViewModel.Settings
|
||||||
{
|
{
|
||||||
/// <summary> Holds the filters to display..</summary>
|
/// <summary> Holds the filters to display..</summary>
|
||||||
/// <remarks> Former name: FilterCollectionMutable.</remarks>
|
/// <remarks> Former name: FilterCollectionMutable.</remarks>
|
||||||
public class SettingsBikeFilterViewModel : ObservableCollection<FilterItemMutable>
|
public class SettingsBikeFilterViewModel : ObservableCollection<FilterItemMutable>, INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
|
public new event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
/// <summary> Constructs a filter collection object.</summary>
|
/// <summary> Constructs a filter collection object.</summary>
|
||||||
/// <param name="filterSettings">All available filters.</param>
|
/// <param name="filterSettings">All available filters.</param>
|
||||||
/// <param name="filterGroupUser">Filters which apply to logged in user.</param>
|
/// <param name="filterGroupUser">Filters which apply to logged in user.</param>
|
||||||
|
@ -22,28 +25,35 @@ namespace TINK.ViewModel.Settings
|
||||||
{
|
{
|
||||||
if (filter.Key == FilterHelper.CARGOBIKE)
|
if (filter.Key == FilterHelper.CARGOBIKE)
|
||||||
{
|
{
|
||||||
Add(new FilterItemMutable(
|
var cargo = new FilterItemMutable(
|
||||||
filter.Key,
|
filter.Key,
|
||||||
filter.Value,
|
filter.Value,
|
||||||
(filterGroupUser != null && filterGroupUser.Count() > 0) ? filterGroupUser.Contains(filter.Key) : true,
|
(filterGroupUser != null && filterGroupUser.Count() > 0) ? filterGroupUser.Contains(filter.Key) : true,
|
||||||
AppResources.MarkingCargoBike));
|
AppResources.MarkingCargoBike);
|
||||||
|
Add(cargo);
|
||||||
|
|
||||||
|
cargo.PropertyChanged += (sender, ev) => PropertyChanged?.Invoke(sender, ev);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (filter.Key == FilterHelper.CITYBIKE)
|
if (filter.Key == FilterHelper.CITYBIKE)
|
||||||
{
|
{
|
||||||
Add(new FilterItemMutable(
|
var city = new FilterItemMutable(
|
||||||
filter.Key,
|
filter.Key,
|
||||||
filter.Value,
|
filter.Value,
|
||||||
(filterGroupUser != null && filterGroupUser.Count() > 0) ? filterGroupUser.Contains(filter.Key) : true,
|
(filterGroupUser != null && filterGroupUser.Count() > 0) ? filterGroupUser.Contains(filter.Key) : true,
|
||||||
AppResources.MarkingCityBike));
|
AppResources.MarkingCityBike);
|
||||||
|
Add(city);
|
||||||
|
city.PropertyChanged += (sender, ev) => PropertyChanged?.Invoke(sender, ev);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Add(new FilterItemMutable(
|
var item = new FilterItemMutable(
|
||||||
filter.Key,
|
filter.Key,
|
||||||
filter.Value,
|
filter.Value,
|
||||||
filterGroupUser != null ? filterGroupUser.Contains(filter.Key) : true,
|
filterGroupUser != null ? filterGroupUser.Contains(filter.Key) : true,
|
||||||
filter.Key));
|
filter.Key);
|
||||||
|
Add(item);
|
||||||
|
item.PropertyChanged += (sender, ev) => PropertyChanged?.Invoke(sender, ev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,30 @@ namespace TINK.ViewModel
|
||||||
TinkApp.FilterGroupSetting,
|
TinkApp.FilterGroupSetting,
|
||||||
TinkApp.ActiveUser.IsLoggedIn ? TinkApp.ActiveUser.Group : null);
|
TinkApp.ActiveUser.IsLoggedIn ? TinkApp.ActiveUser.Group : null);
|
||||||
|
|
||||||
|
GroupFilter.PropertyChanged += (s, e) =>
|
||||||
|
{
|
||||||
|
// Serialize on value changed. On iOS OnDisappearing might not be invoked (when app is directly closed before leaving settings page).
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var filterGroup = GroupFilter.ToDictionary(x => x.Key, x => x.State);
|
||||||
|
TinkApp.FilterGroupSetting = new GroupFilterSettings(filterGroup.Count > 0 ? filterGroup : null);
|
||||||
|
|
||||||
|
// Update map page filter.
|
||||||
|
// Reasons for which map page filter has to be updated:
|
||||||
|
// - user activated/ deactivated a group (cargo/ city bikes)
|
||||||
|
TinkApp.GroupFilterMapPage =
|
||||||
|
GroupFilterMapPageHelper.CreateUpdated(
|
||||||
|
TinkApp.GroupFilterMapPage,
|
||||||
|
TinkApp.ActiveUser.DoFilter(TinkApp.FilterGroupSetting.DoFilter()));
|
||||||
|
|
||||||
|
TinkApp.Save();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.ForContext<SettingsPageViewModel>().Error(ex, "Serializing startup page failed.");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
m_oViewUpdateManager = new IdlePollingUpdateTaskManager();
|
m_oViewUpdateManager = new IdlePollingUpdateTaskManager();
|
||||||
|
|
||||||
Polling = new PollingViewModel(TinkApp.Polling);
|
Polling = new PollingViewModel(TinkApp.Polling);
|
||||||
|
@ -166,6 +190,22 @@ namespace TINK.ViewModel
|
||||||
{ ViewTypes.FindBikePage.ToString(), AppResources.MarkingFindBike },
|
{ ViewTypes.FindBikePage.ToString(), AppResources.MarkingFindBike },
|
||||||
},
|
},
|
||||||
tinkApp.StartupSettings.StartupPage.ToString());
|
tinkApp.StartupSettings.StartupPage.ToString());
|
||||||
|
|
||||||
|
StartupSettings.PropertyChanged += (s, e) =>
|
||||||
|
{
|
||||||
|
// Serialize on value changed. On iOS OnDisappearing might not be invoked (when app is directly closed before leaving settings page).
|
||||||
|
try
|
||||||
|
{
|
||||||
|
TinkApp.StartupSettings.StartupPage = Enum.TryParse(StartupSettings.Active, out ViewTypes startupPage)
|
||||||
|
? startupPage
|
||||||
|
: Model.Settings.StartupSettings.DefaultStartupPage;
|
||||||
|
|
||||||
|
TinkApp.Save();
|
||||||
|
} catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.ForContext<SettingsPageViewModel>().Error(ex, "Serializing startup page failed.");
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -234,10 +274,7 @@ namespace TINK.ViewModel
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the value of device identifier (for debugging purposes).
|
/// Gets the value of device identifier (for debugging purposes).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string DeviceIdentifier
|
public string DeviceIdentifier => TinkApp.SmartDevice.Identifier;
|
||||||
{
|
|
||||||
get { return TinkApp.SmartDevice.Identifier; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Invoked when page is shutdown.
|
/// Invoked when page is shutdown.
|
||||||
|
@ -258,22 +295,6 @@ namespace TINK.ViewModel
|
||||||
|
|
||||||
TinkApp.ExpiresAfter = TimeSpan.FromSeconds(ExpiresAfterTotalSeconds);
|
TinkApp.ExpiresAfter = TimeSpan.FromSeconds(ExpiresAfterTotalSeconds);
|
||||||
|
|
||||||
var filterGroup = GroupFilter.ToDictionary(x => x.Key, x => x.State);
|
|
||||||
TinkApp.FilterGroupSetting = new GroupFilterSettings(filterGroup.Count > 0 ? filterGroup : null);
|
|
||||||
|
|
||||||
// Update map page filter.
|
|
||||||
// Reasons for which map page filter has to be updated:
|
|
||||||
// - user activated/ deactivated a group (TINKCorpi/ TINKSms/ Konrad)
|
|
||||||
// - user logged off
|
|
||||||
TinkApp.GroupFilterMapPage =
|
|
||||||
GroupFilterMapPageHelper.CreateUpdated(
|
|
||||||
TinkApp.GroupFilterMapPage,
|
|
||||||
TinkApp.ActiveUser.DoFilter(TinkApp.FilterGroupSetting.DoFilter()));
|
|
||||||
|
|
||||||
TinkApp.StartupSettings.StartupPage = Enum.TryParse(StartupSettings.Active, out ViewTypes startupPage) ? startupPage : Model.Settings.StartupSettings.DefaultStartupPage;
|
|
||||||
|
|
||||||
TinkApp.CenterMapToCurrentLocation = CenterMapToCurrentLocation;
|
|
||||||
|
|
||||||
if (IsLogToExternalFolderVisible)
|
if (IsLogToExternalFolderVisible)
|
||||||
{
|
{
|
||||||
// If no external folder is available do not update model value.
|
// If no external folder is available do not update model value.
|
||||||
|
@ -356,7 +377,25 @@ namespace TINK.ViewModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CenterMapToCurrentLocation { get; set; }
|
bool _CenterMapToCurrentLocation = true;
|
||||||
|
public bool CenterMapToCurrentLocation
|
||||||
|
{
|
||||||
|
get => _CenterMapToCurrentLocation;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == _CenterMapToCurrentLocation)
|
||||||
|
{
|
||||||
|
// Nothing to do.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_CenterMapToCurrentLocation = value;
|
||||||
|
|
||||||
|
// Serialize on value changed. On iOS OnDisappearing might not be invoked (when app is directly closed before leaving settings page).
|
||||||
|
TinkApp.CenterMapToCurrentLocation = CenterMapToCurrentLocation;
|
||||||
|
TinkApp.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary> Holds either
|
/// <summary> Holds either
|
||||||
/// - a value indicating whether to use external folder (e.g. SD card)/ or internal folder for storing log-files or
|
/// - a value indicating whether to use external folder (e.g. SD card)/ or internal folder for storing log-files or
|
||||||
|
@ -408,8 +447,6 @@ namespace TINK.ViewModel
|
||||||
public string ExpiresAfterTotalSecondsText
|
public string ExpiresAfterTotalSecondsText
|
||||||
{
|
{
|
||||||
get => expiresAfterTotalSeconds.ToString("0");
|
get => expiresAfterTotalSeconds.ToString("0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -360,7 +360,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when returning the bike!",
|
"Connection error when returning the bike!",
|
||||||
"Internet must be available when returning the bike.\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Internet must be available when returning the bike.\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
|
|
@ -187,7 +187,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
|
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
|
||||||
bikesViewModel.ActionText = "Request server...";
|
bikesViewModel.ActionText = "Request server...";
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert("Error when connecting with lock!", "Internet must be reachable to connect to lock of rented bike.\r\nContext info\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?", "OK");
|
viewService.DisplayAlert("Error when connecting with lock!", "Internet must be reachable to connect to lock of rented bike.\r\nContext info\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?", "OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
|
|
|
@ -296,7 +296,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when returning the bike!",
|
"Connection error when returning the bike!",
|
||||||
"Internet must be available when returning the bike.\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Internet must be available when returning the bike.\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
@ -727,7 +727,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when returning the bike!",
|
"Connection error when returning the bike!",
|
||||||
"Internet must be available when returning the bike.\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Internet must be available when returning the bike.\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
@ -289,7 +289,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "Reserving bike...";
|
bikesViewModel.ActionText = "Reserving bike...";
|
||||||
connector.Command.DoReserve(bike); // Booking must be performed
|
connector.Command.DoReserve(bike); // Booking must be performed
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert("Connection error when reserving the bike!", "Context info.\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?", "OK");
|
viewService.DisplayAlert("Connection error when reserving the bike!", "Context info.\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?", "OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
@ -349,7 +349,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert(
|
viewService.DisplayAlert(
|
||||||
"Connection error when renting the bike!",
|
"Connection error when renting the bike!",
|
||||||
string.Format("Attention: Lock is closed!\r\n{0}\r\n{1}", "Context info.", "Is WIFI available/ mobile networt available and mobile data activated / ... ?"),
|
string.Format("Attention: Lock is closed!\r\n{0}\r\n{1}", "Context info.", "Is WIFI available/ mobile network available and mobile data activated / ... ?"),
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Verschließe Schloss...";
|
bikesViewModel.ActionText = "Verschließe Schloss...";
|
||||||
locks[0].CloseAsync();
|
locks[0].CloseAsync();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
|
@ -293,7 +293,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert(
|
viewService.DisplayAlert(
|
||||||
"Connection error when canceling the reservation!",
|
"Connection error when canceling the reservation!",
|
||||||
"Context info.\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Context info.\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
||||||
|
@ -545,7 +545,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when renting the bike!",
|
"Connection error when renting the bike!",
|
||||||
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Is WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
|
|
@ -283,7 +283,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert(
|
viewService.DisplayAlert(
|
||||||
"Connection error when canceling the reservation!",
|
"Connection error when canceling the reservation!",
|
||||||
"Context info\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Context info\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
||||||
|
@ -486,7 +486,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
|
pollingManager.StopUpdatePeridically(); // Polling must be stopped before any COPR and lock service action
|
||||||
bikesViewModel.ActionText = "Request server...";
|
bikesViewModel.ActionText = "Request server...";
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert("Error when connecting to lock!", "Internet must be reachable to connect to lock of reserved bike.\r\nContext info.\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?", "OK");
|
viewService.DisplayAlert("Error when connecting to lock!", "Internet must be reachable to connect to lock of reserved bike.\r\nContext info.\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?", "OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
|
@ -160,7 +160,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert(
|
viewService.DisplayAlert(
|
||||||
"Connection error when renting the bike!",
|
"Connection error when renting the bike!",
|
||||||
string.Format("Attention: Lock is closed!\r\n{0}\r\n{1}", "Context info.", "Is WIFI available/ mobile networt available and mobile data activated / ... ?"),
|
string.Format("Attention: Lock is closed!\r\n{0}\r\n{1}", "Context info.", "Is WIFI available/ mobile network available and mobile data activated / ... ?"),
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Wiederverschließe Schloss...";
|
bikesViewModel.ActionText = "Wiederverschließe Schloss...";
|
||||||
locks[0].CloseAsync();
|
locks[0].CloseAsync();
|
||||||
|
@ -590,7 +590,7 @@ namespace TestTINKLib.Fixtures.ObjectTests.ViewModel.Bikes.Bike.BluetoothLock.Re
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAlert(
|
viewService.DisplayAlert(
|
||||||
"Connection error when canceling the reservation!",
|
"Connection error when canceling the reservation!",
|
||||||
"Context info\r\nIs WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Context info\r\nIs WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
pollingManager.StartUpdateAyncPeridically(); // polling must be restarted again
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
||||||
|
@ -62,7 +62,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when opening the lock!",
|
"Connection error when opening the lock!",
|
||||||
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Is WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
using TINK.Model.Bikes.BikeInfoNS.CopriLock;
|
||||||
|
@ -62,7 +62,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when opening the lock!",
|
"Connection error when opening the lock!",
|
||||||
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Is WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
@ -130,7 +130,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when renting the bike!",
|
"Connection error when renting the bike!",
|
||||||
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Is WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
@ -486,7 +486,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when reserving the bike!",
|
"Connection error when reserving the bike!",
|
||||||
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Is WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NSubstitute;
|
using NSubstitute;
|
||||||
|
@ -197,7 +197,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when canceling the reservation!",
|
"Connection error when canceling the reservation!",
|
||||||
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Is WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
@ -472,7 +472,7 @@ namespace TestShareeLib.ViewModel.Bikes.Bike.CopriLock.RequestHandler
|
||||||
bikesViewModel.ActionText = "";
|
bikesViewModel.ActionText = "";
|
||||||
viewService.DisplayAdvancedAlert(
|
viewService.DisplayAdvancedAlert(
|
||||||
"Connection error when renting the bike!",
|
"Connection error when renting the bike!",
|
||||||
"Is WIFI available/ mobile networt available and mobile data activated / ... ?",
|
"Is WIFI available/ mobile network available and mobile data activated / ... ?",
|
||||||
"Context info",
|
"Context info",
|
||||||
"OK");
|
"OK");
|
||||||
bikesViewModel.ActionText = "Updating...";
|
bikesViewModel.ActionText = "Updating...";
|
||||||
|
|
Loading…
Add table
Reference in a new issue