diff --git a/src/Android/Android.csproj b/src/Android/Android.csproj
index bd083e23b..ce4601e20 100644
--- a/src/Android/Android.csproj
+++ b/src/Android/Android.csproj
@@ -106,10 +106,10 @@
..\..\packages\Xamarin.Forms.2.3.4.231\lib\MonoAndroid10\FormsViewGroup.dll
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\MonoAndroid403\HockeySDK.dll
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\MonoAndroid403\HockeySDK.dll
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\MonoAndroid403\HockeySDK.AndroidBindings.dll
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\MonoAndroid403\HockeySDK.AndroidBindings.dll
..\..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll
@@ -161,11 +161,11 @@
..\..\packages\Plugin.Fingerprint.1.4.4\lib\MonoAndroid\Plugin.Fingerprint.Android.Samsung.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\MonoAndroid10\Plugin.Settings.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\MonoAndroid10\Plugin.Settings.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\MonoAndroid10\Plugin.Settings.Abstractions.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\MonoAndroid10\Plugin.Settings.Abstractions.dll
..\..\packages\Xam.Plugin.PushNotification.1.2.4\lib\MonoAndroid10\PushNotification.Plugin.dll
diff --git a/src/Android/Resources/Resource.Designer.cs b/src/Android/Resources/Resource.Designer.cs
index 7b92dd8c3..f70ef35ee 100644
--- a/src/Android/Resources/Resource.Designer.cs
+++ b/src/Android/Resources/Resource.Designer.cs
@@ -127,10 +127,14 @@ namespace Bit.Android
global::HockeyApp.Resource.String.hockeyapp_expiry_info_title = global::Bit.Android.Resource.String.hockeyapp_expiry_info_title;
global::HockeyApp.Resource.String.hockeyapp_feedback_attach_file = global::Bit.Android.Resource.String.hockeyapp_feedback_attach_file;
global::HockeyApp.Resource.String.hockeyapp_feedback_attach_picture = global::Bit.Android.Resource.String.hockeyapp_feedback_attach_picture;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_attachment_added = global::Bit.Android.Resource.String.hockeyapp_feedback_attachment_added;
global::HockeyApp.Resource.String.hockeyapp_feedback_attachment_button_text = global::Bit.Android.Resource.String.hockeyapp_feedback_attachment_button_text;
global::HockeyApp.Resource.String.hockeyapp_feedback_attachment_error = global::Bit.Android.Resource.String.hockeyapp_feedback_attachment_error;
global::HockeyApp.Resource.String.hockeyapp_feedback_attachment_loading = global::Bit.Android.Resource.String.hockeyapp_feedback_attachment_loading;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_attachment_remove_description = global::Bit.Android.Resource.String.hockeyapp_feedback_attachment_remove_description;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_attachment_removed = global::Bit.Android.Resource.String.hockeyapp_feedback_attachment_removed;
global::HockeyApp.Resource.String.hockeyapp_feedback_email_hint = global::Bit.Android.Resource.String.hockeyapp_feedback_email_hint;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_email_hint_required = global::Bit.Android.Resource.String.hockeyapp_feedback_email_hint_required;
global::HockeyApp.Resource.String.hockeyapp_feedback_failed_text = global::Bit.Android.Resource.String.hockeyapp_feedback_failed_text;
global::HockeyApp.Resource.String.hockeyapp_feedback_failed_title = global::Bit.Android.Resource.String.hockeyapp_feedback_failed_title;
global::HockeyApp.Resource.String.hockeyapp_feedback_fetching_feedback_text = global::Bit.Android.Resource.String.hockeyapp_feedback_fetching_feedback_text;
@@ -138,7 +142,9 @@ namespace Bit.Android
global::HockeyApp.Resource.String.hockeyapp_feedback_last_updated_text = global::Bit.Android.Resource.String.hockeyapp_feedback_last_updated_text;
global::HockeyApp.Resource.String.hockeyapp_feedback_max_attachments_allowed = global::Bit.Android.Resource.String.hockeyapp_feedback_max_attachments_allowed;
global::HockeyApp.Resource.String.hockeyapp_feedback_message_hint = global::Bit.Android.Resource.String.hockeyapp_feedback_message_hint;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_message_hint_required = global::Bit.Android.Resource.String.hockeyapp_feedback_message_hint_required;
global::HockeyApp.Resource.String.hockeyapp_feedback_name_hint = global::Bit.Android.Resource.String.hockeyapp_feedback_name_hint;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_name_hint_required = global::Bit.Android.Resource.String.hockeyapp_feedback_name_hint_required;
global::HockeyApp.Resource.String.hockeyapp_feedback_refresh_button_text = global::Bit.Android.Resource.String.hockeyapp_feedback_refresh_button_text;
global::HockeyApp.Resource.String.hockeyapp_feedback_response_button_text = global::Bit.Android.Resource.String.hockeyapp_feedback_response_button_text;
global::HockeyApp.Resource.String.hockeyapp_feedback_select_file = global::Bit.Android.Resource.String.hockeyapp_feedback_select_file;
@@ -147,7 +153,9 @@ namespace Bit.Android
global::HockeyApp.Resource.String.hockeyapp_feedback_send_generic_error = global::Bit.Android.Resource.String.hockeyapp_feedback_send_generic_error;
global::HockeyApp.Resource.String.hockeyapp_feedback_send_network_error = global::Bit.Android.Resource.String.hockeyapp_feedback_send_network_error;
global::HockeyApp.Resource.String.hockeyapp_feedback_sending_feedback_text = global::Bit.Android.Resource.String.hockeyapp_feedback_sending_feedback_text;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_sent_toast = global::Bit.Android.Resource.String.hockeyapp_feedback_sent_toast;
global::HockeyApp.Resource.String.hockeyapp_feedback_subject_hint = global::Bit.Android.Resource.String.hockeyapp_feedback_subject_hint;
+ global::HockeyApp.Resource.String.hockeyapp_feedback_subject_hint_required = global::Bit.Android.Resource.String.hockeyapp_feedback_subject_hint_required;
global::HockeyApp.Resource.String.hockeyapp_feedback_title = global::Bit.Android.Resource.String.hockeyapp_feedback_title;
global::HockeyApp.Resource.String.hockeyapp_feedback_validate_email_empty = global::Bit.Android.Resource.String.hockeyapp_feedback_validate_email_empty;
global::HockeyApp.Resource.String.hockeyapp_feedback_validate_email_error = global::Bit.Android.Resource.String.hockeyapp_feedback_validate_email_error;
@@ -155,11 +163,13 @@ namespace Bit.Android
global::HockeyApp.Resource.String.hockeyapp_feedback_validate_subject_error = global::Bit.Android.Resource.String.hockeyapp_feedback_validate_subject_error;
global::HockeyApp.Resource.String.hockeyapp_feedback_validate_text_error = global::Bit.Android.Resource.String.hockeyapp_feedback_validate_text_error;
global::HockeyApp.Resource.String.hockeyapp_login_email_hint = global::Bit.Android.Resource.String.hockeyapp_login_email_hint;
+ global::HockeyApp.Resource.String.hockeyapp_login_email_hint_required = global::Bit.Android.Resource.String.hockeyapp_login_email_hint_required;
global::HockeyApp.Resource.String.hockeyapp_login_headline_text = global::Bit.Android.Resource.String.hockeyapp_login_headline_text;
global::HockeyApp.Resource.String.hockeyapp_login_headline_text_email_only = global::Bit.Android.Resource.String.hockeyapp_login_headline_text_email_only;
global::HockeyApp.Resource.String.hockeyapp_login_login_button_text = global::Bit.Android.Resource.String.hockeyapp_login_login_button_text;
global::HockeyApp.Resource.String.hockeyapp_login_missing_credentials_toast = global::Bit.Android.Resource.String.hockeyapp_login_missing_credentials_toast;
global::HockeyApp.Resource.String.hockeyapp_login_password_hint = global::Bit.Android.Resource.String.hockeyapp_login_password_hint;
+ global::HockeyApp.Resource.String.hockeyapp_login_password_hint_required = global::Bit.Android.Resource.String.hockeyapp_login_password_hint_required;
global::HockeyApp.Resource.String.hockeyapp_paint_dialog_message = global::Bit.Android.Resource.String.hockeyapp_paint_dialog_message;
global::HockeyApp.Resource.String.hockeyapp_paint_dialog_negative_button = global::Bit.Android.Resource.String.hockeyapp_paint_dialog_negative_button;
global::HockeyApp.Resource.String.hockeyapp_paint_dialog_neutral_button = global::Bit.Android.Resource.String.hockeyapp_paint_dialog_neutral_button;
@@ -3740,8 +3750,8 @@ namespace Bit.Android
// aapt resource value: 0x7f080047
public const int ApplicationName = 2131230791;
- // aapt resource value: 0x7f08008f
- public const int AutoFillServiceDescription = 2131230863;
+ // aapt resource value: 0x7f080099
+ public const int AutoFillServiceDescription = 2131230873;
// aapt resource value: 0x7f080046
public const int Hello = 2131230790;
@@ -3963,160 +3973,190 @@ namespace Bit.Android
public const int hockeyapp_feedback_attach_picture = 2131230810;
// aapt resource value: 0x7f08005b
- public const int hockeyapp_feedback_attachment_button_text = 2131230811;
+ public const int hockeyapp_feedback_attachment_added = 2131230811;
// aapt resource value: 0x7f08005c
- public const int hockeyapp_feedback_attachment_error = 2131230812;
+ public const int hockeyapp_feedback_attachment_button_text = 2131230812;
// aapt resource value: 0x7f08005d
- public const int hockeyapp_feedback_attachment_loading = 2131230813;
+ public const int hockeyapp_feedback_attachment_error = 2131230813;
// aapt resource value: 0x7f08005e
- public const int hockeyapp_feedback_email_hint = 2131230814;
+ public const int hockeyapp_feedback_attachment_loading = 2131230814;
// aapt resource value: 0x7f08005f
- public const int hockeyapp_feedback_failed_text = 2131230815;
+ public const int hockeyapp_feedback_attachment_remove_description = 2131230815;
// aapt resource value: 0x7f080060
- public const int hockeyapp_feedback_failed_title = 2131230816;
+ public const int hockeyapp_feedback_attachment_removed = 2131230816;
// aapt resource value: 0x7f080061
- public const int hockeyapp_feedback_fetching_feedback_text = 2131230817;
+ public const int hockeyapp_feedback_email_hint = 2131230817;
// aapt resource value: 0x7f080062
- public const int hockeyapp_feedback_generic_error = 2131230818;
+ public const int hockeyapp_feedback_email_hint_required = 2131230818;
// aapt resource value: 0x7f080063
- public const int hockeyapp_feedback_last_updated_text = 2131230819;
+ public const int hockeyapp_feedback_failed_text = 2131230819;
// aapt resource value: 0x7f080064
- public const int hockeyapp_feedback_max_attachments_allowed = 2131230820;
+ public const int hockeyapp_feedback_failed_title = 2131230820;
// aapt resource value: 0x7f080065
- public const int hockeyapp_feedback_message_hint = 2131230821;
+ public const int hockeyapp_feedback_fetching_feedback_text = 2131230821;
// aapt resource value: 0x7f080066
- public const int hockeyapp_feedback_name_hint = 2131230822;
+ public const int hockeyapp_feedback_generic_error = 2131230822;
// aapt resource value: 0x7f080067
- public const int hockeyapp_feedback_refresh_button_text = 2131230823;
+ public const int hockeyapp_feedback_last_updated_text = 2131230823;
// aapt resource value: 0x7f080068
- public const int hockeyapp_feedback_response_button_text = 2131230824;
+ public const int hockeyapp_feedback_max_attachments_allowed = 2131230824;
// aapt resource value: 0x7f080069
- public const int hockeyapp_feedback_select_file = 2131230825;
+ public const int hockeyapp_feedback_message_hint = 2131230825;
// aapt resource value: 0x7f08006a
- public const int hockeyapp_feedback_select_picture = 2131230826;
+ public const int hockeyapp_feedback_message_hint_required = 2131230826;
// aapt resource value: 0x7f08006b
- public const int hockeyapp_feedback_send_button_text = 2131230827;
+ public const int hockeyapp_feedback_name_hint = 2131230827;
// aapt resource value: 0x7f08006c
- public const int hockeyapp_feedback_send_generic_error = 2131230828;
+ public const int hockeyapp_feedback_name_hint_required = 2131230828;
// aapt resource value: 0x7f08006d
- public const int hockeyapp_feedback_send_network_error = 2131230829;
+ public const int hockeyapp_feedback_refresh_button_text = 2131230829;
// aapt resource value: 0x7f08006e
- public const int hockeyapp_feedback_sending_feedback_text = 2131230830;
+ public const int hockeyapp_feedback_response_button_text = 2131230830;
// aapt resource value: 0x7f08006f
- public const int hockeyapp_feedback_subject_hint = 2131230831;
+ public const int hockeyapp_feedback_select_file = 2131230831;
// aapt resource value: 0x7f080070
- public const int hockeyapp_feedback_title = 2131230832;
+ public const int hockeyapp_feedback_select_picture = 2131230832;
// aapt resource value: 0x7f080071
- public const int hockeyapp_feedback_validate_email_empty = 2131230833;
+ public const int hockeyapp_feedback_send_button_text = 2131230833;
// aapt resource value: 0x7f080072
- public const int hockeyapp_feedback_validate_email_error = 2131230834;
+ public const int hockeyapp_feedback_send_generic_error = 2131230834;
// aapt resource value: 0x7f080073
- public const int hockeyapp_feedback_validate_name_error = 2131230835;
+ public const int hockeyapp_feedback_send_network_error = 2131230835;
// aapt resource value: 0x7f080074
- public const int hockeyapp_feedback_validate_subject_error = 2131230836;
+ public const int hockeyapp_feedback_sending_feedback_text = 2131230836;
// aapt resource value: 0x7f080075
- public const int hockeyapp_feedback_validate_text_error = 2131230837;
+ public const int hockeyapp_feedback_sent_toast = 2131230837;
// aapt resource value: 0x7f080076
- public const int hockeyapp_login_email_hint = 2131230838;
+ public const int hockeyapp_feedback_subject_hint = 2131230838;
// aapt resource value: 0x7f080077
- public const int hockeyapp_login_headline_text = 2131230839;
+ public const int hockeyapp_feedback_subject_hint_required = 2131230839;
// aapt resource value: 0x7f080078
- public const int hockeyapp_login_headline_text_email_only = 2131230840;
+ public const int hockeyapp_feedback_title = 2131230840;
// aapt resource value: 0x7f080079
- public const int hockeyapp_login_login_button_text = 2131230841;
+ public const int hockeyapp_feedback_validate_email_empty = 2131230841;
// aapt resource value: 0x7f08007a
- public const int hockeyapp_login_missing_credentials_toast = 2131230842;
+ public const int hockeyapp_feedback_validate_email_error = 2131230842;
// aapt resource value: 0x7f08007b
- public const int hockeyapp_login_password_hint = 2131230843;
+ public const int hockeyapp_feedback_validate_name_error = 2131230843;
// aapt resource value: 0x7f08007c
- public const int hockeyapp_paint_dialog_message = 2131230844;
+ public const int hockeyapp_feedback_validate_subject_error = 2131230844;
// aapt resource value: 0x7f08007d
- public const int hockeyapp_paint_dialog_negative_button = 2131230845;
+ public const int hockeyapp_feedback_validate_text_error = 2131230845;
// aapt resource value: 0x7f08007e
- public const int hockeyapp_paint_dialog_neutral_button = 2131230846;
+ public const int hockeyapp_login_email_hint = 2131230846;
// aapt resource value: 0x7f08007f
- public const int hockeyapp_paint_dialog_positive_button = 2131230847;
+ public const int hockeyapp_login_email_hint_required = 2131230847;
// aapt resource value: 0x7f080080
- public const int hockeyapp_paint_indicator_toast = 2131230848;
+ public const int hockeyapp_login_headline_text = 2131230848;
// aapt resource value: 0x7f080081
- public const int hockeyapp_paint_menu_clear = 2131230849;
+ public const int hockeyapp_login_headline_text_email_only = 2131230849;
// aapt resource value: 0x7f080082
- public const int hockeyapp_paint_menu_save = 2131230850;
+ public const int hockeyapp_login_login_button_text = 2131230850;
// aapt resource value: 0x7f080083
- public const int hockeyapp_paint_menu_undo = 2131230851;
+ public const int hockeyapp_login_missing_credentials_toast = 2131230851;
// aapt resource value: 0x7f080084
- public const int hockeyapp_permission_dialog_negative_button = 2131230852;
+ public const int hockeyapp_login_password_hint = 2131230852;
// aapt resource value: 0x7f080085
- public const int hockeyapp_permission_dialog_positive_button = 2131230853;
+ public const int hockeyapp_login_password_hint_required = 2131230853;
// aapt resource value: 0x7f080086
- public const int hockeyapp_permission_update_message = 2131230854;
+ public const int hockeyapp_paint_dialog_message = 2131230854;
// aapt resource value: 0x7f080087
- public const int hockeyapp_permission_update_title = 2131230855;
+ public const int hockeyapp_paint_dialog_negative_button = 2131230855;
// aapt resource value: 0x7f080088
- public const int hockeyapp_update_button = 2131230856;
+ public const int hockeyapp_paint_dialog_neutral_button = 2131230856;
// aapt resource value: 0x7f080089
- public const int hockeyapp_update_dialog_message = 2131230857;
+ public const int hockeyapp_paint_dialog_positive_button = 2131230857;
// aapt resource value: 0x7f08008a
- public const int hockeyapp_update_dialog_negative_button = 2131230858;
+ public const int hockeyapp_paint_indicator_toast = 2131230858;
// aapt resource value: 0x7f08008b
- public const int hockeyapp_update_dialog_positive_button = 2131230859;
+ public const int hockeyapp_paint_menu_clear = 2131230859;
// aapt resource value: 0x7f08008c
- public const int hockeyapp_update_dialog_title = 2131230860;
+ public const int hockeyapp_paint_menu_save = 2131230860;
// aapt resource value: 0x7f08008d
- public const int hockeyapp_update_mandatory_toast = 2131230861;
+ public const int hockeyapp_paint_menu_undo = 2131230861;
// aapt resource value: 0x7f08008e
- public const int hockeyapp_update_version_details_label = 2131230862;
+ public const int hockeyapp_permission_dialog_negative_button = 2131230862;
+
+ // aapt resource value: 0x7f08008f
+ public const int hockeyapp_permission_dialog_positive_button = 2131230863;
+
+ // aapt resource value: 0x7f080090
+ public const int hockeyapp_permission_update_message = 2131230864;
+
+ // aapt resource value: 0x7f080091
+ public const int hockeyapp_permission_update_title = 2131230865;
+
+ // aapt resource value: 0x7f080092
+ public const int hockeyapp_update_button = 2131230866;
+
+ // aapt resource value: 0x7f080093
+ public const int hockeyapp_update_dialog_message = 2131230867;
+
+ // aapt resource value: 0x7f080094
+ public const int hockeyapp_update_dialog_negative_button = 2131230868;
+
+ // aapt resource value: 0x7f080095
+ public const int hockeyapp_update_dialog_positive_button = 2131230869;
+
+ // aapt resource value: 0x7f080096
+ public const int hockeyapp_update_dialog_title = 2131230870;
+
+ // aapt resource value: 0x7f080097
+ public const int hockeyapp_update_mandatory_toast = 2131230871;
+
+ // aapt resource value: 0x7f080098
+ public const int hockeyapp_update_version_details_label = 2131230872;
// aapt resource value: 0x7f080045
public const int library_name = 2131230789;
diff --git a/src/Android/Services/AndroidKeyStoreStorageService.cs b/src/Android/Services/AndroidKeyStoreStorageService.cs
index 5cab50af8..b2944e491 100644
--- a/src/Android/Services/AndroidKeyStoreStorageService.cs
+++ b/src/Android/Services/AndroidKeyStoreStorageService.cs
@@ -76,7 +76,7 @@ namespace Bit.Android.Services
return TryGetAndMigrate(key);
}
- var cs = _settings.GetValueOrDefault(formattedKey);
+ var cs = _settings.GetValueOrDefault(formattedKey, null);
if(string.IsNullOrWhiteSpace(cs))
{
return null;
@@ -201,7 +201,7 @@ namespace Bit.Android.Services
return null;
}
- var encKey = _settings.GetValueOrDefault(aesKey);
+ var encKey = _settings.GetValueOrDefault(aesKey, null);
if(string.IsNullOrWhiteSpace(encKey))
{
return null;
@@ -312,7 +312,7 @@ namespace Bit.Android.Services
{
try
{
- var cs = _settings.GetValueOrDefault(formattedKeyV1);
+ var cs = _settings.GetValueOrDefault(formattedKeyV1, null);
var value = App.Utilities.Crypto.AesCbcDecrypt(new App.Models.CipherString(cs), aesKeyV1);
Store(key, value);
return value;
diff --git a/src/Android/packages.config b/src/Android/packages.config
index 576f8b591..d42d40529 100644
--- a/src/Android/packages.config
+++ b/src/Android/packages.config
@@ -5,7 +5,7 @@
-
+
@@ -70,7 +70,7 @@
-
+
diff --git a/src/App/App.csproj b/src/App/App.csproj
index bf634442f..96fed7ab0 100644
--- a/src/App/App.csproj
+++ b/src/App/App.csproj
@@ -413,8 +413,8 @@
..\..\packages\Xamarin.FFImageLoading.2.2.9\lib\portable-net45+win8+wpa81+wp8\FFImageLoading.Platform.dll
-
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\HockeySDK.dll
+
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10\HockeySDK.dll
..\..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll
@@ -459,11 +459,11 @@
..\..\packages\Plugin.Fingerprint.1.4.4\lib\portable-net45+win8+wpa81+wp8\Plugin.Fingerprint.Abstractions.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\portable-net45+wp80+win8+wpa81\Plugin.Settings.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\netstandard1.0\Plugin.Settings.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\portable-net45+wp80+win8+wpa81\Plugin.Settings.Abstractions.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\netstandard1.0\Plugin.Settings.Abstractions.dll
..\..\packages\Xam.Plugin.PushNotification.1.2.4\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+UAP10\PushNotification.Plugin.dll
diff --git a/src/App/Pages/Settings/SettingsSyncPage.cs b/src/App/Pages/Settings/SettingsSyncPage.cs
index 6eda27905..4fcedc14e 100644
--- a/src/App/Pages/Settings/SettingsSyncPage.cs
+++ b/src/App/Pages/Settings/SettingsSyncPage.cs
@@ -77,7 +77,11 @@ namespace Bit.App.Pages
private void SetLastSync()
{
- var lastSyncDate = _settings.GetValueOrDefault(Constants.LastSync, null);
+ DateTime? lastSyncDate = null;
+ if(_settings.Contains(Constants.LastSync))
+ {
+ lastSyncDate = _settings.GetValueOrDefault(Constants.LastSync, DateTime.UtcNow);
+ }
try
{
LastSyncLabel.Text = AppResources.LastSync + " " + lastSyncDate?.ToLocalTime().ToString() ?? AppResources.Never;
diff --git a/src/App/Pages/Vault/VaultListLoginsPage.cs b/src/App/Pages/Vault/VaultListLoginsPage.cs
index 0d6d0ecf8..abca5e903 100644
--- a/src/App/Pages/Vault/VaultListLoginsPage.cs
+++ b/src/App/Pages/Vault/VaultListLoginsPage.cs
@@ -239,9 +239,8 @@ namespace Bit.App.Pages
var pushPromptShow = _settings.GetValueOrDefault(Constants.PushInitialPromptShown, false);
Action registerAction = () =>
{
- var lastPushRegistration = _settings.GetValueOrDefault(Constants.PushLastRegistrationDate, null);
- if(!pushPromptShow || !lastPushRegistration.HasValue
- || (DateTime.UtcNow - lastPushRegistration) > TimeSpan.FromDays(1))
+ var lastPushRegistration = _settings.GetValueOrDefault(Constants.PushLastRegistrationDate, DateTime.MinValue);
+ if(!pushPromptShow || DateTime.UtcNow - lastPushRegistration > TimeSpan.FromDays(1))
{
_pushNotification.Register();
}
diff --git a/src/App/Services/AppSettingsService.cs b/src/App/Services/AppSettingsService.cs
index 6b8f29138..6e49802e5 100644
--- a/src/App/Services/AppSettingsService.cs
+++ b/src/App/Services/AppSettingsService.cs
@@ -78,7 +78,7 @@ namespace Bit.App.Services
{
get
{
- return _settings.GetValueOrDefault(Constants.SecurityStamp);
+ return _settings.GetValueOrDefault(Constants.SecurityStamp, null);
}
set
{
@@ -90,7 +90,7 @@ namespace Bit.App.Services
{
get
{
- return _settings.GetValueOrDefault(Constants.BaseUrl);
+ return _settings.GetValueOrDefault(Constants.BaseUrl, null);
}
set
{
@@ -108,7 +108,7 @@ namespace Bit.App.Services
{
get
{
- return _settings.GetValueOrDefault(Constants.WebVaultUrl);
+ return _settings.GetValueOrDefault(Constants.WebVaultUrl, null);
}
set
{
@@ -126,7 +126,7 @@ namespace Bit.App.Services
{
get
{
- return _settings.GetValueOrDefault(Constants.ApiUrl);
+ return _settings.GetValueOrDefault(Constants.ApiUrl, null);
}
set
{
@@ -144,7 +144,7 @@ namespace Bit.App.Services
{
get
{
- return _settings.GetValueOrDefault(Constants.IdentityUrl);
+ return _settings.GetValueOrDefault(Constants.IdentityUrl, null);
}
set
{
diff --git a/src/App/Services/CryptoService.cs b/src/App/Services/CryptoService.cs
index d0f246da2..8185b1da0 100644
--- a/src/App/Services/CryptoService.cs
+++ b/src/App/Services/CryptoService.cs
@@ -78,7 +78,7 @@ namespace Bit.App.Services
{
if(_encKey == null && _settings.Contains(EncKeyKey))
{
- var encKey = _settings.GetValueOrDefault(EncKeyKey);
+ var encKey = _settings.GetValueOrDefault(EncKeyKey, null);
var encKeyCs = new CipherString(encKey);
try
{
@@ -102,7 +102,7 @@ namespace Bit.App.Services
{
if(_privateKey == null && _settings.Contains(PrivateKeyKey))
{
- var encPrivateKey = _settings.GetValueOrDefault(PrivateKeyKey);
+ var encPrivateKey = _settings.GetValueOrDefault(PrivateKeyKey, null);
var encPrivateKeyCs = new CipherString(encPrivateKey);
try
{
@@ -125,7 +125,7 @@ namespace Bit.App.Services
{
if((!_orgKeys?.Any() ?? true) && _settings.Contains(OrgKeysKey))
{
- var orgKeysEncDictJson = _settings.GetValueOrDefault(OrgKeysKey);
+ var orgKeysEncDictJson = _settings.GetValueOrDefault(OrgKeysKey, null);
if(!string.IsNullOrWhiteSpace(orgKeysEncDictJson))
{
_orgKeys = new Dictionary();
diff --git a/src/App/Services/SyncService.cs b/src/App/Services/SyncService.cs
index 016c77d28..aff4442b1 100644
--- a/src/App/Services/SyncService.cs
+++ b/src/App/Services/SyncService.cs
@@ -242,8 +242,8 @@ namespace Bit.App.Services
public async Task FullSyncAsync(TimeSpan syncThreshold, bool forceSync = false)
{
- DateTime? lastSync = _settings.GetValueOrDefault(Constants.LastSync, null);
- if(lastSync != null && DateTime.UtcNow - lastSync.Value < syncThreshold)
+ var lastSync = _settings.GetValueOrDefault(Constants.LastSync, DateTime.MinValue);
+ if(DateTime.UtcNow - lastSync < syncThreshold)
{
return false;
}
@@ -307,11 +307,11 @@ namespace Bit.App.Services
private async Task NeedsToSyncAsync()
{
- DateTime? lastSync = _settings.GetValueOrDefault(Constants.LastSync, null);
- if(!lastSync.HasValue)
+ if(!_settings.Contains(Constants.LastSync))
{
return true;
}
+ var lastSync = _settings.GetValueOrDefault(Constants.LastSync, DateTime.MinValue);
var accountRevisionDate = await _accountsApiRepository.GetAccountRevisionDateAsync();
if(accountRevisionDate.Succeeded && accountRevisionDate.Result.HasValue &&
diff --git a/src/App/Utilities/Helpers.cs b/src/App/Utilities/Helpers.cs
index 4246f8bee..67e417a9c 100644
--- a/src/App/Utilities/Helpers.cs
+++ b/src/App/Utilities/Helpers.cs
@@ -44,7 +44,7 @@ namespace Bit.App.Utilities
public static bool PerformUpdateTasks(ISettings settings, IAppInfoService appInfoService,
IDatabaseService databaseService)
{
- var lastBuild = settings.GetValueOrDefault(Constants.LastBuildKey);
+ var lastBuild = settings.GetValueOrDefault(Constants.LastBuildKey, null);
if(InDebugMode() || lastBuild == null || lastBuild != appInfoService.Build)
{
settings.AddOrUpdateValue(Constants.LastBuildKey, appInfoService.Build);
diff --git a/src/App/packages.config b/src/App/packages.config
index 1c23507f6..e8359ad7b 100644
--- a/src/App/packages.config
+++ b/src/App/packages.config
@@ -2,7 +2,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/src/iOS.Core/iOS.Core.csproj b/src/iOS.Core/iOS.Core.csproj
index 57b24f2be..c8f33d1b8 100644
--- a/src/iOS.Core/iOS.Core.csproj
+++ b/src/iOS.Core/iOS.Core.csproj
@@ -37,21 +37,21 @@
..\..\packages\Xamarin.Google.iOS.Analytics.3.17.0.1\lib\Xamarin.iOS10\Google.Analytics.dll
-
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\Xamarin.iOS10\HockeySDK.dll
+
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\Xamarin.iOS10\HockeySDK.dll
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\Xamarin.iOS10\HockeySDK.iOSBindings.dll
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\Xamarin.iOS10\HockeySDK.iOSBindings.dll
..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll
True
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\Xamarin.iOS10\Plugin.Settings.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\Xamarin.iOS10\Plugin.Settings.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll
..\..\packages\sqlite-net-pcl.1.4.118\lib\netstandard1.1\SQLite-net.dll
diff --git a/src/iOS.Core/packages.config b/src/iOS.Core/packages.config
index f89d059ba..dad5428fe 100644
--- a/src/iOS.Core/packages.config
+++ b/src/iOS.Core/packages.config
@@ -1,12 +1,12 @@
-
+
-
+
diff --git a/src/iOS.Extension/iOS.Extension.csproj b/src/iOS.Extension/iOS.Extension.csproj
index 6b5c699c4..a010040d0 100644
--- a/src/iOS.Extension/iOS.Extension.csproj
+++ b/src/iOS.Extension/iOS.Extension.csproj
@@ -274,11 +274,11 @@
..\..\packages\Xamarin.Google.iOS.Analytics.3.17.0.1\lib\Xamarin.iOS10\Google.Analytics.dll
-
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\Xamarin.iOS10\HockeySDK.dll
+
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\Xamarin.iOS10\HockeySDK.dll
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\Xamarin.iOS10\HockeySDK.iOSBindings.dll
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\Xamarin.iOS10\HockeySDK.iOSBindings.dll
..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll
@@ -316,11 +316,11 @@
..\..\packages\Plugin.Fingerprint.1.4.4\lib\Xamarin.iOS10\Plugin.Fingerprint.Abstractions.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\Xamarin.iOS10\Plugin.Settings.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\Xamarin.iOS10\Plugin.Settings.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll
..\..\packages\SimpleInjector.4.0.7\lib\netstandard1.3\SimpleInjector.dll
diff --git a/src/iOS.Extension/packages.config b/src/iOS.Extension/packages.config
index 401282e64..988e072c2 100644
--- a/src/iOS.Extension/packages.config
+++ b/src/iOS.Extension/packages.config
@@ -2,7 +2,7 @@
-
+
@@ -63,7 +63,7 @@
-
+
diff --git a/src/iOS/iOS.csproj b/src/iOS/iOS.csproj
index 2ec820463..369d31418 100644
--- a/src/iOS/iOS.csproj
+++ b/src/iOS/iOS.csproj
@@ -289,11 +289,11 @@
..\..\packages\Xamarin.Google.iOS.Analytics.3.17.0.1\lib\Xamarin.iOS10\Google.Analytics.dll
-
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\Xamarin.iOS10\HockeySDK.dll
+
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\Xamarin.iOS10\HockeySDK.dll
- ..\..\packages\HockeySDK.Xamarin.4.1.2\lib\Xamarin.iOS10\HockeySDK.iOSBindings.dll
+ ..\..\packages\HockeySDK.Xamarin.4.1.5\lib\Xamarin.iOS10\HockeySDK.iOSBindings.dll
..\..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll
@@ -331,11 +331,11 @@
..\..\packages\Plugin.Fingerprint.1.4.4\lib\Xamarin.iOS10\Plugin.Fingerprint.Abstractions.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\Xamarin.iOS10\Plugin.Settings.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\Xamarin.iOS10\Plugin.Settings.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll
..\..\packages\Xam.Plugin.PushNotification.1.2.4\lib\Xamarin.iOS10\PushNotification.Plugin.dll
diff --git a/src/iOS/packages.config b/src/iOS/packages.config
index 0e5a21def..2aaffc3fb 100644
--- a/src/iOS/packages.config
+++ b/src/iOS/packages.config
@@ -4,7 +4,7 @@
-
+
@@ -68,7 +68,7 @@
-
+
diff --git a/test/App.Test/App.Test.csproj b/test/App.Test/App.Test.csproj
index 4cec1bda7..1ee637c27 100644
--- a/test/App.Test/App.Test.csproj
+++ b/test/App.Test/App.Test.csproj
@@ -68,11 +68,11 @@
..\..\packages\Plugin.Fingerprint.1.4.4\lib\net45\Plugin.Fingerprint.Abstractions.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\net45\Plugin.Settings.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\net45\Plugin.Settings.dll
-
- ..\..\packages\Xam.Plugins.Settings.2.5.4\lib\net45\Plugin.Settings.Abstractions.dll
+
+ ..\..\packages\Xam.Plugins.Settings.3.0.1\lib\net45\Plugin.Settings.Abstractions.dll
diff --git a/test/App.Test/packages.config b/test/App.Test/packages.config
index 29d5974ac..b3215239d 100644
--- a/test/App.Test/packages.config
+++ b/test/App.Test/packages.config
@@ -8,7 +8,7 @@
-
+