support for appconfig settings (#727)

This commit is contained in:
Kyle Spearrin 2020-02-10 14:07:06 -05:00 committed by GitHub
parent 89f26bbc6b
commit 1fb3698ba2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 377 additions and 249 deletions

View File

@ -119,6 +119,7 @@
<Compile Include="Push\FirebaseInstanceIdService.cs" /> <Compile Include="Push\FirebaseInstanceIdService.cs" />
<Compile Include="Push\FirebaseMessagingService.cs" /> <Compile Include="Push\FirebaseMessagingService.cs" />
<Compile Include="Receivers\ClearClipboardAlarmReceiver.cs" /> <Compile Include="Receivers\ClearClipboardAlarmReceiver.cs" />
<Compile Include="Receivers\RestrictionsChangedReceiver.cs" />
<Compile Include="Receivers\EventUploadReceiver.cs" /> <Compile Include="Receivers\EventUploadReceiver.cs" />
<Compile Include="Receivers\LockAlarmReceiver.cs" /> <Compile Include="Receivers\LockAlarmReceiver.cs" />
<Compile Include="Receivers\PackageReplacedReceiver.cs" /> <Compile Include="Receivers\PackageReplacedReceiver.cs" />
@ -553,5 +554,11 @@
<ItemGroup> <ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi\accessibility_permission.png" /> <AndroidResource Include="Resources\drawable-xxhdpi\accessibility_permission.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<AndroidResource Include="Resources\xml\app_restrictions.xml">
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
<SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
</Project> </Project>

View File

@ -151,6 +151,7 @@ namespace Bit.Droid
} }
catch { } catch { }
} }
var setRestrictions = AndroidHelpers.SetPreconfiguredRestrictionSettingsAsync(this);
} }
protected override void OnNewIntent(Intent intent) protected override void OnNewIntent(Intent intent)

View File

@ -54,5 +54,6 @@
</receiver> </receiver>
<meta-data android:name="android.max_aspect" android:value="2.1" /> <meta-data android:name="android.max_aspect" android:value="2.1" />
<meta-data android:name="android.content.APP_RESTRICTIONS" android:resource="@xml/app_restrictions" />
</application> </application>
</manifest> </manifest>

View File

@ -0,0 +1,23 @@
using System.Collections.Generic;
using Android.App;
using Android.Content;
using Bit.App.Utilities;
using Bit.Core.Abstractions;
using Bit.Core.Utilities;
using Bit.Droid.Utilities;
namespace Bit.Droid.Receivers
{
[BroadcastReceiver(Name = "com.x8bit.bitwarden.RestrictionsChangedReceiver", Exported = false)]
[IntentFilter(new[] { Intent.ActionApplicationRestrictionsChanged })]
public class RestrictionsChangedReceiver : BroadcastReceiver
{
public async override void OnReceive(Context context, Intent intent)
{
if(intent.Action == Intent.ActionApplicationRestrictionsChanged)
{
await AndroidHelpers.SetPreconfiguredRestrictionSettingsAsync(context);
}
}
}
}

View File

