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\FirebaseMessagingService.cs" />
<Compile Include="Receivers\ClearClipboardAlarmReceiver.cs" />
<Compile Include="Receivers\RestrictionsChangedReceiver.cs" />
<Compile Include="Receivers\EventUploadReceiver.cs" />
<Compile Include="Receivers\LockAlarmReceiver.cs" />
<Compile Include="Receivers\PackageReplacedReceiver.cs" />
@ -553,5 +554,11 @@
<ItemGroup>
<AndroidResource Include="Resources\drawable-xxhdpi\accessibility_permission.png" />
</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" />
</Project>

View file

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

View file

@ -54,5 +54,6 @@
</receiver>
<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>
</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
{
// 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
public const int abc_action_menu_overflow_description = 2131558408;
public const int abc_action_bar_home_description = 2131558408;
// aapt resource value: 0x7F0D0009
public const int abc_action_mode_done = 2131558409;
// aapt resource value: 0x7F0D000B
public const int abc_activitychooserview_choose_application = 2131558411;
public const int abc_action_bar_up_description = 2131558409;
// 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
public const int abc_capital_off = 2131558412;
// aapt resource value: 0x7F0D000B
public const int abc_action_mode_done = 2131558411;
// 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
public const int abc_font_family_body_1_material = 2131558414;
public const int abc_capital_off = 2131558414;
// 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
public const int abc_font_family_button_material = 2131558416;
public const int abc_font_family_body_1_material = 2131558416;
// 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
public const int abc_font_family_display_1_material = 2131558418;
public const int abc_font_family_button_material = 2131558418;
// 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
public const int abc_font_family_display_3_material = 2131558420;
public const int abc_font_family_display_1_material = 2131558420;
// 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
public const int abc_font_family_headline_material = 2131558422;
public const int abc_font_family_display_3_material = 2131558422;
// 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
public const int abc_font_family_subhead_material = 2131558424;
public const int abc_font_family_headline_material = 2131558424;
// 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
public const int abc_menu_alt_shortcut_label = 2131558426;
public const int abc_font_family_subhead_material = 2131558426;
// 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
public const int abc_menu_delete_shortcut_label = 2131558428;
public const int abc_menu_alt_shortcut_label = 2131558428;
// 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
public const int abc_menu_function_shortcut_label = 2131558430;
public const int abc_menu_delete_shortcut_label = 2131558430;
// 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
public const int abc_menu_shift_shortcut_label = 2131558432;
public const int abc_menu_function_shortcut_label = 2131558432;
// 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
public const int abc_menu_sym_shortcut_label = 2131558434;
public const int abc_menu_shift_shortcut_label = 2131558434;
// aapt resource value: 0x7F0D0023
public const int abc_prepend_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;
public const int abc_menu_space_shortcut_label = 2131558435;
// 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
public const int abc_shareactionprovider_share_with = 2131558442;
public const int abc_searchview_description_submit = 2131558442;
// 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
public const int abc_toolbar_collapse_description = 2131558444;
public const int abc_shareactionprovider_share_with = 2131558444;
// 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
public const int ApplicationName = 2131558400;
@ -10562,437 +10562,437 @@ namespace Bit.Droid
// aapt resource value: 0x7F0D0002
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
public const int character_counter_pattern = 2131558448;
public const int bottom_sheet_behavior = 2131558448;
// 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
public const int common_google_play_services_enable_text = 2131558450;
public const int character_counter_pattern = 2131558450;
// 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
public const int common_google_play_services_install_button = 2131558452;
public const int common_google_play_services_enable_text = 2131558452;
// 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
public const int common_google_play_services_install_title = 2131558454;
public const int common_google_play_services_install_button = 2131558454;
// 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
public const int common_google_play_services_unknown_issue = 2131558456;
public const int common_google_play_services_install_title = 2131558456;
// 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
public const int common_google_play_services_update_button = 2131558458;
public const int common_google_play_services_unknown_issue = 2131558458;
// 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
public const int common_google_play_services_update_title = 2131558460;
public const int common_google_play_services_update_button = 2131558460;
// 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
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
public const int common_open_on_phone = 2131558463;
public const int common_google_play_services_updating_text = 2131558463;
// 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
public const int common_signin_button_text_long = 2131558465;
public const int common_open_on_phone = 2131558465;
// aapt resource value: 0x7F0D0042
public const int default_web_client_id = 2131558466;
public const int common_signin_button_text = 2131558466;
// 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
public const int fab_transformation_sheet_behavior = 2131558468;
public const int default_web_client_id = 2131558468;
// 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
public const int firebase_database_url = 2131558470;
public const int fab_transformation_sheet_behavior = 2131558470;
// aapt resource value: 0x7F0D0047
public const int gcm_defaultSenderId = 2131558471;
public const int fcm_fallback_notification_channel_label = 2131558471;
// aapt resource value: 0x7F0D0048
public const int google_api_key = 2131558472;
public const int firebase_database_url = 2131558472;
// aapt resource value: 0x7F0D0049
public const int google_app_id = 2131558473;
public const int gcm_defaultSenderId = 2131558473;
// aapt resource value: 0x7F0D004A
public const int google_crash_reporting_api_key = 2131558474;
public const int google_api_key = 2131558474;
// 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
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
public const int hockeyapp_crash_dialog_message = 2131558478;
public const int hide_bottom_view_on_scroll_behavior = 2131558478;
// 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
public const int hockeyapp_crash_dialog_neutral_button = 2131558480;
public const int hockeyapp_crash_dialog_message = 2131558480;
// 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
public const int hockeyapp_crash_dialog_title = 2131558482;
public const int hockeyapp_crash_dialog_neutral_button = 2131558482;
// 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
public const int hockeyapp_dialog_error_title = 2131558484;
public const int hockeyapp_crash_dialog_title = 2131558484;
// aapt resource value: 0x7F0D0055
public const int hockeyapp_dialog_positive_button = 2131558485;
public const int hockeyapp_dialog_error_message = 2131558485;
// 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
public const int hockeyapp_download_failed_dialog_negative_button = 2131558487;
public const int hockeyapp_dialog_positive_button = 2131558487;
// 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
public const int hockeyapp_download_failed_dialog_title = 2131558489;
public const int hockeyapp_download_failed_dialog_negative_button = 2131558489;
// 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
public const int hockeyapp_error_no_external_storage_permission = 2131558491;
public const int hockeyapp_download_failed_dialog_title = 2131558491;
// 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
public const int hockeyapp_expiry_info_text = 2131558493;
public const int hockeyapp_error_no_external_storage_permission = 2131558493;
// aapt resource value: 0x7F0D005E
public const int hockeyapp_expiry_info_title = 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;
public const int hockeyapp_error_no_network_message = 2131558494;
// aapt resource value: 0x7F0D005F
public const int hockeyapp_feedback_attach_file = 2131558495;
public const int hockeyapp_expiry_info_text = 2131558495;
// aapt resource value: 0x7F0D0060
public const int hockeyapp_feedback_attach_picture = 2131558496;
public const int hockeyapp_expiry_info_title = 2131558496;
// aapt resource value: 0x7F0D0067
public const int hockeyapp_feedback_email_hint = 2131558503;
// aapt resource value: 0x7F0D0063
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
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
public const int hockeyapp_feedback_fetching_feedback_text = 2131558505;
public const int hockeyapp_feedback_email_hint = 2131558505;
// 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
public const int hockeyapp_feedback_max_attachments_allowed = 2131558507;
public const int hockeyapp_feedback_fetching_feedback_text = 2131558507;
// 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
public const int hockeyapp_feedback_message_hint_required = 2131558509;
public const int hockeyapp_feedback_max_attachments_allowed = 2131558509;
// aapt resource value: 0x7F0D006E
public const int hockeyapp_feedback_name_hint = 2131558510;
public const int hockeyapp_feedback_message_hint = 2131558510;
// 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
public const int hockeyapp_feedback_new_answer_notification_message = 2131558512;
public const int hockeyapp_feedback_name_hint = 2131558512;
// 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
public const int hockeyapp_feedback_notification_title = 2131558514;
public const int hockeyapp_feedback_new_answer_notification_message = 2131558514;
// 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
public const int hockeyapp_feedback_response_button_text = 2131558516;
public const int hockeyapp_feedback_notification_title = 2131558516;
// 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
public const int hockeyapp_feedback_screenshot_notification_message = 2131558518;
public const int hockeyapp_feedback_response_button_text = 2131558518;
// aapt resource value: 0x7F0D0077
public const int hockeyapp_feedback_select_file = 2131558519;
public const int hockeyapp_feedback_screenshot_fail = 2131558519;
// aapt resource value: 0x7F0D0078
public const int hockeyapp_feedback_select_picture = 2131558520;
// aapt resource value: 0x7F0D007C
public const int hockeyapp_feedback_sending_feedback_text = 2131558524;
public const int hockeyapp_feedback_screenshot_notification_message = 2131558520;
// 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
public const int hockeyapp_feedback_send_generic_error = 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;
public const int hockeyapp_feedback_select_picture = 2131558522;
// 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
public const int hockeyapp_feedback_subject_hint_required = 2131558527;
public const int hockeyapp_feedback_sent_toast = 2131558527;
// aapt resource value: 0x7F0D0080
public const int hockeyapp_feedback_title = 2131558528;
public const int hockeyapp_feedback_subject_hint = 2131558528;
// 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
public const int hockeyapp_feedback_validate_email_error = 2131558530;
public const int hockeyapp_feedback_title = 2131558530;
// 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
public const int hockeyapp_feedback_validate_subject_error = 2131558532;
public const int hockeyapp_feedback_validate_email_error = 2131558532;
// 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
public const int hockeyapp_login_email_hint_required = 2131558534;
public const int hockeyapp_feedback_validate_subject_error = 2131558534;
// 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
public const int hockeyapp_login_headline_text_email_only = 2131558536;
public const int hockeyapp_login_email_hint_required = 2131558536;
// 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
public const int hockeyapp_login_missing_credentials_toast = 2131558538;
public const int hockeyapp_login_headline_text_email_only = 2131558538;
// 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
public const int hockeyapp_paint_dialog_message = 2131558540;
public const int hockeyapp_login_missing_credentials_toast = 2131558540;
// 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
public const int hockeyapp_paint_dialog_neutral_button = 2131558542;
public const int hockeyapp_paint_dialog_message = 2131558542;
// 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
public const int hockeyapp_paint_indicator_toast = 2131558544;
public const int hockeyapp_paint_dialog_neutral_button = 2131558544;
// 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
public const int hockeyapp_paint_menu_save = 2131558546;
public const int hockeyapp_paint_indicator_toast = 2131558546;
// aapt resource value: 0x7F0D0093
public const int hockeyapp_paint_menu_undo = 2131558547;
public const int hockeyapp_paint_menu_clear = 2131558547;
// aapt resource value: 0x7F0D0094
public const int hockeyapp_update_already_installed = 2131558548;
public const int hockeyapp_paint_menu_save = 2131558548;
// aapt resource value: 0x7F0D0095
public const int hockeyapp_update_button = 2131558549;
public const int hockeyapp_paint_menu_undo = 2131558549;
// aapt resource value: 0x7F0D0096
public const int hockeyapp_update_dialog_message = 2131558550;
public const int hockeyapp_update_already_installed = 2131558550;
// aapt resource value: 0x7F0D0097
public const int hockeyapp_update_dialog_negative_button = 2131558551;
public const int hockeyapp_update_button = 2131558551;
// 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
public const int hockeyapp_update_dialog_title = 2131558553;
public const int hockeyapp_update_dialog_negative_button = 2131558553;
// aapt resource value: 0x7F0D009A
public const int hockeyapp_update_loading = 2131558554;
public const int hockeyapp_update_dialog_positive_button = 2131558554;
// aapt resource value: 0x7F0D009B
public const int hockeyapp_update_mandatory_toast = 2131558555;
public const int hockeyapp_update_dialog_title = 2131558555;
// aapt resource value: 0x7F0D009C
public const int hockeyapp_update_newest_version = 2131558556;
public const int hockeyapp_update_loading = 2131558556;
// aapt resource value: 0x7F0D009D
public const int hockeyapp_update_no_info = 2131558557;
public const int hockeyapp_update_mandatory_toast = 2131558557;
// aapt resource value: 0x7F0D009E
public const int hockeyapp_update_restore = 2131558558;
public const int hockeyapp_update_newest_version = 2131558558;
// aapt resource value: 0x7F0D009F
public const int hockeyapp_update_title = 2131558559;
public const int hockeyapp_update_no_info = 2131558559;
// aapt resource value: 0x7F0D00A0
public const int hockeyapp_update_unknown_size = 2131558560;
public const int hockeyapp_update_restore = 2131558560;
// aapt resource value: 0x7F0D00A1
public const int hockeyapp_update_version = 2131558561;
public const int hockeyapp_update_title = 2131558561;
// 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
public const int library_name = 2131558563;
public const int hockeyapp_update_version = 2131558563;
// 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
public const int mr_cast_button_connected = 2131558565;
public const int library_name = 2131558565;
// aapt resource value: 0x7F0D00A6
public const int mr_cast_button_connecting = 2131558566;
public const int mr_button_content_description = 2131558566;
// aapt resource value: 0x7F0D00A7
public const int mr_cast_button_disconnected = 2131558567;
public const int mr_cast_button_connected = 2131558567;
// 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
public const int mr_chooser_searching = 2131558569;
public const int mr_cast_button_disconnected = 2131558569;
// 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
public const int mr_controller_album_art = 2131558571;
public const int mr_chooser_searching = 2131558571;
// aapt resource value: 0x7F0D00AC
public const int mr_controller_casting_screen = 2131558572;
public const int mr_chooser_title = 2131558572;
// aapt resource value: 0x7F0D00AD
public const int mr_controller_close_description = 2131558573;
public const int mr_controller_album_art = 2131558573;
// aapt resource value: 0x7F0D00AE
public const int mr_controller_collapse_group = 2131558574;
public const int mr_controller_casting_screen = 2131558574;
// aapt resource value: 0x7F0D00AF
public const int mr_controller_disconnect = 2131558575;
public const int mr_controller_close_description = 2131558575;
// aapt resource value: 0x7F0D00B0
public const int mr_controller_expand_group = 2131558576;
public const int mr_controller_collapse_group = 2131558576;
// aapt resource value: 0x7F0D00B1
public const int mr_controller_no_info_available = 2131558577;
public const int mr_controller_disconnect = 2131558577;
// 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
public const int mr_controller_pause = 2131558579;
public const int mr_controller_no_info_available = 2131558579;
// aapt resource value: 0x7F0D00B4
public const int mr_controller_play = 2131558580;
public const int mr_controller_no_media_selected = 2131558580;
// aapt resource value: 0x7F0D00B5
public const int mr_controller_stop = 2131558581;
public const int mr_controller_pause = 2131558581;
// aapt resource value: 0x7F0D00B6
public const int mr_controller_stop_casting = 2131558582;
public const int mr_controller_play = 2131558582;
// aapt resource value: 0x7F0D00B7
public const int mr_controller_volume_slider = 2131558583;
public const int mr_controller_stop = 2131558583;
// aapt resource value: 0x7F0D00B8
public const int mr_dialog_device_header = 2131558584;
public const int mr_controller_stop_casting = 2131558584;
// aapt resource value: 0x7F0D00B9
public const int mr_dialog_route_header = 2131558585;
public const int mr_controller_volume_slider = 2131558585;
// aapt resource value: 0x7F0D00BA
public const int mr_system_route_name = 2131558586;
public const int mr_dialog_device_header = 2131558586;
// 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
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
public const int MyVault = 2131558404;
@ -11000,26 +11000,32 @@ namespace Bit.Droid
// aapt resource value: 0x7F0D0005
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
public const int path_password_eye_mask_strike_through = 2131558591;
public const int password_toggle_content_description = 2131558591;
// aapt resource value: 0x7F0D00C0
public const int path_password_eye_mask_visible = 2131558592;
public const int path_password_eye = 2131558592;
// 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
public const int search_menu_title = 2131558594;
public const int path_password_eye_mask_visible = 2131558594;
// 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()
{
@ -15659,16 +15665,19 @@ namespace Bit.Droid
public const int accessibilityservice = 2131755008;
// aapt resource value: 0x7F100001
public const int autofillservice = 2131755009;
public const int app_restrictions = 2131755009;
// aapt resource value: 0x7F100002
public const int filepaths = 2131755010;
public const int autofillservice = 2131755010;
// aapt resource value: 0x7F100003
public const int network_security_config = 2131755011;
public const int filepaths = 2131755011;
// 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()
{

View file

@ -16,4 +16,10 @@
<string name="PasswordGenerator">
Password Generator
</string>
<string name="SelfHostedServerUrl">
Self-hosted server URL
</string>
<string name="ServerUrl">
Server URL
</string>
</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 Bit.App.Utilities;
namespace Bit.Droid.Utilities
{
public static class AndroidHelpers
{
private static string BaseEnvironmentUrlRestrictionKey = "baseEnvironmentUrl";
public static string GetFileName(Context context, Android.Net.Uri uri)
{
string name = null;
@ -26,5 +31,21 @@ namespace Bit.Droid.Utilities
}
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.Utilities;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xamarin.Forms;
@ -145,5 +146,35 @@ namespace Bit.App.Utilities
}
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 Bit.App.Abstractions;
using Bit.App.Services;
@ -64,12 +65,12 @@ namespace Bit.iOS.Core.Utilities
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<IAuthService>("authService").Init();
// Note: This is not awaited
var bootstrapTask = BootstrapAsync();
var bootstrapTask = BootstrapAsync(postBootstrapFunc);
}
public static void AppearanceAdjustments(IDeviceActionService deviceActionService)
@ -79,13 +80,17 @@ namespace Bit.iOS.Core.Utilities
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?>(
Bit.Core.Constants.DisableFaviconKey);
await ServiceContainer.Resolve<IStateService>("stateService").SaveAsync(
Bit.Core.Constants.DisableFaviconKey, disableFavicon);
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) =>
_messagingService.Send("gotYubiKeyOTP", message));
iOSCoreHelpers.Bootstrap();
iOSCoreHelpers.Bootstrap(async () => await ApplyManagedSettingsAsync());
}
private void RegisterPush()
@ -475,5 +475,20 @@ namespace Bit.iOS
UIApplication.SharedApplication.EndBackgroundTask(_eventBackgroundTaskId);
_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);
}
}
}
}