fix(android): unblock first device test — auth contrast + dynamic base URL
Two regressions surfaced on the first real device run.
1. Contrast on ServerUrl + Login screens: both wrapped content in a
bare Box(fillMaxSize), no Surface. The obsidian background never
painted (rendered against the system root view's default),
LocalContentColor cascade fell through to Material's default
contentColor — the screens rendered as near-invisible dark text
on dark grey. Wrap both in Surface(color = background, contentColor
= onBackground) so the bg paints AND the M3 contentColor pipeline
flows correctly through OutlinedTextField labels / cursor /
placeholders + the Button content tint.
2. The bigger bug: NetworkModule.provideRetrofit read
authStore.baseUrl.value ONCE at Retrofit creation. AuthStore loads
from Room async, so at injection time the value was still the
localhost:8080 placeholder. Result: even after the user typed
their real server URL on the ServerUrl screen, every API call
kept hitting localhost:8080 ("Failed to connect to
localhost/127.0.0.1:8080" on the login attempt). The pre-fix
NetworkModule comment even acknowledged it — *"Server-URL
changes require an app relaunch"*.
Fix: per-request rewrite. New BaseUrlInterceptor reads the live
AuthStore.baseUrl.value on every request and rewrites
scheme/host/port of the outgoing URL. Retrofit now keeps a
placeholder baseUrl ("http://placeholder.invalid/") solely to
satisfy its parser; the actual target host is dynamic. Order in
OkHttp chain: BaseUrl first → Auth → logging, so the cookie
interceptor sees the final URL.
New:
- api/BaseUrlInterceptor.kt — per-request scheme/host/port rewrite
from AuthStore.baseUrl. Falls through to the original request
when the stored URL is unparseable.
Modified:
- api/NetworkModule.kt — adds BaseUrlInterceptor to the OkHttp
chain. Drops the AuthStore dependency from provideRetrofit;
swaps baseUrl for the placeholder.
- auth/ui/ServerUrlScreen.kt — Box → Surface wrap.
- auth/ui/LoginScreen.kt — Box → Surface wrap.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+687
@@ -0,0 +1,687 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:ns1="http://schemas.android.com/tools" xmlns:ns2="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<array name="com_google_android_gms_fonts_certs">
|
||||
<item>@array/com_google_android_gms_fonts_certs_dev</item>
|
||||
<item>@array/com_google_android_gms_fonts_certs_prod</item>
|
||||
</array>
|
||||
<string-array name="com_google_android_gms_fonts_certs_dev">
|
||||
<item>MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpoyLcfobBPv6yyz8x1IxWWmF9c1IGN3vSL6BLNJEUyMEPzC2WZdwT4ZG2cuJTtzeETl6jWFKx68ETtZxNVHe9Iy9NMxEljDqVZ4y6+FlHaiYJqq3LcJpJVuKYz4kvOcyf3M0nDA8mUlVdfsOlw/H4uoNQ7VrAQUKB4kAyfxsKp/RZmnZSJ7+8Ag9aTC+oguTd1iFNuMqDUlpePo6CGuh73iKuq8mYvtdQQ0Yz+mF4j2YWB7Gj0R1k2cCAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=</item>
|
||||
</string-array>
|
||||
<string-array name="com_google_android_gms_fonts_certs_prod">
|
||||
<item>MIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAwEAAaOB1zCB1DAdBgNVHQ4EFgQUhzkS9E6G+x8U7eIYZVgWyN4j2u4wgaQGA1UdIwSBnDCBmYAUhzkS9E6G+x8U7eIYZVgWyN4j2u6heKR2MHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZIIJAMLgh0ZkSjCNMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABywqUAtNkXf2EVQuRGiI3pnNvIYx7N5xj4LMtloEdEqMpEcMa6Qe87qDx2hsArOR1nzQAFGsT/8YIIfX0fAJjQuP1lAcExSxVKbFICEvFBaWuhGgOOZ7CYzfHB6tEzJFLR2DQHQrXLT2HKDDhxhe9hKzqIRDSc5Hjr3jY5MMzfYM5lFvKK9pLqEsP6/Ad9SDhupcVoOWVrSCNKfRb6jpJbZuxJhCnq8tmlV4iy5tEW0a3VBYzpRoBdAaORWqHQTUlt+iL3aH7C5OxhgN/JuxvxXBL/3kkc0wK1ZNuk+sb4lNXmHnVqQYTcyowQHRPCRsPzCCl4ANULRpZjxAd0xUgg=</item>
|
||||
</string-array>
|
||||
<attr format="color" name="animationBackgroundColor"/>
|
||||
<attr format="enum" name="finishPrimaryWithPlaceholder">
|
||||
|
||||
<enum name="always" value="1"/>
|
||||
|
||||
<enum name="adjacent" value="2"/>
|
||||
</attr>
|
||||
<attr format="enum" name="finishPrimaryWithSecondary">
|
||||
|
||||
<enum name="never" value="0"/>
|
||||
|
||||
<enum name="always" value="1"/>
|
||||
|
||||
<enum name="adjacent" value="2"/>
|
||||
</attr>
|
||||
<attr format="enum" name="finishSecondaryWithPrimary">
|
||||
|
||||
<enum name="never" value="0"/>
|
||||
|
||||
<enum name="always" value="1"/>
|
||||
|
||||
<enum name="adjacent" value="2"/>
|
||||
</attr>
|
||||
<attr format="reference" name="nestedScrollViewStyle"/>
|
||||
<attr format="enum" name="splitChangeAnimation">
|
||||
|
||||
<enum name="systemDefault" value="0"/>
|
||||
|
||||
<enum name="jumpCut" value="1"/>
|
||||
</attr>
|
||||
<attr format="enum" name="splitCloseAnimation">
|
||||
|
||||
<enum name="systemDefault" value="0"/>
|
||||
|
||||
<enum name="jumpCut" value="1"/>
|
||||
</attr>
|
||||
<attr format="enum" name="splitLayoutDirection">
|
||||
|
||||
<enum name="locale" value="0"/>
|
||||
|
||||
<enum name="ltr" value="1"/>
|
||||
|
||||
<enum name="rtl" value="2"/>
|
||||
|
||||
<enum name="topToBottom" value="3"/>
|
||||
|
||||
<enum name="bottomToTop" value="4"/>
|
||||
</attr>
|
||||
<attr format="float" name="splitMaxAspectRatioInLandscape">
|
||||
|
||||
<enum name="alwaysAllow" value="0"/>
|
||||
|
||||
<enum name="alwaysDisallow" value="-1"/>
|
||||
</attr>
|
||||
<attr format="float" name="splitMaxAspectRatioInPortrait">
|
||||
|
||||
<enum name="alwaysAllow" value="0"/>
|
||||
|
||||
<enum name="alwaysDisallow" value="-1"/>
|
||||
</attr>
|
||||
<attr format="integer" name="splitMinHeightDp"/>
|
||||
<attr format="integer" name="splitMinSmallestWidthDp"/>
|
||||
<attr format="integer" name="splitMinWidthDp"/>
|
||||
<attr format="enum" name="splitOpenAnimation">
|
||||
|
||||
<enum name="systemDefault" value="0"/>
|
||||
|
||||
<enum name="jumpCut" value="1"/>
|
||||
</attr>
|
||||
<attr format="float" name="splitRatio"/>
|
||||
<attr format="string" name="tag"/>
|
||||
<bool name="enable_system_alarm_service_default">true</bool>
|
||||
<bool name="enable_system_foreground_service_default">true</bool>
|
||||
<bool name="enable_system_job_service_default">false</bool>
|
||||
<bool name="workmanager_test_configuration">false</bool>
|
||||
<color name="androidx_core_ripple_material_light">#1f000000</color>
|
||||
<color name="androidx_core_secondary_text_default_material_light">#8a000000</color>
|
||||
<color name="call_notification_answer_color">#1d873b</color>
|
||||
<color name="call_notification_decline_color">#d93025</color>
|
||||
<color name="notification_action_color_filter">#ffffffff</color>
|
||||
<color name="notification_icon_bg_color">#ff9e9e9e</color>
|
||||
<color name="notification_material_background_media_default_color">#ff424242</color>
|
||||
<color name="primary_text_default_material_dark">#ffffffff</color>
|
||||
<color name="secondary_text_default_material_dark">#b3ffffff</color>
|
||||
<dimen name="compat_button_inset_horizontal_material">4dp</dimen>
|
||||
<dimen name="compat_button_inset_vertical_material">6dp</dimen>
|
||||
<dimen name="compat_button_padding_horizontal_material">8dp</dimen>
|
||||
<dimen name="compat_button_padding_vertical_material">4dp</dimen>
|
||||
<dimen name="compat_control_corner_material">2dp</dimen>
|
||||
<dimen name="compat_notification_large_icon_max_height">320dp</dimen>
|
||||
<dimen name="compat_notification_large_icon_max_width">320dp</dimen>
|
||||
<dimen name="notification_action_icon_size">32dp</dimen>
|
||||
<dimen name="notification_action_text_size">13sp</dimen>
|
||||
<dimen name="notification_big_circle_margin">12dp</dimen>
|
||||
<dimen name="notification_content_margin_start">8dp</dimen>
|
||||
<dimen name="notification_large_icon_height">64dp</dimen>
|
||||
<dimen name="notification_large_icon_width">64dp</dimen>
|
||||
<dimen name="notification_main_column_padding_top">10dp</dimen>
|
||||
<dimen name="notification_media_narrow_margin">@dimen/notification_content_margin_start</dimen>
|
||||
<dimen name="notification_right_icon_size">16dp</dimen>
|
||||
<dimen name="notification_right_side_padding_top">4dp</dimen>
|
||||
<dimen name="notification_small_icon_background_padding">3dp</dimen>
|
||||
<dimen name="notification_small_icon_size_as_large">24dp</dimen>
|
||||
<dimen name="notification_subtext_size">13sp</dimen>
|
||||
<dimen name="notification_top_pad">10dp</dimen>
|
||||
<dimen name="notification_top_pad_large_text">5dp</dimen>
|
||||
<drawable name="media3_notification_small_icon">@drawable/media3_icon_circular_play</drawable>
|
||||
<drawable name="notification_template_icon_bg">#3333B5E5</drawable>
|
||||
<drawable name="notification_template_icon_low_bg">#0cffffff</drawable>
|
||||
<item name="accessibility_action_clickable_span" type="id"/>
|
||||
<item name="accessibility_custom_action_0" type="id"/>
|
||||
<item name="accessibility_custom_action_1" type="id"/>
|
||||
<item name="accessibility_custom_action_10" type="id"/>
|
||||
<item name="accessibility_custom_action_11" type="id"/>
|
||||
<item name="accessibility_custom_action_12" type="id"/>
|
||||
<item name="accessibility_custom_action_13" type="id"/>
|
||||
<item name="accessibility_custom_action_14" type="id"/>
|
||||
<item name="accessibility_custom_action_15" type="id"/>
|
||||
<item name="accessibility_custom_action_16" type="id"/>
|
||||
<item name="accessibility_custom_action_17" type="id"/>
|
||||
<item name="accessibility_custom_action_18" type="id"/>
|
||||
<item name="accessibility_custom_action_19" type="id"/>
|
||||
<item name="accessibility_custom_action_2" type="id"/>
|
||||
<item name="accessibility_custom_action_20" type="id"/>
|
||||
<item name="accessibility_custom_action_21" type="id"/>
|
||||
<item name="accessibility_custom_action_22" type="id"/>
|
||||
<item name="accessibility_custom_action_23" type="id"/>
|
||||
<item name="accessibility_custom_action_24" type="id"/>
|
||||
<item name="accessibility_custom_action_25" type="id"/>
|
||||
<item name="accessibility_custom_action_26" type="id"/>
|
||||
<item name="accessibility_custom_action_27" type="id"/>
|
||||
<item name="accessibility_custom_action_28" type="id"/>
|
||||
<item name="accessibility_custom_action_29" type="id"/>
|
||||
<item name="accessibility_custom_action_3" type="id"/>
|
||||
<item name="accessibility_custom_action_30" type="id"/>
|
||||
<item name="accessibility_custom_action_31" type="id"/>
|
||||
<item name="accessibility_custom_action_4" type="id"/>
|
||||
<item name="accessibility_custom_action_5" type="id"/>
|
||||
<item name="accessibility_custom_action_6" type="id"/>
|
||||
<item name="accessibility_custom_action_7" type="id"/>
|
||||
<item name="accessibility_custom_action_8" type="id"/>
|
||||
<item name="accessibility_custom_action_9" type="id"/>
|
||||
<item name="androidx_compose_ui_view_compose_view_context" type="id"/>
|
||||
<item name="androidx_compose_ui_view_composition_context" type="id"/>
|
||||
<item name="androidx_window_activity_scope" type="id"/>
|
||||
<item name="auto_clear_focus_behavior_tag" type="id"/>
|
||||
<item name="coil3_request_manager" type="id"/>
|
||||
<item name="compose_prefetch_scheduler" type="id"/>
|
||||
<item name="compose_view_saveable_id_tag" type="id"/>
|
||||
<item name="consume_window_insets_tag" type="id"/>
|
||||
<item name="fragment_container_view_tag" type="id"/>
|
||||
<item name="ghost_view" type="id"/>
|
||||
<item name="ghost_view_holder" type="id"/>
|
||||
<item name="hide_graphics_layer_in_inspector_tag" type="id"/>
|
||||
<item name="hide_in_inspector_tag" type="id"/>
|
||||
<item name="inspection_slot_table_set" type="id"/>
|
||||
<item name="is_pooling_container_tag" type="id"/>
|
||||
<item name="line1" type="id"/>
|
||||
<item name="line3" type="id"/>
|
||||
<item name="media_controller_compat_view_tag" type="id"/>
|
||||
<item name="nav_controller_view_tag" type="id"/>
|
||||
<item name="parent_matrix" type="id"/>
|
||||
<item name="pooling_container_listener_holder_tag" type="id"/>
|
||||
<item name="report_drawn" type="id"/>
|
||||
<item name="save_non_transition_alpha" type="id"/>
|
||||
<item name="save_overlay_view" type="id"/>
|
||||
<item name="special_effects_controller_view_tag" type="id"/>
|
||||
<item name="tag_accessibility_actions" type="id"/>
|
||||
<item name="tag_accessibility_clickable_spans" type="id"/>
|
||||
<item name="tag_accessibility_heading" type="id"/>
|
||||
<item name="tag_accessibility_pane_title" type="id"/>
|
||||
<item name="tag_compat_insets_dispatch" type="id"/>
|
||||
<item name="tag_on_apply_window_listener" type="id"/>
|
||||
<item name="tag_on_receive_content_listener" type="id"/>
|
||||
<item name="tag_on_receive_content_mime_types" type="id"/>
|
||||
<item name="tag_screen_reader_focusable" type="id"/>
|
||||
<item name="tag_state_description" type="id"/>
|
||||
<item name="tag_system_bar_state_monitor" type="id"/>
|
||||
<item name="tag_transition_group" type="id"/>
|
||||
<item name="tag_unhandled_key_event_manager" type="id"/>
|
||||
<item name="tag_unhandled_key_listeners" type="id"/>
|
||||
<item name="tag_window_insets_animation_callback" type="id"/>
|
||||
<item name="text" type="id"/>
|
||||
<item name="text2" type="id"/>
|
||||
<item name="title" type="id"/>
|
||||
<item name="transition_clip" type="id"/>
|
||||
<item name="transition_current_scene" type="id"/>
|
||||
<item name="transition_image_transform" type="id"/>
|
||||
<item name="transition_layout_save" type="id"/>
|
||||
<item name="transition_pause_alpha" type="id"/>
|
||||
<item name="transition_position" type="id"/>
|
||||
<item name="transition_scene_layoutid_cache" type="id"/>
|
||||
<item name="transition_transform" type="id"/>
|
||||
<id name="view_tree_disjoint_parent"/>
|
||||
<id name="view_tree_lifecycle_owner"/>
|
||||
<id name="view_tree_on_back_pressed_dispatcher_owner"/>
|
||||
<id name="view_tree_saved_state_registry_owner"/>
|
||||
<id name="view_tree_view_model_store_owner"/>
|
||||
<item name="visible_removing_fragment_view_tag" type="id"/>
|
||||
<item name="wrapped_composition_tag" type="id"/>
|
||||
<integer name="cancel_button_image_alpha">127</integer>
|
||||
<integer name="m3c_window_layout_in_display_cutout_mode">1</integer>
|
||||
<integer name="status_bar_notification_info_maxnum">999</integer>
|
||||
<string name="androidx_compose_foundation_autofill">Autofill</string>
|
||||
<string name="androidx_compose_ui_autofill">Autofill</string>
|
||||
<string name="androidx_startup" translatable="false">androidx.startup</string>
|
||||
<string name="app_name">Minstrel</string>
|
||||
<string name="call_notification_answer_action">Answer</string>
|
||||
<string name="call_notification_answer_video_action">Video</string>
|
||||
<string name="call_notification_decline_action">Decline</string>
|
||||
<string name="call_notification_hang_up_action">Hang Up</string>
|
||||
<string name="call_notification_incoming_text">Incoming call</string>
|
||||
<string name="call_notification_ongoing_text">Ongoing call</string>
|
||||
<string name="call_notification_screening_text">Screening an incoming call</string>
|
||||
<string name="close_drawer">"Close navigation menu"</string>
|
||||
<string name="close_sheet">"Close sheet"</string>
|
||||
<string name="default_error_message">"Invalid input"</string>
|
||||
<string name="default_notification_channel_name">Now playing</string>
|
||||
<string name="default_popup_window_title" ns1:ignore="ExtraTranslation">"Pop-Up Window"</string>
|
||||
<string name="dropdown_menu">"Dropdown menu"</string>
|
||||
<string name="error_message_authentication_expired">Sign in to use this app</string>
|
||||
<string name="error_message_bad_value">Incorrect input data</string>
|
||||
<string name="error_message_concurrent_stream_limit">Listening on too many devices</string>
|
||||
<string name="error_message_content_already_playing">Already playing that content</string>
|
||||
<string name="error_message_disconnected">Disconnected from media app</string>
|
||||
<string name="error_message_end_of_playlist">Nothing else is queued up</string>
|
||||
<string name="error_message_fallback">Something’s wrong. Try later.</string>
|
||||
<string name="error_message_info_cancelled">Couldn’t finish. Try again.</string>
|
||||
<string name="error_message_invalid_state">Can’t do that right now</string>
|
||||
<string name="error_message_io">Input/output error</string>
|
||||
<string name="error_message_not_available_in_region">Can’t get that content here</string>
|
||||
<string name="error_message_not_supported">This app can’t do that</string>
|
||||
<string name="error_message_parental_control_restricted">That content is blocked</string>
|
||||
<string name="error_message_permission_denied">Access denied</string>
|
||||
<string name="error_message_premium_account_required">Premium access required</string>
|
||||
<string name="error_message_setup_required">Setup required</string>
|
||||
<string name="error_message_skip_limit_reached">Can’t skip any more tracks</string>
|
||||
<string name="exo_download_completed">Download completed</string>
|
||||
<string name="exo_download_description">Download</string>
|
||||
<string name="exo_download_downloading">Downloading</string>
|
||||
<string name="exo_download_failed">Download failed</string>
|
||||
<string name="exo_download_notification_channel_name">Downloads</string>
|
||||
<string name="exo_download_paused">Downloads paused</string>
|
||||
<string name="exo_download_paused_for_network">Downloads waiting for network</string>
|
||||
<string name="exo_download_paused_for_wifi">Downloads waiting for WiFi</string>
|
||||
<string name="exo_download_removing">Removing downloads</string>
|
||||
<string name="in_progress">In progress</string>
|
||||
<string name="indeterminate">Partially checked</string>
|
||||
<string name="m3c_bottom_sheet_collapse_description">Collapse bottom sheet</string>
|
||||
<string name="m3c_bottom_sheet_dismiss_description">Dismiss bottom sheet</string>
|
||||
<string name="m3c_bottom_sheet_drag_handle_description">Drag handle</string>
|
||||
<string name="m3c_bottom_sheet_expand_description">Expand bottom sheet</string>
|
||||
<string name="m3c_bottom_sheet_pane_title">Bottom Sheet</string>
|
||||
<string name="m3c_date_input_headline">Entered date</string>
|
||||
<string name="m3c_date_input_headline_description">Entered date: %1$s</string>
|
||||
<string name="m3c_date_input_invalid_for_pattern">Date does not match expected pattern: %1$s</string>
|
||||
<string name="m3c_date_input_invalid_not_allowed">Date not allowed: %1$s</string>
|
||||
<string name="m3c_date_input_invalid_year_range">
|
||||
Date out of expected year range %1$s - %2$s
|
||||
</string>
|
||||
<string name="m3c_date_input_label">Date</string>
|
||||
<string name="m3c_date_input_no_input_description">None</string>
|
||||
<string name="m3c_date_input_title">Select date</string>
|
||||
<string name="m3c_date_picker_headline">"Selected date"</string>
|
||||
<string name="m3c_date_picker_headline_description">Current selection: %1$s</string>
|
||||
<string name="m3c_date_picker_navigate_to_year_description">Navigate to year %1$s</string>
|
||||
<string name="m3c_date_picker_no_selection_description">None</string>
|
||||
<string name="m3c_date_picker_scroll_to_earlier_years">Scroll to show earlier years</string>
|
||||
<string name="m3c_date_picker_scroll_to_later_years">Scroll to show later years</string>
|
||||
<string name="m3c_date_picker_switch_to_calendar_mode">Switch to calendar input mode</string>
|
||||
<string name="m3c_date_picker_switch_to_day_selection">
|
||||
"Swipe to select a year, or tap to switch back to selecting a day"
|
||||
</string>
|
||||
<string name="m3c_date_picker_switch_to_input_mode">Switch to text input mode</string>
|
||||
<string name="m3c_date_picker_switch_to_next_month">"Change to next month"</string>
|
||||
<string name="m3c_date_picker_switch_to_previous_month">"Change to previous month"</string>
|
||||
<string name="m3c_date_picker_switch_to_year_selection">"Switch to selecting a year"</string>
|
||||
<string name="m3c_date_picker_title">"Select date"</string>
|
||||
<string name="m3c_date_picker_today_description">Today</string>
|
||||
<string name="m3c_date_picker_year_picker_pane_title">Year picker visible</string>
|
||||
<string name="m3c_date_range_input_invalid_range_input">Invalid date range input</string>
|
||||
<string name="m3c_date_range_input_title">Enter dates</string>
|
||||
<string name="m3c_date_range_picker_day_in_range">In range</string>
|
||||
<string name="m3c_date_range_picker_end_headline">End date</string>
|
||||
<string name="m3c_date_range_picker_scroll_to_next_month">Scroll to show the next month</string>
|
||||
<string name="m3c_date_range_picker_scroll_to_previous_month">Scroll to show the previous month</string>
|
||||
<string name="m3c_date_range_picker_start_headline">Start date</string>
|
||||
<string name="m3c_date_range_picker_title">Select dates</string>
|
||||
<string name="m3c_dialog">"Dialog"</string>
|
||||
<string name="m3c_dropdown_menu_collapsed">Collapsed</string>
|
||||
<string name="m3c_dropdown_menu_expanded">Expanded</string>
|
||||
<string name="m3c_dropdown_menu_toggle">Toggle dropdown menu</string>
|
||||
<string name="m3c_floating_toolbar_collapse">Collapse toolbar</string>
|
||||
<string name="m3c_floating_toolbar_expand">Expand toolbar</string>
|
||||
<string name="m3c_search_bar_search">Search</string>
|
||||
<string name="m3c_snackbar_dismiss">Dismiss</string>
|
||||
<string name="m3c_snackbar_pane_title">Alert</string>
|
||||
<string name="m3c_suggestions_available">Suggestions below</string>
|
||||
<string name="m3c_time_input_dialog_title">Enter Time</string>
|
||||
<string name="m3c_time_picker_am">AM</string>
|
||||
<string name="m3c_time_picker_dialog_title">Select Time</string>
|
||||
<string name="m3c_time_picker_hour">Hour</string>
|
||||
<string name="m3c_time_picker_hour_24h_suffix">%1$d hours</string>
|
||||
<string name="m3c_time_picker_hour_selection">Select hour</string>
|
||||
<string name="m3c_time_picker_hour_suffix">%1$d o\'clock</string>
|
||||
<string name="m3c_time_picker_hour_text_field">for hour</string>
|
||||
<string name="m3c_time_picker_minute">Minute</string>
|
||||
<string name="m3c_time_picker_minute_selection">Select minutes</string>
|
||||
<string name="m3c_time_picker_minute_suffix">%1$d minutes</string>
|
||||
<string name="m3c_time_picker_minute_text_field">for minutes</string>
|
||||
<string name="m3c_time_picker_period_toggle_description">Select AM or PM</string>
|
||||
<string name="m3c_time_picker_pm">PM</string>
|
||||
<string name="m3c_time_picker_toggle_keyboard">Switch to text input mode for the time input</string>
|
||||
<string name="m3c_time_picker_toggle_touch">Switch to clock mode for the time input</string>
|
||||
<string name="m3c_tooltip_long_press_label">Show tooltip</string>
|
||||
<string name="m3c_tooltip_pane_description">Tooltip</string>
|
||||
<string name="m3c_wide_navigation_rail_close_rail">"Close rail"</string>
|
||||
<string name="m3c_wide_navigation_rail_pane_title">"Navigation rail"</string>
|
||||
<string name="media3_controls_pause_description">Pause</string>
|
||||
<string name="media3_controls_play_description">Play</string>
|
||||
<string name="media3_controls_seek_back_description">Seek back</string>
|
||||
<string name="media3_controls_seek_forward_description">Seek forward</string>
|
||||
<string name="media3_controls_seek_to_next_description">Seek to next item</string>
|
||||
<string name="media3_controls_seek_to_previous_description">Seek to previous item</string>
|
||||
<string name="navigation_menu">"Navigation menu"</string>
|
||||
<string name="not_selected">Not selected</string>
|
||||
<string name="range_end">"Range end"</string>
|
||||
<string name="range_start">"Range start"</string>
|
||||
<string name="selected">Selected</string>
|
||||
<string name="snackbar_pane_title">Alert</string>
|
||||
<string name="state_empty">Empty</string>
|
||||
<string name="state_off">Off</string>
|
||||
<string name="state_on">On</string>
|
||||
<string name="status_bar_notification_info_overflow">999+</string>
|
||||
<string name="switch_role">Switch</string>
|
||||
<string name="tab">Tab</string>
|
||||
<string name="template_percent"><ns2:g id="percentage">%1$d</ns2:g> percent.</string>
|
||||
<string name="tooltip_description">tooltip</string>
|
||||
<string name="tooltip_label">show tooltip</string>
|
||||
<style name="DialogWindowTheme">
|
||||
<item name="android:windowClipToOutline">false</item>
|
||||
</style>
|
||||
<style name="EdgeToEdgeFloatingDialogTheme" parent="android:Theme.DeviceDefault.Dialog">
|
||||
<item name="android:windowAnimationStyle">@null</item>
|
||||
<item name="android:windowLayoutInDisplayCutoutMode" ns1:targetApi="27">@integer/m3c_window_layout_in_display_cutout_mode</item>
|
||||
<item name="android:windowClipToOutline">false</item>
|
||||
<item name="android:windowIsFloating">false</item>
|
||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||
<item name="android:navigationBarColor">@android:color/transparent</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
<item name="android:windowBackground">@android:color/transparent</item>
|
||||
<item name="android:windowElevation">0dp</item>
|
||||
</style>
|
||||
<style name="EdgeToEdgeFloatingDialogWindowTheme">
|
||||
<item name="android:dialogTheme">@style/EdgeToEdgeFloatingDialogTheme</item>
|
||||
</style>
|
||||
<style name="FloatingDialogWindowTheme">
|
||||
<item name="android:windowClipToOutline">false</item>
|
||||
<item name="android:backgroundDimEnabled">true</item>
|
||||
</style>
|
||||
<style name="TextAppearance.Compat.Notification" parent="@android:style/TextAppearance.StatusBar.EventContent"/>
|
||||
<style name="TextAppearance.Compat.Notification.Info">
|
||||
<item name="android:textSize">12sp</item>
|
||||
<item name="android:textColor">?android:attr/textColorSecondary</item>
|
||||
</style>
|
||||
<style name="TextAppearance.Compat.Notification.Info.Media"/>
|
||||
<style name="TextAppearance.Compat.Notification.Line2" parent="TextAppearance.Compat.Notification.Info"/>
|
||||
<style name="TextAppearance.Compat.Notification.Line2.Media" parent="TextAppearance.Compat.Notification.Info.Media"/>
|
||||
<style name="TextAppearance.Compat.Notification.Media"/>
|
||||
<style name="TextAppearance.Compat.Notification.Time">
|
||||
<item name="android:textSize">12sp</item>
|
||||
<item name="android:textColor">?android:attr/textColorSecondary</item>
|
||||
</style>
|
||||
<style name="TextAppearance.Compat.Notification.Time.Media"/>
|
||||
<style name="TextAppearance.Compat.Notification.Title" parent="@android:style/TextAppearance.StatusBar.EventContent.Title"/>
|
||||
<style name="TextAppearance.Compat.Notification.Title.Media"/>
|
||||
<style name="Theme.Minstrel" parent="android:Theme.Material.NoActionBar">
|
||||
<item name="android:windowBackground">@android:color/black</item>
|
||||
</style>
|
||||
<style name="Widget.Compat.NotificationActionContainer" parent=""/>
|
||||
<style name="Widget.Compat.NotificationActionText" parent=""/>
|
||||
<declare-styleable name="ActivityFilter">
|
||||
|
||||
<attr format="string" name="activityName"/>
|
||||
|
||||
<attr format="string" name="activityAction"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="ActivityNavigator">
|
||||
<attr name="android:name"/>
|
||||
<attr format="string" name="action"/>
|
||||
<attr format="string" name="data"/>
|
||||
<attr format="string" name="dataPattern"/>
|
||||
<attr format="string" name="targetPackage"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="ActivityRule">
|
||||
|
||||
<attr format="boolean" name="alwaysExpand"/>
|
||||
<attr name="tag"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="AnimatedStateListDrawableCompat">
|
||||
|
||||
<attr name="android:visible"/>
|
||||
|
||||
<attr name="android:variablePadding"/>
|
||||
|
||||
<attr name="android:constantSize"/>
|
||||
|
||||
<attr name="android:dither"/>
|
||||
|
||||
<attr name="android:enterFadeDuration"/>
|
||||
|
||||
<attr name="android:exitFadeDuration"/>
|
||||
|
||||
|
||||
</declare-styleable>
|
||||
<declare-styleable name="AnimatedStateListDrawableItem">
|
||||
|
||||
<attr name="android:drawable"/>
|
||||
|
||||
<attr name="android:id"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="AnimatedStateListDrawableTransition">
|
||||
|
||||
<attr name="android:fromId"/>
|
||||
|
||||
<attr name="android:toId"/>
|
||||
|
||||
<attr name="android:drawable"/>
|
||||
|
||||
<attr name="android:reversible"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="Capability">
|
||||
|
||||
<attr format="reference" name="queryPatterns"/>
|
||||
|
||||
<attr format="boolean" name="shortcutMatchRequired"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="ColorStateListItem">
|
||||
|
||||
<attr name="android:color"/>
|
||||
|
||||
<attr format="float" name="alpha"/>
|
||||
<attr name="android:alpha"/>
|
||||
|
||||
<attr format="float" name="lStar"/>
|
||||
<attr name="android:lStar"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="DividerAttributes">
|
||||
|
||||
<attr format="enum" name="embeddingDividerType">
|
||||
<!-- Fixed divider type. -->
|
||||
<enum name="fixed" value="0"/>
|
||||
<!-- Draggable divider type. -->
|
||||
<enum name="draggable" value="1"/>
|
||||
</attr>
|
||||
|
||||
<attr format="integer" name="embeddingDividerWidthDp"/>
|
||||
|
||||
<attr format="color|reference" name="embeddingDividerColor"/>
|
||||
|
||||
<attr format="float" name="dragRangeMinRatio"/>
|
||||
|
||||
<attr format="float" name="dragRangeMaxRatio"/>
|
||||
|
||||
<attr format="boolean" name="isDraggingToFullscreenAllowed"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="FontFamily">
|
||||
|
||||
<attr format="string" name="fontProviderAuthority"/>
|
||||
|
||||
<attr format="string" name="fontProviderPackage"/>
|
||||
|
||||
<attr format="string" name="fontProviderQuery"/>
|
||||
|
||||
<attr format="string" name="fontProviderFallbackQuery"/>
|
||||
|
||||
<attr format="reference" name="fontProviderCerts"/>
|
||||
|
||||
<attr name="fontProviderFetchStrategy">
|
||||
<!-- The blocking font fetch works as follows.
|
||||
First, check the local cache, then if the requested font is not cached, request the
|
||||
font from the provider and wait until it is finished. You can change the length of
|
||||
the timeout by modifying fontProviderFetchTimeout. If the timeout happens, the
|
||||
default typeface will be used instead. -->
|
||||
<enum name="blocking" value="0"/>
|
||||
<!-- The async font fetch works as follows.
|
||||
First, check the local cache, then if the requested font is not cached, trigger a
|
||||
request the font and continue with layout inflation. Once the font fetch succeeds, the
|
||||
target text view will be refreshed with the downloaded font data. The
|
||||
fontProviderFetchTimeout will be ignored if async loading is specified. -->
|
||||
<enum name="async" value="1"/>
|
||||
</attr>
|
||||
|
||||
<attr format="integer" name="fontProviderFetchTimeout">
|
||||
<!-- A special value for the timeout. In this case, the blocking font fetching will not
|
||||
timeout and wait until a reply is received from the font provider. -->
|
||||
<enum name="forever" value="-1"/>
|
||||
</attr>
|
||||
|
||||
<attr format="string" name="fontProviderSystemFontFamily"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="FontFamilyFont">
|
||||
|
||||
<attr name="fontStyle">
|
||||
<enum name="normal" value="0"/>
|
||||
<enum name="italic" value="1"/>
|
||||
</attr>
|
||||
|
||||
<attr format="reference" name="font"/>
|
||||
|
||||
<attr format="integer" name="fontWeight"/>
|
||||
|
||||
<attr format="string" name="fontVariationSettings"/>
|
||||
|
||||
<attr format="integer" name="ttcIndex"/>
|
||||
|
||||
<attr name="android:fontStyle"/>
|
||||
<attr name="android:font"/>
|
||||
<attr name="android:fontWeight"/>
|
||||
<attr name="android:fontVariationSettings"/>
|
||||
<attr name="android:ttcIndex"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="Fragment">
|
||||
<attr name="android:name"/>
|
||||
<attr name="android:id"/>
|
||||
<attr name="android:tag"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="FragmentContainerView">
|
||||
<attr name="android:name"/>
|
||||
<attr name="android:tag"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="GradientColor">
|
||||
|
||||
<attr name="android:startColor"/>
|
||||
|
||||
<attr name="android:centerColor"/>
|
||||
|
||||
<attr name="android:endColor"/>
|
||||
|
||||
<attr name="android:type"/>
|
||||
|
||||
|
||||
|
||||
<attr name="android:gradientRadius"/>
|
||||
|
||||
|
||||
|
||||
<attr name="android:centerX"/>
|
||||
|
||||
<attr name="android:centerY"/>
|
||||
|
||||
|
||||
|
||||
<attr name="android:startX"/>
|
||||
|
||||
<attr name="android:startY"/>
|
||||
|
||||
<attr name="android:endX"/>
|
||||
|
||||
<attr name="android:endY"/>
|
||||
|
||||
|
||||
<attr name="android:tileMode"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="GradientColorItem">
|
||||
|
||||
<attr name="android:offset"/>
|
||||
|
||||
<attr name="android:color"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="NavAction">
|
||||
<attr name="android:id"/>
|
||||
<attr format="reference" name="destination"/>
|
||||
<attr format="boolean" name="launchSingleTop"/>
|
||||
<attr format="boolean" name="restoreState"/>
|
||||
<attr format="reference" name="popUpTo"/>
|
||||
<attr format="boolean" name="popUpToInclusive"/>
|
||||
<attr format="boolean" name="popUpToSaveState"/>
|
||||
<attr format="reference" name="enterAnim"/>
|
||||
<attr format="reference" name="exitAnim"/>
|
||||
<attr format="reference" name="popEnterAnim"/>
|
||||
<attr format="reference" name="popExitAnim"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="NavArgument">
|
||||
<attr name="android:name"/>
|
||||
<attr name="android:defaultValue"/>
|
||||
<attr format="boolean" name="nullable"/>
|
||||
<attr format="string" name="argType"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="NavDeepLink">
|
||||
<attr format="string" name="uri"/>
|
||||
<attr format="string" name="action"/>
|
||||
<attr format="string" name="mimeType"/>
|
||||
<attr name="android:autoVerify"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="NavGraphNavigator">
|
||||
<attr format="reference" name="startDestination"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="NavHost">
|
||||
<attr format="reference" name="navGraph"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="NavInclude">
|
||||
<attr format="reference" name="graph"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="Navigator">
|
||||
<attr name="android:id"/>
|
||||
<attr format="string" name="route"/>
|
||||
<attr name="android:label"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="SplitPairFilter">
|
||||
|
||||
<attr format="string" name="primaryActivityName"/>
|
||||
|
||||
<attr format="string" name="secondaryActivityName"/>
|
||||
|
||||
<attr format="string" name="secondaryActivityAction"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="SplitPairRule">
|
||||
|
||||
<attr format="boolean" name="clearTop"/>
|
||||
<attr name="finishPrimaryWithSecondary"/>
|
||||
<attr name="finishSecondaryWithPrimary"/>
|
||||
<attr name="splitRatio"/>
|
||||
<attr name="splitMinWidthDp"/>
|
||||
<attr name="splitMinHeightDp"/>
|
||||
<attr name="splitMinSmallestWidthDp"/>
|
||||
<attr name="splitMaxAspectRatioInPortrait"/>
|
||||
<attr name="splitMaxAspectRatioInLandscape"/>
|
||||
<attr name="splitLayoutDirection"/>
|
||||
<attr name="tag"/>
|
||||
<attr name="animationBackgroundColor"/>
|
||||
<attr name="splitOpenAnimation"/>
|
||||
<attr name="splitCloseAnimation"/>
|
||||
<attr name="splitChangeAnimation"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="SplitPlaceholderRule">
|
||||
|
||||
<attr format="string" name="placeholderActivityName"/>
|
||||
|
||||
<attr format="boolean" name="stickyPlaceholder"/>
|
||||
<attr name="finishPrimaryWithPlaceholder"/>
|
||||
<attr name="splitRatio"/>
|
||||
<attr name="splitMinWidthDp"/>
|
||||
<attr name="splitMinHeightDp"/>
|
||||
<attr name="splitMinSmallestWidthDp"/>
|
||||
<attr name="splitMaxAspectRatioInPortrait"/>
|
||||
<attr name="splitMaxAspectRatioInLandscape"/>
|
||||
<attr name="splitLayoutDirection"/>
|
||||
<attr name="tag"/>
|
||||
<attr name="animationBackgroundColor"/>
|
||||
<attr name="splitOpenAnimation"/>
|
||||
<attr name="splitCloseAnimation"/>
|
||||
<attr name="splitChangeAnimation"/>
|
||||
</declare-styleable>
|
||||
<declare-styleable name="StateListDrawable">
|
||||
|
||||
<attr name="android:visible"/>
|
||||
|
||||
<attr name="android:variablePadding"/>
|
||||
|
||||
<attr name="android:constantSize"/>
|
||||
|
||||
<attr name="android:dither"/>
|
||||
|
||||
<attr name="android:enterFadeDuration"/>
|
||||
|
||||
<attr name="android:exitFadeDuration"/>
|
||||
|
||||
|
||||
</declare-styleable>
|
||||
<declare-styleable name="StateListDrawableItem">
|
||||
|
||||
<attr name="android:drawable"/>
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user