@ -10433,125 +10433,125 @@ namespace Bit.Droid
public partial class String public partial class String
{ {
// aapt resource value: 0x7F0D0006
public const int abc_action_bar_home_description = 2131558406;
// aapt resource value: 0x7F0D0007
public const int abc_action_bar_up_description = 2131558407;
// aapt resource value: 0x7F0D0008 // aapt resource value: 0x7F0D0008
public const int abc_action_menu_overflow_description = 2131558408; public const int abc_action_bar_home_description = 2131558408;
// aapt resource value: 0x7F0D0009 // aapt resource value: 0x7F0D0009
public const int abc_action_mode_done = 2131558409; public const int abc_action_bar_up_description = 2131558409;
// aapt resource value: 0x7F0D000B
public const int abc_activitychooserview_choose_application = 2131558411;
// aapt resource value: 0x7F0D000A // aapt resource value: 0x7F0D000A
public const int abc_activity_chooser_view_see_all = 2131558410; public const int abc_action_menu_overflow_description = 2131558410;
// aapt resource value: 0x7F0D000C // aapt resource value: 0x7F0D000B
public const int abc_capital_off = 2131558412; public const int abc_action_mode_done = 2131558411;
// aapt resource value: 0x7F0D000D // aapt resource value: 0x7F0D000D
public const int abc_capital_on = 2131558413; public const int abc_activitychooserview_choose_application = 2131558413;
// aapt resource value: 0x7F0D000C
public const int abc_activity_chooser_view_see_all = 2131558412;
// aapt resource value: 0x7F0D000E // aapt resource value: 0x7F0D000E
public const int abc_font_family_body_1_material = 2131558414; public const int abc_capital_off = 2131558414;
// aapt resource value: 0x7F0D000F // aapt resource value: 0x7F0D000F
public const int abc_font_family_body_2_material = 2131558415; public const int abc_capital_on = 2131558415;
// aapt resource value: 0x7F0D0010 // aapt resource value: 0x7F0D0010
public const int abc_font_family_button_material = 2131558416; public const int abc_font_family_body_1_material = 2131558416;
// aapt resource value: 0x7F0D0011 // aapt resource value: 0x7F0D0011
public const int abc_font_family_caption_material = 2131558417; public const int abc_font_family_body_2_material = 2131558417;
// aapt resource value: 0x7F0D0012 // aapt resource value: 0x7F0D0012
public const int abc_font_family_display_1_material = 2131558418; public const int abc_font_family_button_material = 2131558418;
// aapt resource value: 0x7F0D0013 // aapt resource value: 0x7F0D0013
public const int abc_font_family_display_2_material = 2131558419; public const int abc_font_family_caption_material = 2131558419;
// aapt resource value: 0x7F0D0014 // aapt resource value: 0x7F0D0014
public const int abc_font_family_display_3_material = 2131558420; public const int abc_font_family_display_1_material = 2131558420;
// aapt resource value: 0x7F0D0015 // aapt resource value: 0x7F0D0015
public const int abc_font_family_display_4_material = 2131558421; public const int abc_font_family_display_2_material = 2131558421;
// aapt resource value: 0x7F0D0016 // aapt resource value: 0x7F0D0016
public const int abc_font_family_headline_material = 2131558422; public const int abc_font_family_display_3_material = 2131558422;
// aapt resource value: 0x7F0D0017 // aapt resource value: 0x7F0D0017
public const int abc_font_family_menu_material = 2131558423; public const int abc_font_family_display_4_material = 2131558423;
// aapt resource value: 0x7F0D0018 // aapt resource value: 0x7F0D0018
public const int abc_font_family_subhead_material = 2131558424; public const int abc_font_family_headline_material = 2131558424;
// aapt resource value: 0x7F0D0019 // aapt resource value: 0x7F0D0019
public const int abc_font_family_title_material = 2131558425; public const int abc_font_family_menu_material = 2131558425;
// aapt resource value: 0x7F0D001A // aapt resource value: 0x7F0D001A
public const int abc_menu_alt_shortcut_label = 2131558426; public const int abc_font_family_subhead_material = 2131558426;
// aapt resource value: 0x7F0D001B // aapt resource value: 0x7F0D001B
public const int abc_menu_ctrl_shortcut_label = 2131558427; public const int abc_font_family_title_material = 2131558427;
// aapt resource value: 0x7F0D001C // aapt resource value: 0x7F0D001C
public const int abc_menu_delete_shortcut_label = 2131558428; public const int abc_menu_alt_shortcut_label = 2131558428;
// aapt resource value: 0x7F0D001D // aapt resource value: 0x7F0D001D
public const int abc_menu_enter_shortcut_label = 2131558429; public const int abc_menu_ctrl_shortcut_label = 2131558429;
// aapt resource value: 0x7F0D001E // aapt resource value: 0x7F0D001E
public const int abc_menu_function_shortcut_label = 2131558430; public const int abc_menu_delete_shortcut_label = 2131558430;
// aapt resource value: 0x7F0D001F // aapt resource value: 0x7F0D001F
public const int abc_menu_meta_shortcut_label = 2131558431; public const int abc_menu_enter_shortcut_label = 2131558431;
// aapt resource value: 0x7F0D0020 // aapt resource value: 0x7F0D0020
public const int abc_menu_shift_shortcut_label = 2131558432; public const int abc_menu_function_shortcut_label = 2131558432;
// aapt resource value: 0x7F0D0021 // aapt resource value: 0x7F0D0021
public const int abc_menu_space_shortcut_label = 2131558433; public const int abc_menu_meta_shortcut_label = 2131558433;
// aapt resource value: 0x7F0D0022 // aapt resource value: 0x7F0D0022
public const int abc_menu_sym_shortcut_label = 2131558434; public const int abc_menu_shift_shortcut_label = 2131558434;
// aapt resource value: 0x7F0D0023 // aapt resource value: 0x7F0D0023
public const int abc_prepend_shortcut_label = 2131558435; public const int abc_menu_space_shortcut_label = 2131558435;
// aapt resource value: 0x7F0D0025
public const int abc_searchview_description_clear = 2131558437;
// aapt resource value: 0x7F0D0026
public const int abc_searchview_description_query = 2131558438;
// aapt resource value: 0x7F0D0027
public const int abc_searchview_description_search = 2131558439;
// aapt resource value: 0x7F0D0028
public const int abc_searchview_description_submit = 2131558440;
// aapt resource value: 0x7F0D0029
public const int abc_searchview_description_voice = 2131558441;
// aapt resource value: 0x7F0D0024 // aapt resource value: 0x7F0D0024
public const int abc_search_hint = 2131558436; public const int abc_menu_sym_shortcut_label = 2131558436;
// aapt resource value: 0x7F0D0025
public const int abc_prepend_shortcut_label = 2131558437;
// aapt resource value: 0x7F0D0027
public const int abc_searchview_description_clear = 2131558439;
// aapt resource value: 0x7F0D0028
public const int abc_searchview_description_query = 2131558440;
// aapt resource value: 0x7F0D0029
public const int abc_searchview_description_search = 2131558441;
// aapt resource value: 0x7F0D002A // aapt resource value: 0x7F0D002A
public const int abc_shareactionprovider_share_with = 2131558442; public const int abc_searchview_description_submit = 2131558442;
// aapt resource value: 0x7F0D002B // aapt resource value: 0x7F0D002B
public const int abc_shareactionprovider_share_with_application = 2131558443; public const int abc_searchview_description_voice = 2131558443;
// aapt resource value: 0x7F0D0026
public const int abc_search_hint = 2131558438;
// aapt resource value: 0x7F0D002C // aapt resource value: 0x7F0D002C
public const int abc_toolbar_collapse_description = 2131558444; public const int abc_shareactionprovider_share_with = 2131558444;
// aapt resource value: 0x7F0D002D // aapt resource value: 0x7F0D002D
public const int appbar_scrolling_view_behavior = 2131558445; public const int abc_shareactionprovider_share_with_application = 2131558445;
// aapt resource value: 0x7F0D002E
public const int abc_toolbar_collapse_description = 2131558446;
// aapt resource value: 0x7F0D002F
public const int appbar_scrolling_view_behavior = 2131558447;
// aapt resource value: 0x7F0D0000 // aapt resource value: 0x7F0D0000
public const int ApplicationName = 2131558400; public const int ApplicationName = 2131558400;
@ -10562,437 +10562,437 @@ namespace Bit.Droid
// aapt resource value: 0x7F0D0002 // aapt resource value: 0x7F0D0002
public const int AutoFillServiceSummary = 2131558402; public const int AutoFillServiceSummary = 2131558402;
// aapt resource value: 0x7F0D002E
public const int bottom_sheet_behavior = 2131558446;
// aapt resource value: 0x7F0D002F
public const int character_counter_content_description = 2131558447;
// aapt resource value: 0x7F0D0030 // aapt resource value: 0x7F0D0030
public const int character_counter_pattern = 2131558448; public const int bottom_sheet_behavior = 2131558448;
// aapt resource value: 0x7F0D0031 // aapt resource value: 0x7F0D0031
public const int common_google_play_services_enable_button = 2131558449; public const int character_counter_content_description = 2131558449;
// aapt resource value: 0x7F0D0032 // aapt resource value: 0x7F0D0032
public const int common_google_play_services_enable_text = 2131558450; public const int character_counter_pattern = 2131558450;
// aapt resource value: 0x7F0D0033 // aapt resource value: 0x7F0D0033
public const int common_google_play_services_enable_title = 2131558451; public const int common_google_play_services_enable_button = 2131558451;
// aapt resource value: 0x7F0D0034 // aapt resource value: 0x7F0D0034
public const int common_google_play_services_install_button = 2131558452; public const int common_google_play_services_enable_text = 2131558452;
// aapt resource value: 0x7F0D0035 // aapt resource value: 0x7F0D0035
public const int common_google_play_services_install_text = 2131558453; public const int common_google_play_services_enable_title = 2131558453;
// aapt resource value: 0x7F0D0036 // aapt resource value: 0x7F0D0036
public const int common_google_play_services_install_title = 2131558454; public const int common_google_play_services_install_button = 2131558454;
// aapt resource value: 0x7F0D0037 // aapt resource value: 0x7F0D0037
public const int common_google_play_services_notification_ticker = 2131558455; public const int common_google_play_services_install_text = 2131558455;
// aapt resource value: 0x7F0D0038 // aapt resource value: 0x7F0D0038
public const int common_google_play_services_unknown_issue = 2131558456; public const int common_google_play_services_install_title = 2131558456;
// aapt resource value: 0x7F0D0039 // aapt resource value: 0x7F0D0039
public const int common_google_play_services_unsupported_text = 2131558457; public const int common_google_play_services_notification_ticker = 2131558457;
// aapt resource value: 0x7F0D003A // aapt resource value: 0x7F0D003A
public const int common_google_play_services_update_button = 2131558458; public const int common_google_play_services_unknown_issue = 2131558458;
// aapt resource value: 0x7F0D003B // aapt resource value: 0x7F0D003B
public const int common_google_play_services_update_text = 2131558459; public const int common_google_play_services_unsupported_text = 2131558459;
// aapt resource value: 0x7F0D003C // aapt resource value: 0x7F0D003C
public const int common_google_play_services_update_title = 2131558460; public const int common_google_play_services_update_button = 2131558460;
// aapt resource value: 0x7F0D003D // aapt resource value: 0x7F0D003D
public const int common_google_play_services_updating_text = 2131558461; public const int common_google_play_services_update_text = 2131558461;
// aapt resource value: 0x7F0D003E // aapt resource value: 0x7F0D003E
public const int common_google_play_services_wear_update_text = 2131558462; public const int common_google_play_services_update_title = 2131558462;
// aapt resource value: 0x7F0D003F // aapt resource value: 0x7F0D003F
public const int common_open_on_phone = 2131558463; public const int common_google_play_services_updating_text = 2131558463;
// aapt resource value: 0x7F0D0040 // aapt resource value: 0x7F0D0040
public const int common_signin_button_text = 2131558464; public const int common_google_play_services_wear_update_text = 2131558464;
// aapt resource value: 0x7F0D0041 // aapt resource value: 0x7F0D0041
public const int common_signin_button_text_long = 2131558465; public const int common_open_on_phone = 2131558465;
// aapt resource value: 0x7F0D0042 // aapt resource value: 0x7F0D0042
public const int default_web_client_id = 2131558466; public const int common_signin_button_text = 2131558466;
// aapt resource value: 0x7F0D0043 // aapt resource value: 0x7F0D0043
public const int fab_transformation_scrim_behavior = 2131558467; public const int common_signin_button_text_long = 2131558467;
// aapt resource value: 0x7F0D0044 // aapt resource value: 0x7F0D0044
public const int fab_transformation_sheet_behavior = 2131558468; public const int default_web_client_id = 2131558468;
// aapt resource value: 0x7F0D0045 // aapt resource value: 0x7F0D0045
public const int fcm_fallback_notification_channel_label = 2131558469; public const int fab_transformation_scrim_behavior = 2131558469;
// aapt resource value: 0x7F0D0046 // aapt resource value: 0x7F0D0046
public const int firebase_database_url = 2131558470; public const int fab_transformation_sheet_behavior = 2131558470;
// aapt resource value: 0x7F0D0047 // aapt resource value: 0x7F0D0047
public const int gcm_defaultSenderId = 2131558471; public const int fcm_fallback_notification_channel_label = 2131558471;
// aapt resource value: 0x7F0D0048 // aapt resource value: 0x7F0D0048
public const int google_api_key = 2131558472; public const int firebase_database_url = 2131558472;
// aapt resource value: 0x7F0D0049 // aapt resource value: 0x7F0D0049
public const int google_app_id = 2131558473; public const int gcm_defaultSenderId = 2131558473;
// aapt resource value: 0x7F0D004A // aapt resource value: 0x7F0D004A
public const int google_crash_reporting_api_key = 2131558474; public const int google_api_key = 2131558474;
// aapt resource value: 0x7F0D004B // aapt resource value: 0x7F0D004B
public const int google_storage_bucket = 2131558475; public const int google_app_id = 2131558475;
// aapt resource value: 0x7F0D004C
public const int google_crash_reporting_api_key = 2131558476;
// aapt resource value: 0x7F0D004D
public const int google_storage_bucket = 2131558477;
// aapt resource value: 0x7F0D0003 // aapt resource value: 0x7F0D0003
public const int Hello = 2131558403; public const int Hello = 2131558403;
// aapt resource value: 0x7F0D004C
public const int hide_bottom_view_on_scroll_behavior = 2131558476;
// aapt resource value: 0x7F0D004D
public const int hockeyapp_crash_dialog_app_name_fallback = 2131558477;
// aapt resource value: 0x7F0D004E // aapt resource value: 0x7F0D004E
public const int hockeyapp_crash_dialog_message = 2131558478; public const int hide_bottom_view_on_scroll_behavior = 2131558478;
// aapt resource value: 0x7F0D004F // aapt resource value: 0x7F0D004F
public const int hockeyapp_crash_dialog_negative_button = 2131558479; public const int hockeyapp_crash_dialog_app_name_fallback = 2131558479;
// aapt resource value: 0x7F0D0050 // aapt resource value: 0x7F0D0050
public const int hockeyapp_crash_dialog_neutral_button = 2131558480; public const int hockeyapp_crash_dialog_message = 2131558480;
// aapt resource value: 0x7F0D0051 // aapt resource value: 0x7F0D0051
public const int hockeyapp_crash_dialog_positive_button = 2131558481; public const int hockeyapp_crash_dialog_negative_button = 2131558481;
// aapt resource value: 0x7F0D0052 // aapt resource value: 0x7F0D0052
public const int hockeyapp_crash_dialog_title = 2131558482; public const int hockeyapp_crash_dialog_neutral_button = 2131558482;
// aapt resource value: 0x7F0D0053 // aapt resource value: 0x7F0D0053
public const int hockeyapp_dialog_error_message = 2131558483; public const int hockeyapp_crash_dialog_positive_button = 2131558483;
// aapt resource value: 0x7F0D0054 // aapt resource value: 0x7F0D0054
public const int hockeyapp_dialog_error_title = 2131558484; public const int hockeyapp_crash_dialog_title = 2131558484;
// aapt resource value: 0x7F0D0055 // aapt resource value: 0x7F0D0055
public const int hockeyapp_dialog_positive_button = 2131558485; public const int hockeyapp_dialog_error_message = 2131558485;
// aapt resource value: 0x7F0D0056 // aapt resource value: 0x7F0D0056
public const int hockeyapp_download_failed_dialog_message = 2131558486; public const int hockeyapp_dialog_error_title = 2131558486;
// aapt resource value: 0x7F0D0057 // aapt resource value: 0x7F0D0057
public const int hockeyapp_download_failed_dialog_negative_button = 2131558487; public const int hockeyapp_dialog_positive_button = 2131558487;
// aapt resource value: 0x7F0D0058 // aapt resource value: 0x7F0D0058
public const int hockeyapp_download_failed_dialog_positive_button = 2131558488; public const int hockeyapp_download_failed_dialog_message = 2131558488;
// aapt resource value: 0x7F0D0059 // aapt resource value: 0x7F0D0059
public const int hockeyapp_download_failed_dialog_title = 2131558489; public const int hockeyapp_download_failed_dialog_negative_button = 2131558489;
// aapt resource value: 0x7F0D005A // aapt resource value: 0x7F0D005A
public const int hockeyapp_error_install_form_unknown_sources_disabled = 2131558490; public const int hockeyapp_download_failed_dialog_positive_button = 2131558490;
// aapt resource value: 0x7F0D005B // aapt resource value: 0x7F0D005B
public const int hockeyapp_error_no_external_storage_permission = 2131558491; public const int hockeyapp_download_failed_dialog_title = 2131558491;
// aapt resource value: 0x7F0D005C // aapt resource value: 0x7F0D005C
public const int hockeyapp_error_no_network_message = 2131558492; public const int hockeyapp_error_install_form_unknown_sources_disabled = 2131558492;
// aapt resource value: 0x7F0D005D // aapt resource value: 0x7F0D005D
public const int hockeyapp_expiry_info_text = 2131558493; public const int hockeyapp_error_no_external_storage_permission = 2131558493;
// aapt resource value: 0x7F0D005E // aapt resource value: 0x7F0D005E
public const int hockeyapp_expiry_info_title = 2131558494; public const int hockeyapp_error_no_network_message = 2131558494;
// aapt resource value: 0x7F0D0061
public const int hockeyapp_feedback_attachment_added = 2131558497;
// aapt resource value: 0x7F0D0062
public const int hockeyapp_feedback_attachment_button_text = 2131558498;
// aapt resource value: 0x7F0D0063
public const int hockeyapp_feedback_attachment_error = 2131558499;
// aapt resource value: 0x7F0D0064
public const int hockeyapp_feedback_attachment_loading = 2131558500;
// aapt resource value: 0x7F0D0066
public const int hockeyapp_feedback_attachment_removed = 2131558502;
// aapt resource value: 0x7F0D0065
public const int hockeyapp_feedback_attachment_remove_description = 2131558501;
// aapt resource value: 0x7F0D005F // aapt resource value: 0x7F0D005F
public const int hockeyapp_feedback_attach_file = 2131558495; public const int hockeyapp_expiry_info_text = 2131558495;
// aapt resource value: 0x7F0D0060 // aapt resource value: 0x7F0D0060
public const int hockeyapp_feedback_attach_picture = 2131558496; public const int hockeyapp_expiry_info_title = 2131558496;
// aapt resource value: 0x7F0D0067 // aapt resource value: 0x7F0D0063
public const int hockeyapp_feedback_email_hint = 2131558503; public const int hockeyapp_feedback_attachment_added = 2131558499;
// aapt resource value: 0x7F0D0064
public const int hockeyapp_feedback_attachment_button_text = 2131558500;
// aapt resource value: 0x7F0D0065
public const int hockeyapp_feedback_attachment_error = 2131558501;
// aapt resource value: 0x7F0D0066
public const int hockeyapp_feedback_attachment_loading = 2131558502;
// aapt resource value: 0x7F0D0068 // aapt resource value: 0x7F0D0068
public const int hockeyapp_feedback_email_hint_required = 2131558504; public const int hockeyapp_feedback_attachment_removed = 2131558504;
// aapt resource value: 0x7F0D0067
public const int hockeyapp_feedback_attachment_remove_description = 2131558503;
// aapt resource value: 0x7F0D0061
public const int hockeyapp_feedback_attach_file = 2131558497;
// aapt resource value: 0x7F0D0062
public const int hockeyapp_feedback_attach_picture = 2131558498;
// aapt resource value: 0x7F0D0069 // aapt resource value: 0x7F0D0069
public const int hockeyapp_feedback_fetching_feedback_text = 2131558505; public const int hockeyapp_feedback_email_hint = 2131558505;
// aapt resource value: 0x7F0D006A // aapt resource value: 0x7F0D006A
public const int hockeyapp_feedback_last_updated_text = 2131558506; public const int hockeyapp_feedback_email_hint_required = 2131558506;
// aapt resource value: 0x7F0D006B // aapt resource value: 0x7F0D006B
public const int hockeyapp_feedback_max_attachments_allowed = 2131558507; public const int hockeyapp_feedback_fetching_feedback_text = 2131558507;
// aapt resource value: 0x7F0D006C // aapt resource value: 0x7F0D006C
public const int hockeyapp_feedback_message_hint = 2131558508; public const int hockeyapp_feedback_last_updated_text = 2131558508;
// aapt resource value: 0x7F0D006D // aapt resource value: 0x7F0D006D
public const int hockeyapp_feedback_message_hint_required = 2131558509; public const int hockeyapp_feedback_max_attachments_allowed = 2131558509;
// aapt resource value: 0x7F0D006E // aapt resource value: 0x7F0D006E
public const int hockeyapp_feedback_name_hint = 2131558510; public const int hockeyapp_feedback_message_hint = 2131558510;
// aapt resource value: 0x7F0D006F // aapt resource value: 0x7F0D006F
public const int hockeyapp_feedback_name_hint_required = 2131558511; public const int hockeyapp_feedback_message_hint_required = 2131558511;
// aapt resource value: 0x7F0D0070 // aapt resource value: 0x7F0D0070
public const int hockeyapp_feedback_new_answer_notification_message = 2131558512; public const int hockeyapp_feedback_name_hint = 2131558512;
// aapt resource value: 0x7F0D0071 // aapt resource value: 0x7F0D0071
public const int hockeyapp_feedback_notification_channel = 2131558513; public const int hockeyapp_feedback_name_hint_required = 2131558513;
// aapt resource value: 0x7F0D0072 // aapt resource value: 0x7F0D0072
public const int hockeyapp_feedback_notification_title = 2131558514; public const int hockeyapp_feedback_new_answer_notification_message = 2131558514;
// aapt resource value: 0x7F0D0073 // aapt resource value: 0x7F0D0073
public const int hockeyapp_feedback_refresh_button_text = 2131558515; public const int hockeyapp_feedback_notification_channel = 2131558515;
// aapt resource value: 0x7F0D0074 // aapt resource value: 0x7F0D0074
public const int hockeyapp_feedback_response_button_text = 2131558516; public const int hockeyapp_feedback_notification_title = 2131558516;
// aapt resource value: 0x7F0D0075 // aapt resource value: 0x7F0D0075
public const int hockeyapp_feedback_screenshot_fail = 2131558517; public const int hockeyapp_feedback_refresh_button_text = 2131558517;
// aapt resource value: 0x7F0D0076 // aapt resource value: 0x7F0D0076
public const int hockeyapp_feedback_screenshot_notification_message = 2131558518; public const int hockeyapp_feedback_response_button_text = 2131558518;
// aapt resource value: 0x7F0D0077 // aapt resource value: 0x7F0D0077
public const int hockeyapp_feedback_select_file = 2131558519; public const int hockeyapp_feedback_screenshot_fail = 2131558519;
// aapt resource value: 0x7F0D0078 // aapt resource value: 0x7F0D0078
public const int hockeyapp_feedback_select_picture = 2131558520; public const int hockeyapp_feedback_screenshot_notification_message = 2131558520;
// aapt resource value: 0x7F0D007C
public const int hockeyapp_feedback_sending_feedback_text = 2131558524;
// aapt resource value: 0x7F0D0079 // aapt resource value: 0x7F0D0079
public const int hockeyapp_feedback_send_button_text = 2131558521; public const int hockeyapp_feedback_select_file = 2131558521;
// aapt resource value: 0x7F0D007A // aapt resource value: 0x7F0D007A
public const int hockeyapp_feedback_send_generic_error = 2131558522; public const int hockeyapp_feedback_select_picture = 2131558522;
// aapt resource value: 0x7F0D007B
public const int hockeyapp_feedback_send_network_error = 2131558523;
// aapt resource value: 0x7F0D007D
public const int hockeyapp_feedback_sent_toast = 2131558525;
// aapt resource value: 0x7F0D007E // aapt resource value: 0x7F0D007E
public const int hockeyapp_feedback_subject_hint = 2131558526; public const int hockeyapp_feedback_sending_feedback_text = 2131558526;
// aapt resource value: 0x7F0D007B
public const int hockeyapp_feedback_send_button_text = 2131558523;
// aapt resource value: 0x7F0D007C
public const int hockeyapp_feedback_send_generic_error = 2131558524;
// aapt resource value: 0x7F0D007D
public const int hockeyapp_feedback_send_network_error = 2131558525;
// aapt resource value: 0x7F0D007F // aapt resource value: 0x7F0D007F
public const int hockeyapp_feedback_subject_hint_required = 2131558527; public const int hockeyapp_feedback_sent_toast = 2131558527;
// aapt resource value: 0x7F0D0080 // aapt resource value: 0x7F0D0080
public const int hockeyapp_feedback_title = 2131558528; public const int hockeyapp_feedback_subject_hint = 2131558528;
// aapt resource value: 0x7F0D0081 // aapt resource value: 0x7F0D0081
public const int hockeyapp_feedback_validate_email_empty = 2131558529; public const int hockeyapp_feedback_subject_hint_required = 2131558529;
// aapt resource value: 0x7F0D0082 // aapt resource value: 0x7F0D0082
public const int hockeyapp_feedback_validate_email_error = 2131558530; public const int hockeyapp_feedback_title = 2131558530;
// aapt resource value: 0x7F0D0083 // aapt resource value: 0x7F0D0083
public const int hockeyapp_feedback_validate_name_error = 2131558531; public const int hockeyapp_feedback_validate_email_empty = 2131558531;
// aapt resource value: 0x7F0D0084 // aapt resource value: 0x7F0D0084
public const int hockeyapp_feedback_validate_subject_error = 2131558532; public const int hockeyapp_feedback_validate_email_error = 2131558532;
// aapt resource value: 0x7F0D0085 // aapt resource value: 0x7F0D0085
public const int hockeyapp_feedback_validate_text_error = 2131558533; public const int hockeyapp_feedback_validate_name_error = 2131558533;
// aapt resource value: 0x7F0D0086 // aapt resource value: 0x7F0D0086
public const int hockeyapp_login_email_hint_required = 2131558534; public const int hockeyapp_feedback_validate_subject_error = 2131558534;
// aapt resource value: 0x7F0D0087 // aapt resource value: 0x7F0D0087
public const int hockeyapp_login_headline_text = 2131558535; public const int hockeyapp_feedback_validate_text_error = 2131558535;
// aapt resource value: 0x7F0D0088 // aapt resource value: 0x7F0D0088
public const int hockeyapp_login_headline_text_email_only = 2131558536; public const int hockeyapp_login_email_hint_required = 2131558536;
// aapt resource value: 0x7F0D0089 // aapt resource value: 0x7F0D0089
public const int hockeyapp_login_login_button_text = 2131558537; public const int hockeyapp_login_headline_text = 2131558537;
// aapt resource value: 0x7F0D008A // aapt resource value: 0x7F0D008A
public const int hockeyapp_login_missing_credentials_toast = 2131558538; public const int hockeyapp_login_headline_text_email_only = 2131558538;
// aapt resource value: 0x7F0D008B // aapt resource value: 0x7F0D008B
public const int hockeyapp_login_password_hint_required = 2131558539; public const int hockeyapp_login_login_button_text = 2131558539;
// aapt resource value: 0x7F0D008C // aapt resource value: 0x7F0D008C
public const int hockeyapp_paint_dialog_message = 2131558540; public const int hockeyapp_login_missing_credentials_toast = 2131558540;
// aapt resource value: 0x7F0D008D // aapt resource value: 0x7F0D008D
public const int hockeyapp_paint_dialog_negative_button = 2131558541; public const int hockeyapp_login_password_hint_required = 2131558541;
// aapt resource value: 0x7F0D008E // aapt resource value: 0x7F0D008E
public const int hockeyapp_paint_dialog_neutral_button = 2131558542; public const int hockeyapp_paint_dialog_message = 2131558542;
// aapt resource value: 0x7F0D008F // aapt resource value: 0x7F0D008F
public const int hockeyapp_paint_dialog_positive_button = 2131558543; public const int hockeyapp_paint_dialog_negative_button = 2131558543;
// aapt resource value: 0x7F0D0090 // aapt resource value: 0x7F0D0090
public const int hockeyapp_paint_indicator_toast = 2131558544; public const int hockeyapp_paint_dialog_neutral_button = 2131558544;
// aapt resource value: 0x7F0D0091 // aapt resource value: 0x7F0D0091
public const int hockeyapp_paint_menu_clear = 2131558545; public const int hockeyapp_paint_dialog_positive_button = 2131558545;
// aapt resource value: 0x7F0D0092 // aapt resource value: 0x7F0D0092
public const int hockeyapp_paint_menu_save = 2131558546; public const int hockeyapp_paint_indicator_toast = 2131558546;
// aapt resource value: 0x7F0D0093 // aapt resource value: 0x7F0D0093
public const int hockeyapp_paint_menu_undo = 2131558547; public const int hockeyapp_paint_menu_clear = 2131558547;
// aapt resource value: 0x7F0D0094 // aapt resource value: 0x7F0D0094
public const int hockeyapp_update_already_installed = 2131558548; public const int hockeyapp_paint_menu_save = 2131558548;
// aapt resource value: 0x7F0D0095 // aapt resource value: 0x7F0D0095
public const int hockeyapp_update_button = 2131558549; public const int hockeyapp_paint_menu_undo = 2131558549;
// aapt resource value: 0x7F0D0096 // aapt resource value: 0x7F0D0096
public const int hockeyapp_update_dialog_message = 2131558550; public const int hockeyapp_update_already_installed = 2131558550;
// aapt resource value: 0x7F0D0097 // aapt resource value: 0x7F0D0097
public const int hockeyapp_update_dialog_negative_button = 2131558551; public const int hockeyapp_update_button = 2131558551;
// aapt resource value: 0x7F0D0098 // aapt resource value: 0x7F0D0098
public const int hockeyapp_update_dialog_positive_button = 2131558552; public const int hockeyapp_update_dialog_message = 2131558552;
// aapt resource value: 0x7F0D0099 // aapt resource value: 0x7F0D0099
public const int hockeyapp_update_dialog_title = 2131558553; public const int hockeyapp_update_dialog_negative_button = 2131558553;
// aapt resource value: 0x7F0D009A // aapt resource value: 0x7F0D009A
public const int hockeyapp_update_loading = 2131558554; public const int hockeyapp_update_dialog_positive_button = 2131558554;
// aapt resource value: 0x7F0D009B // aapt resource value: 0x7F0D009B
public const int hockeyapp_update_mandatory_toast = 2131558555; public const int hockeyapp_update_dialog_title = 2131558555;
// aapt resource value: 0x7F0D009C // aapt resource value: 0x7F0D009C
public const int hockeyapp_update_newest_version = 2131558556; public const int hockeyapp_update_loading = 2131558556;
// aapt resource value: 0x7F0D009D // aapt resource value: 0x7F0D009D
public const int hockeyapp_update_no_info = 2131558557; public const int hockeyapp_update_mandatory_toast = 2131558557;
// aapt resource value: 0x7F0D009E // aapt resource value: 0x7F0D009E
public const int hockeyapp_update_restore = 2131558558; public const int hockeyapp_update_newest_version = 2131558558;
// aapt resource value: 0x7F0D009F // aapt resource value: 0x7F0D009F
public const int hockeyapp_update_title = 2131558559; public const int hockeyapp_update_no_info = 2131558559;
// aapt resource value: 0x7F0D00A0 // aapt resource value: 0x7F0D00A0
public const int hockeyapp_update_unknown_size = 2131558560; public const int hockeyapp_update_restore = 2131558560;
// aapt resource value: 0x7F0D00A1 // aapt resource value: 0x7F0D00A1
public const int hockeyapp_update_version = 2131558561; public const int hockeyapp_update_title = 2131558561;
// aapt resource value: 0x7F0D00A2 // aapt resource value: 0x7F0D00A2
public const int hockeyapp_update_version_details_label = 2131558562; public const int hockeyapp_update_unknown_size = 2131558562;
// aapt resource value: 0x7F0D00A3 // aapt resource value: 0x7F0D00A3
public const int library_name = 2131558563; public const int hockeyapp_update_version = 2131558563;
// aapt resource value: 0x7F0D00A4 // aapt resource value: 0x7F0D00A4
public const int mr_button_content_description = 2131558564; public const int hockeyapp_update_version_details_label = 2131558564;
// aapt resource value: 0x7F0D00A5 // aapt resource value: 0x7F0D00A5
public const int mr_cast_button_connected = 2131558565; public const int library_name = 2131558565;
// aapt resource value: 0x7F0D00A6 // aapt resource value: 0x7F0D00A6
public const int mr_cast_button_connecting = 2131558566; public const int mr_button_content_description = 2131558566;
// aapt resource value: 0x7F0D00A7 // aapt resource value: 0x7F0D00A7
public const int mr_cast_button_disconnected = 2131558567; public const int mr_cast_button_connected = 2131558567;
// aapt resource value: 0x7F0D00A8 // aapt resource value: 0x7F0D00A8
public const int mr_cast_dialog_title_view_placeholder = 2131558568; public const int mr_cast_button_connecting = 2131558568;
// aapt resource value: 0x7F0D00A9 // aapt resource value: 0x7F0D00A9
public const int mr_chooser_searching = 2131558569; public const int mr_cast_button_disconnected = 2131558569;
// aapt resource value: 0x7F0D00AA // aapt resource value: 0x7F0D00AA
public const int mr_chooser_title = 2131558570; public const int mr_cast_dialog_title_view_placeholder = 2131558570;
// aapt resource value: 0x7F0D00AB // aapt resource value: 0x7F0D00AB
public const int mr_controller_album_art = 2131558571; public const int mr_chooser_searching = 2131558571;
// aapt resource value: 0x7F0D00AC // aapt resource value: 0x7F0D00AC
public const int mr_controller_casting_screen = 2131558572; public const int mr_chooser_title = 2131558572;
// aapt resource value: 0x7F0D00AD // aapt resource value: 0x7F0D00AD
public const int mr_controller_close_description = 2131558573; public const int mr_controller_album_art = 2131558573;
// aapt resource value: 0x7F0D00AE // aapt resource value: 0x7F0D00AE
public const int mr_controller_collapse_group = 2131558574; public const int mr_controller_casting_screen = 2131558574;
// aapt resource value: 0x7F0D00AF // aapt resource value: 0x7F0D00AF
public const int mr_controller_disconnect = 2131558575; public const int mr_controller_close_description = 2131558575;
// aapt resource value: 0x7F0D00B0 // aapt resource value: 0x7F0D00B0
public const int mr_controller_expand_group = 2131558576; public const int mr_controller_collapse_group = 2131558576;
// aapt resource value: 0x7F0D00B1 // aapt resource value: 0x7F0D00B1
public const int mr_controller_no_info_available = 2131558577; public const int mr_controller_disconnect = 2131558577;
// aapt resource value: 0x7F0D00B2 // aapt resource value: 0x7F0D00B2
public const int mr_controller_no_media_selected = 2131558578; public const int mr_controller_expand_group = 2131558578;
// aapt resource value: 0x7F0D00B3 // aapt resource value: 0x7F0D00B3
public const int mr_controller_pause = 2131558579; public const int mr_controller_no_info_available = 2131558579;
// aapt resource value: 0x7F0D00B4 // aapt resource value: 0x7F0D00B4
public const int mr_controller_play = 2131558580; public const int mr_controller_no_media_selected = 2131558580;
// aapt resource value: 0x7F0D00B5 // aapt resource value: 0x7F0D00B5
public const int mr_controller_stop = 2131558581; public const int mr_controller_pause = 2131558581;
// aapt resource value: 0x7F0D00B6 // aapt resource value: 0x7F0D00B6
public const int mr_controller_stop_casting = 2131558582; public const int mr_controller_play = 2131558582;
// aapt resource value: 0x7F0D00B7 // aapt resource value: 0x7F0D00B7
public const int mr_controller_volume_slider = 2131558583; public const int mr_controller_stop = 2131558583;
// aapt resource value: 0x7F0D00B8 // aapt resource value: 0x7F0D00B8
public const int mr_dialog_device_header = 2131558584; public const int mr_controller_stop_casting = 2131558584;
// aapt resource value: 0x7F0D00B9 // aapt resource value: 0x7F0D00B9
public const int mr_dialog_route_header = 2131558585; public const int mr_controller_volume_slider = 2131558585;
// aapt resource value: 0x7F0D00BA // aapt resource value: 0x7F0D00BA
public const int mr_system_route_name = 2131558586; public const int mr_dialog_device_header = 2131558586;
// aapt resource value: 0x7F0D00BB // aapt resource value: 0x7F0D00BB
public const int mr_user_route_category_name = 2131558587; public const int mr_dialog_route_header = 2131558587;
// aapt resource value: 0x7F0D00BC // aapt resource value: 0x7F0D00BC
public const int mtrl_chip_close_icon_content_description = 2131558588; public const int mr_system_route_name = 2131558588;
// aapt resource value: 0x7F0D00BD
public const int mr_user_route_category_name = 2131558589;
// aapt resource value: 0x7F0D00BE
public const int mtrl_chip_close_icon_content_description = 2131558590;
// aapt resource value: 0x7F0D0004 // aapt resource value: 0x7F0D0004
public const int MyVault = 2131558404; public const int MyVault = 2131558404;
@ -11000,26 +11000,32 @@ namespace Bit.Droid
// aapt resource value: 0x7F0D0005 // aapt resource value: 0x7F0D0005
public const int PasswordGenerator = 2131558405; public const int PasswordGenerator = 2131558405;
// aapt resource value: 0x7F0D00BD
public const int password_toggle_content_description = 2131558589;
// aapt resource value: 0x7F0D00BE
public const int path_password_eye = 2131558590;
// aapt resource value: 0x7F0D00BF // aapt resource value: 0x7F0D00BF
public const int path_password_eye_mask_strike_through = 2131558591; public const int password_toggle_content_description = 2131558591;
// aapt resource value: 0x7F0D00C0 // aapt resource value: 0x7F0D00C0
public const int path_password_eye_mask_visible = 2131558592; public const int path_password_eye = 2131558592;
// aapt resource value: 0x7F0D00C1 // aapt resource value: 0x7F0D00C1
public const int path_password_strike_through = 2131558593; public const int path_password_eye_mask_strike_through = 2131558593;
// aapt resource value: 0x7F0D00C2 // aapt resource value: 0x7F0D00C2
public const int search_menu_title = 2131558594; public const int path_password_eye_mask_visible = 2131558594;
// aapt resource value: 0x7F0D00C3 // aapt resource value: 0x7F0D00C3
public const int status_bar_notification_info_overflow = 2131558595; public const int path_password_strike_through = 2131558595;
// aapt resource value: 0x7F0D00C4
public const int search_menu_title = 2131558596;
// aapt resource value: 0x7F0D0006
public const int SelfHostedServerUrl = 2131558406;
// aapt resource value: 0x7F0D0007
public const int ServerUrl = 2131558407;
// aapt resource value: 0x7F0D00C5
public const int status_bar_notification_info_overflow = 2131558597;
static String() static String()
{ {
@ -15659,16 +15665,19 @@ namespace Bit.Droid
public const int accessibilityservice = 2131755008; public const int accessibilityservice = 2131755008;
// aapt resource value: 0x7F100001 // aapt resource value: 0x7F100001
public const int autofillservice = 2131755009; public const int app_restrictions = 2131755009;
// aapt resource value: 0x7F100002 // aapt resource value: 0x7F100002
public const int filepaths = 2131755010; public const int autofillservice = 2131755010;
// aapt resource value: 0x7F100003 // aapt resource value: 0x7F100003
public const int network_security_config = 2131755011; public const int filepaths = 2131755011;
// aapt resource value: 0x7F100004 // aapt resource value: 0x7F100004
public const int xamarin_essentials_fileprovider_file_paths = 2131755012; public const int network_security_config = 2131755012;
// aapt resource value: 0x7F100005
public const int xamarin_essentials_fileprovider_file_paths = 2131755013;
static Xml() static Xml()
{ {

View File

@ -16,4 +16,10 @@
<string name="PasswordGenerator"> <string name="PasswordGenerator">
Password Generator Password Generator
</string> </string>
<string name="SelfHostedServerUrl">
Self-hosted server URL
</string>
<string name="ServerUrl">
Server URL
</string>
</resources> </resources>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
<restriction
android:key="baseEnvironmentUrl"
android:title="@string/SelfHostedServerUrl"
android:restrictionType="string"
android:description="@string/ServerUrl"
android:defaultValue="@null" />
</restrictions>

View File

@ -1,10 +1,15 @@
using Android.Content; using System.Collections.Generic;
using System.Threading.Tasks;
using Android.Content;
using Android.Provider; using Android.Provider;
using Bit.App.Utilities;
namespace Bit.Droid.Utilities namespace Bit.Droid.Utilities
{ {
public static class AndroidHelpers public static class AndroidHelpers
{ {
private static string BaseEnvironmentUrlRestrictionKey = "baseEnvironmentUrl";
public static string GetFileName(Context context, Android.Net.Uri uri) public static string GetFileName(Context context, Android.Net.Uri uri)
{ {
string name = null; string name = null;
@ -26,5 +31,21 @@ namespace Bit.Droid.Utilities
} }
return name; return name;
} }
public static async Task SetPreconfiguredRestrictionSettingsAsync(Context context)
{
var restrictionsManager = (RestrictionsManager)context.GetSystemService(Context.RestrictionsService);
var restrictions = restrictionsManager.ApplicationRestrictions;
var dict = new Dictionary<string, string>();
if(restrictions.ContainsKey(BaseEnvironmentUrlRestrictionKey))
{
dict.Add(BaseEnvironmentUrlRestrictionKey, restrictions.GetString(BaseEnvironmentUrlRestrictionKey));
}
if(dict.Count > 0)
{
await AppHelpers.SetPreconfiguredSettingsAsync(dict);
}
}
} }
} }

View File

@ -6,6 +6,7 @@ using Bit.Core.Abstractions;
using Bit.Core.Models.View; using Bit.Core.Models.View;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xamarin.Forms; using Xamarin.Forms;
@ -145,5 +146,35 @@ namespace Bit.App.Utilities
} }
return false; return false;
} }
public static async Task SetPreconfiguredSettingsAsync(IDictionary<string, string> configSettings)
{
if(configSettings?.Any() ?? true)
{
return;
}
foreach(var setting in configSettings)
{
switch(setting.Key)
{
case "baseEnvironmentUrl":
var environmentService = ServiceContainer.Resolve<IEnvironmentService>("environmentService");
if(environmentService.BaseUrl != setting.Value)
{
await environmentService.SetUrlsAsync(new Core.Models.Data.EnvironmentUrlData
{
Base = setting.Value,
Api = environmentService.ApiUrl,
Identity = environmentService.IdentityUrl,
WebVault = environmentService.WebVaultUrl,
Icons = environmentService.IconsUrl
});
}
break;
default:
break;
}
}
}
} }
} }

