aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ui/src/main/res/values
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/main/res/values')
-rw-r--r--ui/src/main/res/values/attrs.xml10
-rw-r--r--ui/src/main/res/values/bools.xml5
-rw-r--r--ui/src/main/res/values/colors.xml63
-rw-r--r--ui/src/main/res/values/dimens.xml9
-rw-r--r--ui/src/main/res/values/ic_launcher_background.xml4
-rw-r--r--ui/src/main/res/values/ids.xml4
-rw-r--r--ui/src/main/res/values/logviewer_colors.xml6
-rw-r--r--ui/src/main/res/values/strings.xml260
-rw-r--r--ui/src/main/res/values/styles.xml45
-rw-r--r--ui/src/main/res/values/themes.xml31
10 files changed, 437 insertions, 0 deletions
diff --git a/ui/src/main/res/values/attrs.xml b/ui/src/main/res/values/attrs.xml
new file mode 100644
index 00000000..b91ac60e
--- /dev/null
+++ b/ui/src/main/res/values/attrs.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <declare-styleable name="Multiselected">
+ <attr name="state_multiselected" format="boolean" />
+ </declare-styleable>
+ <declare-styleable name="TvCardView">
+ <attr name="state_isUp" format="boolean" />
+ <attr name="state_isDeleting" format="boolean" />
+ </declare-styleable>
+</resources>
diff --git a/ui/src/main/res/values/bools.xml b/ui/src/main/res/values/bools.xml
new file mode 100644
index 00000000..288f85a5
--- /dev/null
+++ b/ui/src/main/res/values/bools.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <bool name="light_status_bar">true</bool>
+ <bool name="light_navigation_bar">true</bool>
+</resources>
diff --git a/ui/src/main/res/values/colors.xml b/ui/src/main/res/values/colors.xml
new file mode 100644
index 00000000..65e82389
--- /dev/null
+++ b/ui/src/main/res/values/colors.xml
@@ -0,0 +1,63 @@
+<resources>
+ <color name="seed">#1a73e8</color>
+ <color name="md_theme_light_primary">#005BC0</color>
+ <color name="md_theme_light_onPrimary">#FFFFFF</color>
+ <color name="md_theme_light_primaryContainer">#D8E2FF</color>
+ <color name="md_theme_light_onPrimaryContainer">#001A41</color>
+ <color name="md_theme_light_secondary">#565E71</color>
+ <color name="md_theme_light_onSecondary">#FFFFFF</color>
+ <color name="md_theme_light_secondaryContainer">#DBE2F9</color>
+ <color name="md_theme_light_onSecondaryContainer">#131B2C</color>
+ <color name="md_theme_light_tertiary">#715574</color>
+ <color name="md_theme_light_onTertiary">#FFFFFF</color>
+ <color name="md_theme_light_tertiaryContainer">#FBD7FC</color>
+ <color name="md_theme_light_onTertiaryContainer">#29132D</color>
+ <color name="md_theme_light_error">#BA1A1A</color>
+ <color name="md_theme_light_errorContainer">#FFDAD6</color>
+ <color name="md_theme_light_onError">#FFFFFF</color>
+ <color name="md_theme_light_onErrorContainer">#410002</color>
+ <color name="md_theme_light_background">#FEFBFF</color>
+ <color name="md_theme_light_onBackground">#1B1B1F</color>
+ <color name="md_theme_light_surface">#FEFBFF</color>
+ <color name="md_theme_light_onSurface">#1B1B1F</color>
+ <color name="md_theme_light_surfaceVariant">#E1E2EC</color>
+ <color name="md_theme_light_onSurfaceVariant">#44474F</color>
+ <color name="md_theme_light_outline">#74777F</color>
+ <color name="md_theme_light_inverseOnSurface">#F2F0F4</color>
+ <color name="md_theme_light_inverseSurface">#303033</color>
+ <color name="md_theme_light_inversePrimary">#ADC7FF</color>
+ <color name="md_theme_light_shadow">#000000</color>
+ <color name="md_theme_light_surfaceTint">#005BC0</color>
+ <color name="md_theme_light_outlineVariant">#C4C6D0</color>
+ <color name="md_theme_light_scrim">#000000</color>
+ <color name="md_theme_dark_primary">#ADC7FF</color>
+ <color name="md_theme_dark_onPrimary">#002E68</color>
+ <color name="md_theme_dark_primaryContainer">#004493</color>
+ <color name="md_theme_dark_onPrimaryContainer">#D8E2FF</color>
+ <color name="md_theme_dark_secondary">#BFC6DC</color>
+ <color name="md_theme_dark_onSecondary">#283041</color>
+ <color name="md_theme_dark_secondaryContainer">#3F4759</color>
+ <color name="md_theme_dark_onSecondaryContainer">#DBE2F9</color>
+ <color name="md_theme_dark_tertiary">#DEBCDF</color>
+ <color name="md_theme_dark_onTertiary">#402843</color>
+ <color name="md_theme_dark_tertiaryContainer">#583E5B</color>
+ <color name="md_theme_dark_onTertiaryContainer">#FBD7FC</color>
+ <color name="md_theme_dark_error">#FFB4AB</color>
+ <color name="md_theme_dark_errorContainer">#93000A</color>
+ <color name="md_theme_dark_onError">#690005</color>
+ <color name="md_theme_dark_onErrorContainer">#FFDAD6</color>
+ <color name="md_theme_dark_background">#1B1B1F</color>
+ <color name="md_theme_dark_onBackground">#E3E2E6</color>
+ <color name="md_theme_dark_surface">#1B1B1F</color>
+ <color name="md_theme_dark_onSurface">#E3E2E6</color>
+ <color name="md_theme_dark_surfaceVariant">#44474F</color>
+ <color name="md_theme_dark_onSurfaceVariant">#C4C6D0</color>
+ <color name="md_theme_dark_outline">#8E9099</color>
+ <color name="md_theme_dark_inverseOnSurface">#1B1B1F</color>
+ <color name="md_theme_dark_inverseSurface">#E3E2E6</color>
+ <color name="md_theme_dark_inversePrimary">#005BC0</color>
+ <color name="md_theme_dark_shadow">#000000</color>
+ <color name="md_theme_dark_surfaceTint">#ADC7FF</color>
+ <color name="md_theme_dark_outlineVariant">#44474F</color>
+ <color name="md_theme_dark_scrim">#000000</color>
+</resources>
diff --git a/ui/src/main/res/values/dimens.xml b/ui/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..8ea07dfb
--- /dev/null
+++ b/ui/src/main/res/values/dimens.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <dimen name="fab_margin">16dp</dimen>
+ <dimen name="bottom_sheet_item_height">56dp</dimen>
+ <dimen name="normal_margin">8dp</dimen>
+ <dimen name="bottom_sheet_top_padding">8dp</dimen>
+ <dimen name="bottom_sheet_icon_padding">16dp</dimen>
+ <dimen name="tunnel_list_placeholder_margin">16dp</dimen>
+</resources>
diff --git a/ui/src/main/res/values/ic_launcher_background.xml b/ui/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 00000000..f8bad52e
--- /dev/null
+++ b/ui/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="ic_launcher_background">#871719</color>
+</resources> \ No newline at end of file
diff --git a/ui/src/main/res/values/ids.xml b/ui/src/main/res/values/ids.xml
new file mode 100644
index 00000000..7f34f808
--- /dev/null
+++ b/ui/src/main/res/values/ids.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <item name="item_change_listener" type="id" />
+</resources>
diff --git a/ui/src/main/res/values/logviewer_colors.xml b/ui/src/main/res/values/logviewer_colors.xml
new file mode 100644
index 00000000..0d4b1a0d
--- /dev/null
+++ b/ui/src/main/res/values/logviewer_colors.xml
@@ -0,0 +1,6 @@
+<resources>
+ <color name="debug_tag_color">#444444</color>
+ <color name="error_tag_color">#aa0000</color>
+ <color name="info_tag_color">#00aa00</color>
+ <color name="warning_tag_color">#aaaa00</color>
+</resources>
diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml
new file mode 100644
index 00000000..df3d3340
--- /dev/null
+++ b/ui/src/main/res/values/strings.xml
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <plurals name="delete_error">
+ <item quantity="one">Unable to delete %d tunnel: %s</item>
+ <item quantity="other">Unable to delete %d tunnels: %s</item>
+ </plurals>
+ <plurals name="delete_success">
+ <item quantity="one">Successfully deleted %d tunnel</item>
+ <item quantity="other">Successfully deleted %d tunnels</item>
+ </plurals>
+ <plurals name="delete_title">
+ <item quantity="one">%d tunnel selected</item>
+ <item quantity="other">%d tunnels selected</item>
+ </plurals>
+ <plurals name="import_partial_success">
+ <item quantity="one">Imported %1$d of %2$d tunnels</item>
+ <item quantity="other">Imported %1$d of %2$d tunnels</item>
+ </plurals>
+ <plurals name="import_total_success">
+ <item quantity="one">Imported %d tunnel</item>
+ <item quantity="other">Imported %d tunnels</item>
+ </plurals>
+ <plurals name="set_excluded_applications">
+ <item quantity="one">%d Excluded Application</item>
+ <item quantity="other">%d Excluded Applications</item>
+ </plurals>
+ <plurals name="set_included_applications">
+ <item quantity="one">%d Included Application</item>
+ <item quantity="other">%d Included Applications</item>
+ </plurals>
+ <plurals name="n_excluded_applications">
+ <item quantity="one">%d excluded</item>
+ <item quantity="other">%d excluded</item>
+ </plurals>
+ <plurals name="n_included_applications">
+ <item quantity="one">%d included</item>
+ <item quantity="other">%d included</item>
+ </plurals>
+ <string name="all_applications">All Applications</string>
+ <string name="exclude_from_tunnel">Exclude</string>
+ <string name="include_in_tunnel">Include only</string>
+ <plurals name="include_n_applications">
+ <item quantity="one">Include %d app</item>
+ <item quantity="other">Include %d apps</item>
+ </plurals>
+ <plurals name="exclude_n_applications">
+ <item quantity="one">Exclude %d app</item>
+ <item quantity="other">Exclude %d apps</item>
+ </plurals>
+ <plurals name="persistent_keepalive_seconds_unit">
+ <item quantity="one">every second</item>
+ <item quantity="other">every %d seconds</item>
+ </plurals>
+ <plurals name="persistent_keepalive_seconds_suffix">
+ <item quantity="one">second</item>
+ <item quantity="other">seconds</item>
+ </plurals>
+ <string name="use_all_applications">Use all apps</string>
+ <string name="add_peer">Add peer</string>
+ <string name="addresses">Addresses</string>
+ <string name="applications">Applications</string>
+ <string name="allow_remote_control_intents_summary_off">External apps may not toggle tunnels (recommended)</string>
+ <string name="allow_remote_control_intents_summary_on">External apps may toggle tunnels (advanced)</string>
+ <string name="allow_remote_control_intents_title">Allow remote control apps</string>
+ <string name="allowed_ips">Allowed IPs</string>
+ <string name="app_name" translatable="false">WireGuard</string>
+ <string name="bad_config_context">%1$s\'s %2$s</string>
+ <string name="bad_config_context_top_level">%s</string>
+ <string name="bad_config_error">%1$s in %2$s</string>
+ <string name="bad_config_explanation_pka">: Must be positive and no more than 65535</string>
+ <string name="bad_config_explanation_positive_number">: Must be positive</string>
+ <string name="bad_config_explanation_udp_port">: Must be a valid UDP port number</string>
+ <string name="bad_config_reason_invalid_key">Invalid key</string>
+ <string name="bad_config_reason_invalid_number">Invalid number</string>
+ <string name="bad_config_reason_invalid_value">Invalid value</string>
+ <string name="bad_config_reason_missing_attribute">Missing attribute</string>
+ <string name="bad_config_reason_missing_section">Missing section</string>
+ <string name="bad_config_reason_syntax_error">Syntax error</string>
+ <string name="bad_config_reason_unknown_attribute">Unknown attribute</string>
+ <string name="bad_config_reason_unknown_section">Unknown section</string>
+ <string name="bad_config_reason_value_out_of_range">Value out of range</string>
+ <string name="bad_extension_error">File must be .conf or .zip</string>
+ <string name="error_no_qr_found">QR code not found in image</string>
+ <string name="error_qr_checksum">QR code checksum verification failed</string>
+ <string name="cancel">Cancel</string>
+ <string name="config_delete_error">Cannot delete configuration file %s</string>
+ <string name="config_exists_error">Configuration for “%s” already exists</string>
+ <string name="config_file_exists_error">Configuration file “%s” already exists</string>
+ <string name="config_not_found_error">Configuration file “%s” not found</string>
+ <string name="config_rename_error">Cannot rename configuration file “%s”</string>
+ <string name="config_save_error">Cannot save configuration for “%1$s”: %2$s</string>
+ <string name="config_save_success">Successfully saved configuration for “%s”</string>
+ <string name="create_activity_title">Create WireGuard Tunnel</string>
+ <string name="create_bin_dir_error">Cannot create local binary directory</string>
+ <string name="create_downloads_file_error">Cannot create file in downloads directory</string>
+ <string name="create_empty">Create from scratch</string>
+ <string name="create_from_file">Import from file or archive</string>
+ <string name="create_from_qr_code">Scan from QR code</string>
+ <string name="create_output_dir_error">Cannot create output directory</string>
+ <string name="create_temp_dir_error">Cannot create local temporary directory</string>
+ <string name="create_tunnel">Create Tunnel</string>
+ <string name="copied_to_clipboard">%s copied to clipboard</string>
+ <string name="dark_theme_summary_off">Currently using light (day) theme</string>
+ <string name="dark_theme_summary_on">Currently using dark (night) theme</string>
+ <string name="dark_theme_title">Use dark theme</string>
+ <string name="delete">Delete</string>
+ <string name="tv_delete">Select tunnel to delete</string>
+ <string name="tv_select_a_storage_drive">Select a storage drive</string>
+ <string name="tv_no_file_picker">Please install a file management utility to browse files</string>
+ <string name="tv_add_tunnel_get_started">Add a tunnel to get started</string>
+ <string name="donate_title">♥ Donate to the WireGuard Project</string>
+ <string name="donate_summary">Every contribution helps</string>
+ <string name="donate_google_play_disappointment">Thank you for supporting the WireGuard Project!\n\nUnfortunately, due to Google\'s policies, we\'re not allowed to link to the part of the project webpage where you can make a donation. Hopefully you can figure this out!\n\nThanks again for your contribution.</string>
+ <string name="disable_config_export_title">Disable config exporting</string>
+ <string name="disable_config_export_description">Disabling config exporting makes private keys less accessible</string>
+ <string name="dns_servers">DNS servers</string>
+ <string name="dns_search_domains">Search domains</string>
+ <string name="edit">Edit</string>
+ <string name="endpoint">Endpoint</string>
+ <string name="error_down">Error bringing down tunnel: %s</string>
+ <string name="error_fetching_apps">Error fetching apps list: %s</string>
+ <string name="error_root">Please obtain root access and try again</string>
+ <string name="error_prepare">Error preparing tunnel: %s</string>
+ <string name="error_up">Error bringing up tunnel: %s</string>
+ <string name="exclude_private_ips">Exclude private IPs</string>
+ <string name="generate_new_private_key">Generate new private key</string>
+ <string name="generic_error">Unknown “%s” error</string>
+ <string name="hint_automatic">(auto)</string>
+ <string name="hint_generated">(generated)</string>
+ <string name="hint_optional">(optional)</string>
+ <string name="hint_optional_discouraged">(optional, not recommended)</string>
+ <string name="hint_random">(random)</string>
+ <string name="illegal_filename_error">Illegal file name “%s”</string>
+ <string name="import_error">Unable to import tunnel: %s</string>
+ <string name="import_from_qr_code">Import Tunnel from QR Code</string>
+ <string name="import_success">Imported “%s”</string>
+ <string name="interface_title">Interface</string>
+ <string name="key_contents_error">Bad characters in key</string>
+ <string name="key_length_error">Incorrect key length</string>
+ <string name="key_length_explanation_base64">: WireGuard base64 keys must be 44 characters (32 bytes)</string>
+ <string name="key_length_explanation_binary">: WireGuard keys must be 32 bytes</string>
+ <string name="key_length_explanation_hex">: WireGuard hex keys must be 64 characters (32 bytes)</string>
+ <string name="latest_handshake">Latest handshake</string>
+ <string name="latest_handshake_ago">%s ago</string>
+ <string name="listen_port">Listen port</string>
+ <string name="log_export_error">Unable to export log: %s</string>
+ <string name="log_export_subject">WireGuard Android Log File</string>
+ <string name="log_export_success">Saved to “%s”</string>
+ <string name="log_export_title">Export log file</string>
+ <string name="log_saver_activity_label">Save log</string>
+ <string name="log_viewer_pref_summary">Logs may assist with debugging</string>
+ <string name="log_viewer_pref_title">View application log</string>
+ <string name="log_viewer_title">Log</string>
+ <string name="logcat_error">Unable to run logcat: </string>
+ <string name="module_enabler_disabled_summary">The experimental kernel module can improve performance</string>
+ <string name="module_enabler_disabled_title">Enable kernel module backend</string>
+ <string name="module_enabler_enabled_summary">The slower userspace backend may improve stability</string>
+ <string name="module_enabler_enabled_title">Disable kernel module backend</string>
+ <string name="module_installer_error">Something went wrong. Please try again</string>
+ <string name="module_installer_initial">The experimental kernel module can improve performance</string>
+ <string name="module_installer_not_found">No modules are available for your device</string>
+ <string name="module_installer_title">Download and install kernel module</string>
+ <string name="module_installer_working">Downloading and installing…</string>
+ <string name="module_version_error">Unable to determine kernel module version</string>
+ <string name="mtu">MTU</string>
+ <string name="multiple_tunnels_summary_off">Turning on one tunnel will turn off others</string>
+ <string name="multiple_tunnels_summary_on">Multiple tunnels may be turned on simultaneously</string>
+ <string name="multiple_tunnels_title">Allow multiple simultaneous tunnels</string>
+ <string name="name">Name</string>
+ <string name="no_config_error">Trying to bring up a tunnel with no config</string>
+ <string name="no_configs_error">No configurations found</string>
+ <string name="no_tunnels_error">No tunnels exist</string>
+ <string name="parse_error_generic">string</string>
+ <string name="parse_error_inet_address">IP address</string>
+ <string name="parse_error_inet_endpoint">endpoint</string>
+ <string name="parse_error_inet_network">IP network</string>
+ <string name="parse_error_integer">number</string>
+ <string name="parse_error_reason">Cannot parse %1$s “%2$s”</string>
+ <string name="peer">Peer</string>
+ <string name="permission_description">control WireGuard tunnels, enabling and disabling tunnels at will, potentially misdirecting Internet traffic</string>
+ <string name="permission_label">control WireGuard tunnels</string>
+ <string name="persistent_keepalive">Persistent keepalive</string>
+ <string name="pre_shared_key">Pre-shared key</string>
+ <string name="pre_shared_key_enabled">enabled</string>
+ <string name="private_key">Private key</string>
+ <string name="public_key">Public key</string>
+ <string name="qr_code_hint">Tip: generate with `qrencode -t ansiutf8 &lt; tunnel.conf`.</string>
+ <string name="quick_settings_tile_add_title">Add tile to quick settings panel</string>
+ <string name="quick_settings_tile_add_summary">The shortcut tile toggles the most recent tunnel</string>
+ <string name="quick_settings_tile_add_failure">Unable to add shortcut tile: error %d</string>
+ <string name="quick_settings_tile_action">Toggle tunnel</string>
+ <string name="restore_on_boot_summary_off">Will not bring up enabled tunnels at boot</string>
+ <string name="restore_on_boot_summary_on">Will bring up enabled tunnels at boot</string>
+ <string name="restore_on_boot_title">Restore on boot</string>
+ <string name="save">Save</string>
+ <string name="select_all">Select all</string>
+ <string name="settings">Settings</string>
+ <string name="shell_exit_status_read_error">Shell cannot read exit status</string>
+ <string name="shell_marker_count_error">Shell expected 4 markers, received %d</string>
+ <string name="shell_start_error">Shell failed to start: %d</string>
+ <string name="success_application_will_restart">Success. The application will now restart…</string>
+ <string name="toggle_all">Toggle All</string>
+ <string name="toggle_error">Error toggling WireGuard tunnel: %s</string>
+ <string name="tools_installer_already">wg and wg-quick are already installed</string>
+ <string name="tools_installer_failure">Unable to install command-line tools (no root?)</string>
+ <string name="tools_installer_initial">Install optional tools for scripting</string>
+ <string name="tools_installer_initial_magisk">Install optional tools for scripting as Magisk module</string>
+ <string name="tools_installer_initial_system">Install optional tools for scripting into the system partition</string>
+ <string name="tools_installer_success_magisk">wg and wg-quick installed as a Magisk module (reboot required)</string>
+ <string name="tools_installer_success_system">wg and wg-quick installed into the system partition</string>
+ <string name="tools_installer_title">Install command line tools</string>
+ <string name="tools_installer_working">Installing wg and wg-quick</string>
+ <string name="tools_unavailable_error">Required tools unavailable</string>
+ <string name="transfer">Transfer</string>
+ <string name="transfer_bytes">%d B</string>
+ <string name="transfer_gibibytes">%.2f GiB</string>
+ <string name="transfer_kibibytes">%.2f KiB</string>
+ <string name="transfer_mibibytes">%.2f MiB</string>
+ <string name="transfer_rx_tx">rx: %1$s, tx: %2$s</string>
+ <string name="transfer_tibibytes">%.2f TiB</string>
+ <string name="tun_create_error">Unable to create tun device</string>
+ <string name="tunnel_config_error">Unable to configure tunnel (wg-quick returned %d)</string>
+ <string name="tunnel_create_error">Unable to create tunnel: %s</string>
+ <string name="tunnel_create_success">Successfully created tunnel “%s”</string>
+ <string name="tunnel_error_already_exists">Tunnel “%s” already exists</string>
+ <string name="tunnel_error_invalid_name">Invalid name</string>
+ <string name="tunnel_list_placeholder">Add a tunnel using the button below</string>
+ <string name="tunnel_name">Tunnel Name</string>
+ <string name="tunnel_on_error">Unable to turn tunnel on (wgTurnOn returned %d)</string>
+ <string name="tunnel_dns_failure">Unable to resolve DNS hostname: “%s”</string>
+ <string name="tunnel_rename_error">Unable to rename tunnel: %s</string>
+ <string name="tunnel_rename_success">Successfully renamed tunnel to “%s”</string>
+ <string name="type_name_go_userspace">Go userspace</string>
+ <string name="type_name_kernel_module">Kernel module</string>
+ <string name="unknown_error">Unknown error</string>
+ <string name="updater_avalable">An application update is available. Please update now.</string>
+ <string name="updater_action">Download &amp; Update</string>
+ <string name="updater_rechecking">Fetching update metadata…</string>
+ <string name="updater_download_progress">Downloading update: %1$s / %2$s (%3$.2f%%)</string>
+ <string name="updater_download_progress_nototal">Downloading update: %s</string>
+ <string name="updater_installing">Installing update…</string>
+ <string name="updater_failure">Update failure: %s. Will retry momentarily…</string>
+ <string name="updater_corrupt_title">Application Corrupt</string>
+ <string name="updater_corrupt_message">This application is corrupt. Please re-download the APK from the website linked below. After, uninstall this application, and reinstall it from the downloaded APK.</string>
+ <string name="updater_corrupt_navigate">Open Website</string>
+ <string name="version_summary">%1$s backend %2$s</string>
+ <string name="version_summary_checking">Checking %s backend version</string>
+ <string name="version_summary_unknown">Unknown %s version</string>
+ <string name="version_title">WireGuard for Android v%s</string>
+ <string name="vpn_not_authorized_error">VPN service not authorized by user</string>
+ <string name="vpn_start_error">Unable to start Android VPN service</string>
+ <string name="zip_export_error">Unable to export tunnels: %s</string>
+ <string name="zip_export_success">Saved to “%s”</string>
+ <string name="zip_export_summary">Zip file will be saved to downloads folder</string>
+ <string name="zip_export_title">Export tunnels to zip file</string>
+ <string name="biometric_prompt_zip_exporter_title">Authenticate to export tunnels</string>
+ <string name="biometric_prompt_private_key_title">Authenticate to view private key</string>
+ <string name="biometric_auth_error">Authentication failure</string>
+ <string name="biometric_auth_error_reason">Authentication failure: %s</string>
+</resources>
diff --git a/ui/src/main/res/values/styles.xml b/ui/src/main/res/values/styles.xml
new file mode 100644
index 00000000..39c38247
--- /dev/null
+++ b/ui/src/main/res/values/styles.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <style name="WireGuardTheme.Toolbar" parent="Widget.Material3.Toolbar">
+ <item name="android:background">?attr/colorSurface</item>
+ </style>
+
+ <style name="AppThemeBase" parent="WireGuardTheme">
+ <item name="materialCardViewStyle">@style/WireGuardTheme.MaterialCardView</item>
+ <item name="toolbarStyle">@style/WireGuardTheme.Toolbar</item>
+ <item name="bottomSheetDialogTheme">@style/WireGuardTheme.BottomSheetDialog</item>
+ <item name="android:statusBarColor">@null</item>
+ </style>
+
+ <!-- Various additional API-specific features in values-v*/styles.xml -->
+ <style name="AppTheme" parent="AppThemeBase" />
+
+ <style name="WireGuardTheme.MaterialCardView" parent="Widget.Material3.CardView.Elevated">
+ <item name="cornerRadius">4dp</item>
+ <item name="contentPadding">8dp</item>
+ </style>
+
+ <style name="WireGuardTheme.BottomSheetDialog" parent="ThemeOverlay.Material3.BottomSheetDialog">
+ <item name="android:windowIsFloating">false</item>
+ <item name="android:navigationBarColor">@android:color/transparent</item>
+ </style>
+
+ <style name="NoBackgroundTheme" parent="AppTheme">
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowActionBar">false</item>
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:background">@android:color/transparent</item>
+ <item name="colorPrimaryDark">@android:color/transparent</item>
+ <item name="android:backgroundDimEnabled">true</item>
+ <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
+ <item name="android:windowExitAnimation">@android:anim/fade_out</item>
+ </style>
+
+ <style name="TvTheme" parent="AppTheme">
+ <item name="windowActionBar">false</item>
+ <item name="windowNoTitle">true</item>
+ </style>
+</resources>
diff --git a/ui/src/main/res/values/themes.xml b/ui/src/main/res/values/themes.xml
new file mode 100644
index 00000000..0153d346
--- /dev/null
+++ b/ui/src/main/res/values/themes.xml
@@ -0,0 +1,31 @@
+<resources>
+
+ <style name="WireGuardTheme" parent="Theme.Material3.Light">
+ <item name="colorPrimary">@color/md_theme_light_primary</item>
+ <item name="colorOnPrimary">@color/md_theme_light_onPrimary</item>
+ <item name="colorPrimaryContainer">@color/md_theme_light_primaryContainer</item>
+ <item name="colorOnPrimaryContainer">@color/md_theme_light_onPrimaryContainer</item>
+ <item name="colorSecondary">@color/md_theme_light_secondary</item>
+ <item name="colorOnSecondary">@color/md_theme_light_onSecondary</item>
+ <item name="colorSecondaryContainer">@color/md_theme_light_secondaryContainer</item>
+ <item name="colorOnSecondaryContainer">@color/md_theme_light_onSecondaryContainer</item>
+ <item name="colorTertiary">@color/md_theme_light_tertiary</item>
+ <item name="colorOnTertiary">@color/md_theme_light_onTertiary</item>
+ <item name="colorTertiaryContainer">@color/md_theme_light_tertiaryContainer</item>
+ <item name="colorOnTertiaryContainer">@color/md_theme_light_onTertiaryContainer</item>
+ <item name="colorError">@color/md_theme_light_error</item>
+ <item name="colorErrorContainer">@color/md_theme_light_errorContainer</item>
+ <item name="colorOnError">@color/md_theme_light_onError</item>
+ <item name="colorOnErrorContainer">@color/md_theme_light_onErrorContainer</item>
+ <item name="android:colorBackground">@color/md_theme_light_background</item>
+ <item name="colorOnBackground">@color/md_theme_light_onBackground</item>
+ <item name="colorSurface">@color/md_theme_light_surface</item>
+ <item name="colorOnSurface">@color/md_theme_light_onSurface</item>
+ <item name="colorSurfaceVariant">@color/md_theme_light_surfaceVariant</item>
+ <item name="colorOnSurfaceVariant">@color/md_theme_light_onSurfaceVariant</item>
+ <item name="colorOutline">@color/md_theme_light_outline</item>
+ <item name="colorOnSurfaceInverse">@color/md_theme_light_inverseOnSurface</item>
+ <item name="colorSurfaceInverse">@color/md_theme_light_inverseSurface</item>
+ <item name="colorPrimaryInverse">@color/md_theme_light_inversePrimary</item>
+ </style>
+</resources>