View File

@ -1,4 +1,5 @@
using System.IO; using System;
using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using Bit.App.Abstractions; using Bit.App.Abstractions;
using Bit.App.Services; using Bit.App.Services;
@ -64,12 +65,12 @@ namespace Bit.iOS.Core.Utilities
ServiceContainer.Register<IPlatformUtilsService>("platformUtilsService", platformUtilsService); ServiceContainer.Register<IPlatformUtilsService>("platformUtilsService", platformUtilsService);
} }
public static void Bootstrap() public static void Bootstrap(Func<Task> postBootstrapFunc = null)
{ {
(ServiceContainer.Resolve<II18nService>("i18nService") as MobileI18nService).Init(); (ServiceContainer.Resolve<II18nService>("i18nService") as MobileI18nService).Init();
ServiceContainer.Resolve<IAuthService>("authService").Init(); ServiceContainer.Resolve<IAuthService>("authService").Init();
// Note: This is not awaited // Note: This is not awaited
var bootstrapTask = BootstrapAsync(); var bootstrapTask = BootstrapAsync(postBootstrapFunc);
} }
public static void AppearanceAdjustments(IDeviceActionService deviceActionService) public static void AppearanceAdjustments(IDeviceActionService deviceActionService)
@ -79,13 +80,17 @@ namespace Bit.iOS.Core.Utilities
UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent; UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;
} }
private static async Task BootstrapAsync() private static async Task BootstrapAsync(Func<Task> postBootstrapFunc = null)
{ {
var disableFavicon = await ServiceContainer.Resolve<IStorageService>("storageService").GetAsync<bool?>( var disableFavicon = await ServiceContainer.Resolve<IStorageService>("storageService").GetAsync<bool?>(
Bit.Core.Constants.DisableFaviconKey); Bit.Core.Constants.DisableFaviconKey);
await ServiceContainer.Resolve<IStateService>("stateService").SaveAsync( await ServiceContainer.Resolve<IStateService>("stateService").SaveAsync(
Bit.Core.Constants.DisableFaviconKey, disableFavicon); Bit.Core.Constants.DisableFaviconKey, disableFavicon);
await ServiceContainer.Resolve<IEnvironmentService>("environmentService").SetUrlsFromStorageAsync(); await ServiceContainer.Resolve<IEnvironmentService>("environmentService").SetUrlsFromStorageAsync();
if(postBootstrapFunc != null)
{
await postBootstrapFunc.Invoke();
}
} }
} }
} }

View File

@ -282,7 +282,7 @@ namespace Bit.iOS
_nfcDelegate = new NFCReaderDelegate((success, message) => _nfcDelegate = new NFCReaderDelegate((success, message) =>
_messagingService.Send("gotYubiKeyOTP", message)); _messagingService.Send("gotYubiKeyOTP", message));
iOSCoreHelpers.Bootstrap(); iOSCoreHelpers.Bootstrap(async () => await ApplyManagedSettingsAsync());
} }
private void RegisterPush() private void RegisterPush()
@ -475,5 +475,20 @@ namespace Bit.iOS
UIApplication.SharedApplication.EndBackgroundTask(_eventBackgroundTaskId); UIApplication.SharedApplication.EndBackgroundTask(_eventBackgroundTaskId);
_eventBackgroundTaskId = 0; _eventBackgroundTaskId = 0;
} }
private async Task ApplyManagedSettingsAsync()
{
var userDefaults = NSUserDefaults.StandardUserDefaults;
var managedSettings = userDefaults.DictionaryForKey("com.apple.configuration.managed");
if(managedSettings != null && managedSettings.Count > 0)
{
var dict = new Dictionary<string, string>();
foreach(var setting in managedSettings)
{
dict.Add(setting.Key.ToString(), setting.Value?.ToString());
}
await AppHelpers.SetPreconfiguredSettingsAsync(dict);
}
}
} }
} }