diff options
| author | Albin <albin@mullvad.net> | 2023-02-13 10:51:59 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-02-13 10:51:59 +0100 |
| commit | 9ea4d4ab146c109a517c66393a1e297a77d6e2bc (patch) | |
| tree | 3c92f34a2782cdb74f10f20a98edcefbccc21401 /android | |
| parent | 3d997a796080563f069faf81c67bb6ea0c45617f (diff) | |
| download | mullvadvpn-9ea4d4ab146c109a517c66393a1e297a77d6e2bc.tar.xz mullvadvpn-9ea4d4ab146c109a517c66393a1e297a77d6e2bc.zip | |
Add agp lint baseline
Diffstat (limited to 'android')
| -rw-r--r-- | android/app/build.gradle.kts | 4 | ||||
| -rw-r--r-- | android/app/lint-baseline.xml | 3625 |
2 files changed, 3629 insertions, 0 deletions
diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 96f355180f..65247a63a4 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -42,6 +42,10 @@ android { name = "ALWAYS_SHOW_CHANGELOG", value = alwaysShowChangelog ) + + lint { + baseline = file("lint-baseline.xml") + } } if (keystorePropertiesFile.exists()) { diff --git a/android/app/lint-baseline.xml b/android/app/lint-baseline.xml new file mode 100644 index 0000000000..c0c2084b9d --- /dev/null +++ b/android/app/lint-baseline.xml @@ -0,0 +1,3625 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issues format="6" by="lint 7.3.1" type="baseline" client="gradle" dependencies="false" name="AGP (7.3.1)" variant="all" version="7.3.1"> + + <issue + id="MissingSuperCall" + message="Overriding method should call `super.onActivityResult`" + errorLine1=" override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt" + line="118" + column="18"/> + </issue> + + <issue + id="ScopedStorage" + message="WRITE_EXTERNAL_STORAGE no longer provides write access when targeting Android 10+" + errorLine1=" <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/debug/AndroidManifest.xml" + line="5" + column="36"/> + </issue> + + <issue + id="ResourceAsColor" + message="Should pass resolved color instead of resource id here: `getResources().getColor(android.R.color.transparent)`" + errorLine1=" dialog.window?.setBackgroundDrawable(ColorDrawable(android.R.color.transparent))" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/ConfirmDnsDialogFragment.kt" + line="42" + column="60"/> + </issue> + + <issue + id="ResourceAsColor" + message="Should pass resolved color instead of resource id here: `getResources().getColor(android.R.color.transparent)`" + errorLine1=" dialog.window?.setBackgroundDrawable(ColorDrawable(android.R.color.transparent))" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/ConfirmNoEmailDialogFragment.kt" + line="52" + column="60"/> + </issue> + + <issue + id="ResourceAsColor" + message="Should pass resolved color instead of resource id here: `getResources().getColor(android.R.color.transparent)`" + errorLine1=" dialog.window?.setBackgroundDrawable(ColorDrawable(android.R.color.transparent))" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/RedeemVoucherDialogFragment.kt" + line="108" + column="60"/> + </issue> + + <issue + id="ScrollViewSize" + message="This LinearLayout should use `android:layout_height="wrap_content"`" + errorLine1=" android:layout_height="match_parent"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/connect.xml" + line="23" + column="27"/> + </issue> + + <issue + id="ScrollViewSize" + message="This LinearLayout should use `android:layout_height="wrap_content"`" + errorLine1=" android:layout_height="match_parent"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/login.xml" + line="9" + column="19"/> + </issue> + + <issue + id="ScrollViewSize" + message="This LinearLayout should use `android:layout_height="wrap_content"`" + errorLine1=" android:layout_height="match_parent"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/out_of_time.xml" + line="14" + column="23"/> + </issue> + + <issue + id="ScrollViewSize" + message="This LinearLayout should use `android:layout_height="wrap_content"`" + errorLine1=" android:layout_height="match_parent"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/welcome.xml" + line="14" + column="23"/> + </issue> + + <issue + id="ApplySharedPref" + message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background" + errorLine1=" .commit()" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt" + line="112" + column="14"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`." + errorLine1=" input.replace(index, index + 1, character.toString().toUpperCase())" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/util/SegmentedInputFormatter.kt" + line="119" + column="74"/> + </issue> + + <issue + id="DuplicateIncludedIds" + message="Duplicate id @+id/widgetBarrier, defined or included multiple times in layout/list_item_action.xml: [layout/list_item_action.xml defines @+id/widgetBarrier, layout/list_item_action.xml => layout/list_item_base.xml defines @+id/widgetBarrier]" + errorLine1=" <include layout="@layout/list_item_base" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/list_item_action.xml" + line="7" + column="5" + message="Duplicate id @+id/widgetBarrier, defined or included multiple times in layout/list_item_action.xml: [layout/list_item_action.xml defines @+id/widgetBarrier, layout/list_item_action.xml => layout/list_item_base.xml defines @+id/widgetBarrier]"/> + <location + file="src/main/res/layout/list_item_action.xml" + line="23" + column="47" + message="Defined here"/> + <location + file="src/main/res/layout/list_item_base.xml" + line="38" + column="47" + message="Defined here, included via layout/list_item_action.xml => layout/list_item_base.xml defines @+id/widgetBarrier"/> + </issue> + + <issue + id="DuplicateIncludedIds" + message="Duplicate id @+id/widgetBarrier, defined or included multiple times in layout/list_item_two_action.xml: [layout/list_item_two_action.xml defines @+id/widgetBarrier, layout/list_item_two_action.xml => layout/list_item_base.xml defines @+id/widgetBarrier]" + errorLine1=" <include layout="@layout/list_item_base" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/list_item_two_action.xml" + line="16" + column="9" + message="Duplicate id @+id/widgetBarrier, defined or included multiple times in layout/list_item_two_action.xml: [layout/list_item_two_action.xml defines @+id/widgetBarrier, layout/list_item_two_action.xml => layout/list_item_base.xml defines @+id/widgetBarrier]"/> + <location + file="src/main/res/layout/list_item_two_action.xml" + line="34" + column="47" + message="Defined here"/> + <location + file="src/main/res/layout/list_item_base.xml" + line="38" + column="47" + message="Defined here, included via layout/list_item_two_action.xml => layout/list_item_base.xml defines @+id/widgetBarrier"/> + </issue> + + <issue + id="InlinedApi" + message="Field requires API level 33 (current min is 26): `android.Manifest.permission#POST_NOTIFICATIONS`" + errorLine1=" requestNotificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt" + line="315" + column="58"/> + </issue> + + <issue + id="SdCardPath" + message="Do not hardcode "`/data/`"; use `Context.getFilesDir().getPath()` instead" + errorLine1=" FileMigrator(File("/data/data/net.mullvad.mullvadvpn"), vpnService.filesDir).apply {" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt" + line="77" + column="28"/> + </issue> + + <issue + id="RedundantLabel" + message="Redundant label can be removed" + errorLine1=" android:label="@string/app_name"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/debug/AndroidManifest.xml" + line="17" + column="13"/> + </issue> + + <issue + id="RedundantLabel" + message="Redundant label can be removed" + errorLine1=" android:label="@string/app_name"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/AndroidManifest.xml" + line="33" + column="19"/> + </issue> + + <issue + id="SwitchIntDef" + message="Unexpected constant; expected one of: `ListItemData.ACTION`, `ListItemData.DIVIDER`, `ListItemData.PLAIN`" + errorLine1=" ListItemData.PROGRESS -> ProgressListItemView(parent.context)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/ListItemsAdapter.kt" + line="34" + column="17"/> + </issue> + + <issue + id="SwitchIntDef" + message="Unexpected constant; expected one of: `ListItemData.ACTION`, `ListItemData.DIVIDER`, `ListItemData.PLAIN`" + errorLine1=" ListItemData.APPLICATION -> ApplicationListItemView(parent.context)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/ListItemsAdapter.kt" + line="37" + column="17"/> + </issue> + + <issue + id="SwitchIntDef" + message="Unexpected constant; expected one of: `ListItemData.ACTION`, `ListItemData.DIVIDER`, `ListItemData.PLAIN`" + errorLine1=" ListItemData.DOUBLE_ACTION -> TwoActionListItemView(parent.context)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/ListItemsAdapter.kt" + line="38" + column="17"/> + </issue> + + <issue + id="Deprecated" + message="`android:editable` is deprecated: Use `inputType` instead" + errorLine1=" android:editable="false"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/view_logs.xml" + line="31" + column="19"/> + </issue> + + <issue + id="DiscouragedApi" + message="Use of this function is discouraged because resource reflection makes it harder to perform build optimizations and compile-time verification of code. It is much more efficient to retrieve resources by identifier (e.g. `R.foo.bar`) than by name (e.g. `getIdentifier("bar", "foo", null)`)." + errorLine1=" val id = resources.getIdentifier("config_showNavigationBar", "bool", "android")" + errorLine2=" ~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/SplitTunnelingFragment.kt" + line="130" + column="28"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_corner, null)," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="30" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_border, null)," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="31" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_border, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="32" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_corner_focused, null)," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="36" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_border_focused, null)," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="37" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_border_focused, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="38" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_corner_error, null)," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="42" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_border_error, null)," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="43" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.account_login_border_error, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountLoginBorder.kt" + line="44" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" setBackground(resources.getDrawable(R.drawable.cell_switch_background, null))" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CellSwitch.kt" + line="164" + column="23"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" private val greenBackground = resources.getDrawable(R.drawable.green_button_background, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectActionButton.kt" + line="16" + column="35"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" resources.getDrawable(R.drawable.transparent_red_left_half_button_background, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/ConnectActionButton.kt" + line="18" + column="9"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" private val errorImage = resources.getDrawable(R.drawable.icon_notification_error, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/NotificationBanner.kt" + line="64" + column="30"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" private val warningImage = resources.getDrawable(R.drawable.icon_notification_warning, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/NotificationBanner.kt" + line="65" + column="32"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" val activeRelayIcon = resources.getDrawable(R.drawable.icon_relay_active, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt" + line="17" + column="27"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `ResourcesCompat.getDrawable()`" + errorLine1=" val inactiveRelayIcon = resources.getDrawable(R.drawable.icon_relay_inactive, null)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt" + line="18" + column="29"/> + </issue> + + <issue + id="UseCompatLoadingForDrawables" + message="Use `AppCompatResources.getDrawable()`" + errorLine1=" super.detailImage = context.getDrawable(R.drawable.icon_extlink)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/UrlButton.kt" + line="17" + column="29"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="days_left">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="3" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="months_left">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="7" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="years_left">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="11" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="days_ago">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="15" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="minutes_ago">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="19" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="months_ago">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="23" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="years_ago">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="27" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="hours_ago">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="31" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="account_credit_expires_in_days">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="35" + column="5"/> + </issue> + + <issue + id="MissingQuantity" + message="For locale "fr" (French) the following quantity should also be defined: `many` (e.g. "1000000 de jours")" + errorLine1=" <plurals name="account_credit_expires_in_hours">" + errorLine2=" ^"> + <location + file="src/main/res/values-fr/plurals.xml" + line="39" + column="5"/> + </issue> + + <issue + id="Typos" + message=""imkan" is a common misspelling; did you mean "imkân"?" + errorLine1=" <string name="confirm_no_email">Sorun raporunu, size geri dönüş yapmamıza imkan vermeyen bir şekilde göndermek üzeresiniz. Sorununuz için yanıt almak istiyorsanız bir e-posta adresi girmelisiniz.</string>" + errorLine2=" ^"> + <location + file="src/main/res/values-tr/strings.xml" + line="31" + column="79"/> + </issue> + + <issue + id="Typos" + message=""imkan" is a common misspelling; did you mean "imkân"?" + errorLine1=" <string name="split_tunneling_description">Bölünmüş tünelleme, VPN tüneli üzerinden yönlendirilmemesi gereken uygulamaları seçmenize imkan sağlar.</string>" + errorLine2=" ^"> + <location + file="src/main/res/values-tr/strings.xml" + line="132" + column="138"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">1 jour restant</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="4" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">1 dia restante</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="4" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">1 mois restant</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="8" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">1 mês restante</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="8" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">1 an restant</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="12" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">1 ano restante</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="12" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">il y a un jour</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="16" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">há um dia</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="16" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">il y a une minute</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="20" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">há um minuto</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="20" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">il y a un mois</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="24" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">há um mês</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="24" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">il y a un an</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="28" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">há um ano</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="28" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">il y a une heure</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="32" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">há uma hora</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="32" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">Les crédits du compte expirent dans un jour</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="36" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">O crédito da conta expira dentro de um dia</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="36" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">Les crédits du compte expirent dans une heure</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/plurals.xml" + line="40" + column="9"/> + </issue> + + <issue + id="ImpliedQuantity" + message="The quantity `'one'` matches more than one specific number in this locale (0, 1), but the message did not \
include a formatting argument (such as `%d`). This is usually an internationalization error. See full issue \
explanation for more." + errorLine1=" <item quantity="one">O crédito da conta expira dentro de uma hora</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/plurals.xml" + line="40" + column="9"/> + </issue> + + <issue + id="UseCheckPermission" + message="The result of `checkPermission` is not used" + errorLine1=" mockedPackageManager.checkPermission(internet, packageName)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt" + line="72" + column="17"/> + </issue> + + <issue + id="DataExtractionRules" + message="The attribute `android:allowBackup` is deprecated from Android 12 and higher and may be removed in future versions. Consider adding the attribute `android:dataExtractionRules` specifying an `@xml` resource which configures cloud backups and device transfers on Android 12 and higher." + errorLine1=" android:allowBackup="false"" + errorLine2=" ~~~~~"> + <location + file="src/main/AndroidManifest.xml" + line="23" + column="39"/> + </issue> + + <issue + id="QueryAllPackagesPermission" + message="A `<queries>` declaration should generally be used instead of QUERY_ALL_PACKAGES; \
see https://g.co/dev/packagevisibility for details" + errorLine1=" <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/AndroidManifest.xml" + line="6" + column="22"/> + </issue> + + <issue + id="NotifyDataSetChanged" + message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort." + errorLine1=" notifyDataSetChanged()" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountHistoryAdapter.kt" + line="18" + column="9"/> + </issue> + + <issue + id="NotifyDataSetChanged" + message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort." + errorLine1=" notifyDataSetChanged()" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/util/AdapterWithHeader.kt" + line="16" + column="13"/> + </issue> + + <issue + id="NotifyDataSetChanged" + message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort." + errorLine1=" notifyDataSetChanged()" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/customdns/CustomDnsAdapter.kt" + line="38" + column="13"/> + </issue> + + <issue + id="NotifyDataSetChanged" + message="It will always be more efficient to use more specific change events if you can. Rely on `notifyDataSetChanged` as a last resort." + errorLine1=" notifyDataSetChanged()" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt" + line="64" + column="13"/> + </issue> + + <issue + id="ObsoleteLayoutParam" + message="Invalid layout param in a `FrameLayout`: `layout_alignParentLeft`" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="18" + column="11"/> + </issue> + + <issue + id="ObsoleteLayoutParam" + message="Invalid layout param in a `FrameLayout`: `layout_alignParentRight`" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="19" + column="11"/> + </issue> + + <issue + id="ObsoleteLayoutParam" + message="Invalid layout param in a `FrameLayout`: `layout_alignParentLeft`" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="18" + column="11"/> + </issue> + + <issue + id="ObsoleteLayoutParam" + message="Invalid layout param in a `FrameLayout`: `layout_alignParentRight`" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="19" + column="11"/> + </issue> + + <issue + id="ObsoleteSdkInt" + message="This folder configuration (`v26`) is unnecessary; `minSdkVersion` is 26. Merge all the resources in this folder into `mipmap-anydpi`."> + <location + file="src/main/res/mipmap-anydpi-v26"/> + </issue> + + <issue + id="UseCompoundDrawables" + message="This tag and its children can be replaced by one `<TextView/>` and a compound drawable" + errorLine1=" <LinearLayout android:layout_width="wrap_content"" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/layout/connect.xml" + line="79" + column="26"/> + </issue> + + <issue + id="VectorPath" + message="Very long vector path (917 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector." + errorLine1=" <path android:fillColor="#66294D73"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/drawable/account_history_remove_normal.xml" + line="7" + column="30"/> + </issue> + + <issue + id="VectorPath" + message="Very long vector path (917 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector." + errorLine1=" <path android:fillColor="#FF294D73"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/drawable/account_history_remove_pressed.xml" + line="7" + column="30"/> + </issue> + + <issue + id="VectorPath" + message="Very long vector path (1165 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector." + errorLine1=" <path android:pathData="M74.2,74.5c-8,10.3 -29,11.9 -38.3,0.4c-0.2,-0.9 1.9,-2.5 3.2,-4.3c0.6,-0.9 1.2,-1.8 1.6,-2.7c0.6,-1.7 -0.6,-1.6 -1.4,-3.1c-0.1,-0.3 -0.3,-0.6 -0.1,-0.9c0.2,-0.6 1.1,-1 1.3,-0.9c3.9,2.6 11.3,1.8 15.8,-3.4c0,0 1.4,0.3 2.1,0.5l-2.1,-1.4l-0.1,-0.1c-0.1,0.1 -0.2,0.1 -0.3,0.2c-9.4,7.1 -15.5,4.1 -15.5,4.1c-0.2,-0.2 -0.8,-0.8 -1.3,-1.2c-6.4,-4.5 -10.9,-10.5 -13,-14.4l-0.8,4.1l0.2,-5.5l-2.7,3.8l2,-4.1c-1.5,-0.2 -2.4,-1.7 -2,-2.9c0.3,-1.3 1.9,-2.2 3.3,-1.6l0.9,-4l-0.2,4.3c0,0 0.2,0.1 0.4,0.1l2.8,-3.4l-1.9,3.3c3,-0.6 8,-0.7 13.3,-0.3l5.5,2.7c2.7,2.4 6.4,5.5 10.5,8.1L67.9,56l1.3,1.9h-1.1l2.3,2.8l-2.1,-0.3c0,0.2 2.1,2.6 2.1,2.6l-1.7,0.2c0.1,0.2 1.7,2.3 1.7,2.3l-1.3,-0.1c0.1,0.3 2,3.5 2,3.5s-0.7,-0.2 -1.1,-0.3C71.7,72.3 74.1,73 74.2,74.5zM72.8,46.2c-0.8,2.5 -3.7,6 -2.6,8.7c-0.4,-0.1 -9.4,-3.1 -11.9,-4.5c-4,-2.5 -7.6,-5.6 -10.3,-8l-0.1,-0.1L38.6,38c-0.1,-0.1 -0.2,-0.1 -0.3,-0.2c1.3,0.1 6.3,0.7 8.5,0.2c-0.4,-1.2 -0.3,-2.7 0.3,-4.1c0.9,-2 2.5,-3.3 4,-3.3c0.3,0 0.6,0.1 0.9,0.2c0.9,-0.8 1.9,-1.5 3.1,-1.9c6.3,-2.5 15.5,2 17.9,8.1C74.1,40 73.8,43.2 72.8,46.2zM52,31.6c-1.4,-0.6 -3.2,0.5 -4,2.6c-0.9,2 -0.5,4.1 0.9,4.7c1.3,0.6 3.2,-0.5 4,-2.6C53.7,34.3 53.3,32.1 52,31.6z"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/drawable/icon_android_mono.xml" + line="6" + column="29"/> + </issue> + + <issue + id="VectorPath" + message="Very long vector path (917 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector." + errorLine1=" <path android:fillColor="#99FFFFFF"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/drawable/icon_close.xml" + line="7" + column="30"/> + </issue> + + <issue + id="VectorPath" + message="Very long vector path (1161 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector." + errorLine1=" <path android:pathData="M21.2552,12C21.2552,12.408 21.2182,12.792 21.1688,13.176L23.7719,15.156C24.0063,15.336 24.068,15.66 23.9199,15.924L21.4526,20.076C21.3045,20.34 20.9838,20.448 20.7001,20.34L17.6282,19.14C16.9867,19.608 16.2959,20.016 15.5433,20.316L15.0745,23.496C15.0375,23.784 14.7785,24 14.4701,24L9.5354,24C9.227,24 8.9679,23.784 8.9309,23.496L8.4621,20.316C7.7096,20.016 7.0187,19.62 6.3772,19.14L3.3054,20.34C3.034,20.436 2.7009,20.34 2.5529,20.076L0.0855,15.924C-0.0625,15.66 -0.0008,15.336 0.2336,15.156L2.8366,13.176C2.7873,12.792 2.7502,12.396 2.7502,12C2.7502,11.604 2.7873,11.208 2.8366,10.824L0.2336,8.844C-0.0008,8.664 -0.0748,8.34 0.0855,8.076L2.5529,3.924C2.7009,3.66 3.0217,3.552 3.3054,3.66L6.3772,4.86C7.0187,4.392 7.7096,3.984 8.4621,3.684L8.9309,0.504C8.9679,0.216 9.227,0 9.5354,0L14.4701,0C14.7785,0 15.0375,0.216 15.0745,0.504L15.5433,3.684C16.2959,3.984 16.9867,4.38 17.6282,4.86L20.7001,3.66C20.9715,3.564 21.3046,3.66 21.4526,3.924L23.9199,8.076C24.068,8.34 24.0063,8.664 23.7719,8.844L21.1688,10.824C21.2182,11.208 21.2552,11.592 21.2552,12ZM12,17C14.7571,17 17,14.7571 17,12C17,9.2429 14.7571,7 12,7C9.2429,7 7,9.2429 7,12C7,14.7571 9.2429,17 12,17Z"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/drawable/icon_settings.xml" + line="6" + column="29"/> + </issue> + + <issue + id="MergeRootFrame" + message="This `<FrameLayout>` can be replaced with a `<merge>` tag" + errorLine1="<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/layout/main.xml" + line="1" + column="1"/> + </issue> + + <issue + id="InefficientWeight" + message="Use a `layout_height` of `0dp` instead of `wrap_content` for better performance" + errorLine1=" android:layout_height="wrap_content"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/confirm_dns.xml" + line="17" + column="19"/> + </issue> + + <issue + id="InefficientWeight" + message="Use a `layout_height` of `0dp` instead of `wrap_content` for better performance" + errorLine1=" android:layout_height="wrap_content"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/confirm_no_email.xml" + line="17" + column="19"/> + </issue> + + <issue + id="InefficientWeight" + message="Use a `layout_height` of `0dp` instead of `wrap_content` for better performance" + errorLine1=" android:layout_height="wrap_content"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/connect.xml" + line="71" + column="35"/> + </issue> + + <issue + id="InefficientWeight" + message="Use a `layout_height` of `0dp` instead of `wrap_content` for better performance" + errorLine1=" android:layout_height="wrap_content"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="38" + column="27"/> + </issue> + + <issue + id="InefficientWeight" + message="Use a `layout_height` of `0dp` instead of `wrap_content` for better performance" + errorLine1=" android:layout_height="wrap_content"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/redeem_voucher.xml" + line="13" + column="19"/> + </issue> + + <issue + id="InefficientWeight" + message="Use a `layout_height` of `0dp` instead of `wrap_content` for better performance" + errorLine1=" android:layout_height="wrap_content"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="9" + column="15"/> + </issue> + + <issue + id="InefficientWeight" + message="Use a `layout_width` of `0dp` instead of `wrap_content` for better performance" + errorLine1=" <TextView android:layout_width="wrap_content"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="38" + column="19"/> + </issue> + + <issue + id="NestedWeights" + message="Nested weights are bad for performance" + errorLine1=" android:layout_weight="0"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/connect.xml" + line="72" + column="35"/> + </issue> + + <issue + id="NestedWeights" + message="Nested weights are bad for performance" + errorLine1=" android:layout_weight="1" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/login.xml" + line="28" + column="20"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account.xml" + line="5" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/blue40` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/blue40"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="4" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/advanced.xml" + line="5" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/collapsed_title_layout.xml" + line="8" + column="54"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/blue40` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/blue40"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="4" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/white` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/white"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/edit_custom_dns_server.xml" + line="4" + column="15"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `?android:attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="?android:attr/selectableItemBackground">" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="8" + column="17"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/preferences.xml" + line="5" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="5" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/select_location.xml" + line="4" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/settings.xml" + line="5" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling.xml" + line="5" + column="14"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/darkBlue` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/darkBlue"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/view_logs.xml" + line="5" + column="15"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.red45` appears to be unused" + errorLine1=" <color name="red45">#72E34039</color>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="23" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.red40` appears to be unused" + errorLine1=" <color name="red40">#66E34039</color>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="24" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.textInputBorder` appears to be unused" + errorLine1=" <color name="textInputBorder">#234161</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="26" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.anim.fade_in` appears to be unused" + errorLine1="<set xmlns:android="http://schemas.android.com/apk/res/android">" + errorLine2="^"> + <location + file="src/main/res/anim/fade_in.xml" + line="2" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.layout.missing_service` appears to be unused" + errorLine1="<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/layout/missing_service.xml" + line="1" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.layout.split_tunneling` appears to be unused" + errorLine1="<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/layout/split_tunneling.xml" + line="1" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.layout.split_tunneling_header` appears to be unused" + errorLine1="<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="1" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.account_created` appears to be unused" + errorLine1=" <string name="account_created">Account created</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="28" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.not_blocking_internet` appears to be unused" + errorLine1=" <string name="not_blocking_internet">YOU MIGHT BE LEAKING NETWORK TRAFFIC</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="112" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.virtual_adapter_problem` appears to be unused" + errorLine1=" <string name="virtual_adapter_problem">Virtual adapter error</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="132" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.enable` appears to be unused" + errorLine1=" <string name="enable">Enable</string>" + errorLine2=" ~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="147" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.wg_key_url` appears to be unused" + errorLine1=" <string name="wg_key_url"" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings_non_translatable.xml" + line="10" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.drawable.transparent_red_button_background` appears to be unused" + errorLine1="<selector xmlns:android="http://schemas.android.com/apk/res/android">" + errorLine2="^"> + <location + file="src/main/res/drawable/transparent_red_button_background.xml" + line="2" + column="1"/> + </issue> + + <issue + id="RedundantNamespace" + message="This namespace declaration is redundant" + errorLine1=" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/information_view.xml" + line="2" + column="56"/> + </issue> + + <issue + id="UnusedNamespace" + message="Unused namespace declaration xmlns:android; already declared on the root element" + errorLine1=" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/information_view.xml" + line="2" + column="56"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Connecting to Mullvad system service...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="15" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Logging in...</string>" + errorLine2=" ~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="18" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Creating account...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="26" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Opretter forbindelse til Mullvad-systemtjeneste...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-da/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Verbindung zum Mullvad-Systemdienst wird hergestellt...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-de/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Yhdistetään Mullvad-järjestelmäpalveluun...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fi/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Connexion au service système Mullvad...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Connessione al servizio del sistema Mullvad...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-it/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Mullvad システムサービスに接続中...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-ja/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Mullvad 시스템 서비스에 연결하는 중...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-ko/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Mullvad စနစ် ဝန်ဆောင်မှုနှင့် ချိတ်ဆက်နေဆဲ...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-my/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Kobler til Mullvads systemtjeneste ...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-nb/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Verbinden met Mullvad-systeemdienst...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-nl/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Łączenie z usługą systemową Mullvad...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pl/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">A ligar-se ao serviço de sistema Mulvad...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Подключение к системному сервису Mullvad...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-ru/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Ansluter till Mullvads systemtjänst...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-sv/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">กำลังเชื่อมต่อบริการของระบบ Mullvad...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-th/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">Mullvad sistem hizmetlerine bağlanılıyor...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-tr/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="connecting_to_daemon">連線 Mullvad 系統服務中...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-zh-rTW/strings.xml" + line="36" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Opretter konto...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-da/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Konto wird erstellt ...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-de/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Luodaan tiliä...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fi/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Creazione account...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-it/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">アカウントを作成中...</string>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values-ja/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">계정 생성 중...</string>" + errorLine2=" ~~~~~~~~~~"> + <location + file="src/main/res/values-ko/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">အကောင့် ဖန်တီးနေဆဲ...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-my/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Oppretter konto ...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-nb/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Account aanmaken...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-nl/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Tworzenie konta...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pl/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">A criar conta...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Создание учетной записи...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-ru/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Skapar konto...</string>" + errorLine2=" ~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-sv/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">กำลังสร้างบัญชี...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-th/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="creating_new_account">Hesap oluşturuluyor...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-tr/strings.xml" + line="42" + column="41"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Sending...</string>" + errorLine2=" ~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="82" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Logger ind...</string>" + errorLine2=" ~~~~~~~~~~~~~"> + <location + file="src/main/res/values-da/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Anmeldung läuft...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-de/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Kirjaudutaan sisään...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fi/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Connexion...</string>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values-fr/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Accesso...</string>" + errorLine2=" ~~~~~~~~~~"> + <location + file="src/main/res/values-it/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">ログイン中...</string>" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/values-ja/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">로그인 중...</string>" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/values-ko/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">ဝင်ရောက်နေဆဲ...</string>" + errorLine2=" ~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-my/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Logger inn ...</string>" + errorLine2=" ~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-nb/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Aanmelden...</string>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values-nl/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Logowanie...</string>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values-pl/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">A iniciar sessão...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Выполняется вход...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-ru/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Loggar in...</string>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values-sv/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">กำลังเข้าสู่ระบบ...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-th/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">Oturum açılıyor...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-tr/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="logging_in_title">登入中...</string>" + errorLine2=" ~~~~~~"> + <location + file="src/main/res/values-zh-rTW/strings.xml" + line="88" + column="37"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Sender...</string>" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/values-da/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Wird gesendet...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-de/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Lähetetään...</string>" + errorLine2=" ~~~~~~~~~~~~~"> + <location + file="src/main/res/values-fi/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Envoi...</string>" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/values-fr/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Invio...</string>" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/values-it/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">送信中...</string>" + errorLine2=" ~~~~~~"> + <location + file="src/main/res/values-ja/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">전송 중...</string>" + errorLine2=" ~~~~~~~"> + <location + file="src/main/res/values-ko/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">ပို့နေဆဲ...</string>" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/values-my/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Sender ...</string>" + errorLine2=" ~~~~~~~~~~"> + <location + file="src/main/res/values-nb/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Verzenden...</string>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values-nl/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Wysyłanie...</string>" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/res/values-pl/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">A enviar...</string>" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/values-pt/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Идет отправка...</string>" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-ru/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Skicka...</string>" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/values-sv/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">กำลังส่ง...</string>" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/values-th/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">Gönderiliyor...</string>" + errorLine2=" ~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values-tr/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="TypographyEllipsis" + message="Replace "..." with ellipsis character (…, &#8230;) ?" + errorLine1=" <string name="sending">傳送中...</string>" + errorLine2=" ~~~~~~"> + <location + file="src/main/res/values-zh-rTW/strings.xml" + line="120" + column="28"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-hdpi`: banner.png (found in drawable-xhdpi)"> + <location + file="src/main/res/drawable-hdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-mdpi`: banner.png (found in drawable-xhdpi)"> + <location + file="src/main/res/drawable-mdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xxhdpi`: banner.png (found in drawable-xhdpi)"> + <location + file="src/main/res/drawable-xxhdpi"/> + </issue> + + <issue + id="TextFields" + message="This text field does not specify an `inputType`" + errorLine1=" <EditText android:id="@+id/login_input"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/account_input.xml" + line="2" + column="6"/> + </issue> + + <issue + id="TextFields" + message="This text field does not specify an `inputType`" + errorLine1=" <EditText android:id="@+id/input"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/edit_custom_dns_server.xml" + line="6" + column="6"/> + </issue> + + <issue + id="TextFields" + message="This text field does not specify an `inputType`" + errorLine1=" <EditText android:id="@+id/user_message"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="70" + column="26"/> + </issue> + + <issue + id="TextFields" + message="This text field does not specify an `inputType`" + errorLine1=" <EditText android:id="@+id/log_area"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/view_logs.xml" + line="28" + column="10"/> + </issue> + + <issue + id="Autofill" + message="Missing `autofillHints` attribute" + errorLine1=" <EditText android:id="@+id/login_input"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/account_input.xml" + line="2" + column="6"/> + </issue> + + <issue + id="Autofill" + message="Missing `autofillHints` attribute" + errorLine1=" <EditText android:id="@+id/input"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/edit_custom_dns_server.xml" + line="6" + column="6"/> + </issue> + + <issue + id="Autofill" + message="Missing `autofillHints` attribute" + errorLine1="<EditText xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/mtu_edit_text.xml" + line="1" + column="2"/> + </issue> + + <issue + id="Autofill" + message="Missing `autofillHints` attribute" + errorLine1=" <EditText android:id="@+id/user_email"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="60" + column="26"/> + </issue> + + <issue + id="Autofill" + message="Missing `autofillHints` attribute" + errorLine1=" <EditText android:id="@+id/user_message"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="70" + column="26"/> + </issue> + + <issue + id="Autofill" + message="Missing `autofillHints` attribute" + errorLine1=" <EditText android:id="@+id/voucher_code"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/redeem_voucher.xml" + line="19" + column="10"/> + </issue> + + <issue + id="Autofill" + message="Missing `autofillHints` attribute" + errorLine1=" <EditText android:id="@+id/log_area"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/view_logs.xml" + line="28" + column="10"/> + </issue> + + <issue + id="ClickableViewAccessibility" + message="Custom view `CellSwitch` overrides `onTouchEvent` but not `performClick`" + errorLine1=" override fun onTouchEvent(event: MotionEvent): Boolean {" + errorLine2=" ~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CellSwitch.kt" + line="174" + column="18"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/remove"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_history_entry.xml" + line="15" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/login_button"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_input.xml" + line="16" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/top_left_corner"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="3" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/top_right_corner"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="9" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/bottom_right_corner"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="16" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/bottom_left_corner"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="23" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/left_border"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="31" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/right_border"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="38" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/top_border"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="45" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/bottom_border"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="52" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/add"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="23" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/icon"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/app_list_item.xml" + line="20" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/image"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/button.xml" + line="16" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:layout_width="44dp"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/confirm_dns.xml" + line="11" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:layout_width="44dp"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/confirm_no_email.xml" + line="11" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/chevron"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/connect.xml" + line="89" + column="30"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/reconnect_button"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/connect.xml" + line="137" + column="26"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/remove"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="23" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/save"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/edit_custom_dns_server.xml" + line="21" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/appIcon"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/header_bar.xml" + line="6" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/appLogo"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/header_bar.xml" + line="14" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/settings"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/header_bar.xml" + line="25" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/settings"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/launch.xml" + line="5" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:layout_width="120dp"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/launch.xml" + line="19" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:layout_height="18dp"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/launch.xml" + line="22" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/logged_in_status"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/login.xml" + line="42" + column="18"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/login_fail_status"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/login.xml" + line="48" + column="18"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/notification_status"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="15" + column="10"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/notification_icon"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="43" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:layout_width="60dp"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/out_of_time.xml" + line="16" + column="14"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/sent_successfully_icon"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="110" + column="30"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/failed_to_send_icon"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="116" + column="30"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/relay_active"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="23" + column="14"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:id="@+id/selected"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="28" + column="14"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/chevron"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="46" + column="6"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/close"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/select_location.xml" + line="16" + column="14"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageButton android:id="@+id/close"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/settings.xml" + line="17" + column="14"/> + </issue> + + <issue + id="ContentDescription" + message="Missing `contentDescription` attribute on image" + errorLine1=" <ImageView android:layout_width="24dp"" + errorLine2=" ~~~~~~~~~"> + <location + file="src/main/res/layout/settings_back_button.xml" + line="2" + column="6"/> + </issue> + + <issue + id="LabelFor" + message="Missing accessibility label: provide either a view with an `android:labelFor` that references this view or provide an `android:hint`" + errorLine1=" <EditText android:id="@+id/log_area"" + errorLine2=" ~~~~~~~~"> + <location + file="src/main/res/layout/view_logs.xml" + line="28" + column="10"/> + </issue> + + <issue + id="SetTextI18n" + message="Do not concatenate text displayed with `setText`. Use resource string with placeholders." + errorLine1=" informationDisplay.text = information.substring(0, maxLength) + "..."" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/InformationView.kt" + line="176" + column="43"/> + </issue> + + <issue + id="SetTextI18n" + message="Do not concatenate text displayed with `setText`. Use resource string with placeholders." + errorLine1=" inAddress.text = context.getString(R.string.in_address) + " $host:$port $protocol"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/LocationInfo.kt" + line="118" + column="30"/> + </issue> + + <issue + id="SetTextI18n" + message="Do not concatenate text displayed with `setText`. Use resource string with placeholders." + errorLine1=" inAddress.text = context.getString(R.string.in_address) + " $host:$port $protocol"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/LocationInfo.kt" + line="118" + column="71"/> + </issue> + + <issue + id="SetTextI18n" + message="Do not concatenate text displayed with `setText`. Use resource string with placeholders." + errorLine1=" outAddress.text = context.getString(R.string.out_address) + " $ipAddress"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/LocationInfo.kt" + line="140" + column="31"/> + </issue> + + <issue + id="SetTextI18n" + message="Do not concatenate text displayed with `setText`. Use resource string with placeholders." + errorLine1=" outAddress.text = context.getString(R.string.out_address) + " $ipAddress"" + errorLine2=" ~~~~~~~~~~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/LocationInfo.kt" + line="140" + column="73"/> + </issue> + + <issue + id="RtlSymmetry" + message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry" + errorLine1=" android:paddingRight="@dimen/cell_inner_spacing"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="41" + column="19"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`Gravity.END`" instead of "`Gravity.RIGHT`" to ensure correct behavior in right-to-left locales" + errorLine1=" gravity = Gravity.RIGHT" + errorLine2=" ~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountCell.kt" + line="23" + column="27"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`Gravity.END`" instead of "`Gravity.RIGHT`" to ensure correct behavior in right-to-left locales" + errorLine1=" gravity = Gravity.RIGHT" + errorLine2=" ~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AccountCell.kt" + line="23" + column="27"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`Gravity.END`" instead of "`Gravity.RIGHT`" to ensure correct behavior in right-to-left locales" + errorLine1=" gravity = Gravity.RIGHT" + errorLine2=" ~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AppVersionCell.kt" + line="29" + column="27"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`Gravity.END`" instead of "`Gravity.RIGHT`" to ensure correct behavior in right-to-left locales" + errorLine1=" gravity = Gravity.RIGHT" + errorLine2=" ~~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/AppVersionCell.kt" + line="29" + column="27"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`Gravity.START`" instead of "`Gravity.LEFT`" to ensure correct behavior in right-to-left locales" + errorLine1=" gravity = Gravity.CENTER_VERTICAL or Gravity.LEFT" + errorLine2=" ~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/BackButton.kt" + line="45" + column="54"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`Gravity.START`" instead of "`Gravity.LEFT`" to ensure correct behavior in right-to-left locales" + errorLine1=" gravity = Gravity.CENTER_VERTICAL or Gravity.LEFT" + errorLine2=" ~~~~"> + <location + file="src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/BackButton.kt" + line="45" + column="54"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/account.xml" + line="6" + column="31"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:layout_gravity="right"" + errorLine2=" ~~~~~"> + <location + file="src/main/res/layout/account_history_entry.xml" + line="18" + column="42"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="7" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="13" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="20" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="27" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="34" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="41" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toLeftOf` with `android:layout_toStartOf="@id/top_right_corner"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@id/top_right_corner"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="48" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toRightOf` with `android:layout_toEndOf="@id/top_left_corner"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/top_left_corner"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="49" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toLeftOf` with `android:layout_toStartOf="@id/bottom_right_corner"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@id/bottom_right_corner"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="55" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toRightOf` with `android:layout_toEndOf="@id/bottom_left_corner"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/bottom_left_corner"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/account_login_border.xml" + line="56" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="54dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="54dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="8" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="18" + column="11"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="19" + column="11"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:layout_gravity="right"" + errorLine2=" ~~~~~"> + <location + file="src/main/res/layout/add_custom_dns_server.xml" + line="26" + column="42"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/advanced.xml" + line="6" + column="31"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/advanced_header.xml" + line="6" + column="32"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="@dimen/side_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="@dimen/side_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/advanced_header.xml" + line="11" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginRight` with `android:layout_marginEnd="4dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="4dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/app_list_item.xml" + line="14" + column="18"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginRight` with `android:layout_marginEnd="4dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="4dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/app_list_item.xml" + line="24" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:layout_gravity="right|center_vertical"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/button.xml" + line="10" + column="42"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:layout_gravity="right|center_vertical"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/button.xml" + line="20" + column="40"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/confirm_dns.xml" + line="10" + column="36"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/confirm_no_email.xml" + line="10" + column="36"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="1dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="1dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/connect.xml" + line="140" + column="38"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="54dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="54dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="9" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="18" + column="11"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="19" + column="11"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:layout_gravity="right"" + errorLine2=" ~~~~~"> + <location + file="src/main/res/layout/custom_dns_server.xml" + line="26" + column="42"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="54dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="54dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/edit_custom_dns_server.xml" + line="10" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:layout_gravity="right"" + errorLine2=" ~~~~~"> + <location + file="src/main/res/layout/edit_custom_dns_server.xml" + line="25" + column="42"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:layout_gravity="top | right"" + errorLine2=" ~~~~~~~~~~~"> + <location + file="src/main/res/layout/launch.xml" + line="8" + column="42"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:paddingLeft` with `android:paddingStart="16dp"` to better support right-to-left layouts" + errorLine1=" android:paddingLeft="16dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="5" + column="17"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:paddingRight` with `android:paddingEnd="12dp"` to better support right-to-left layouts" + errorLine1=" android:paddingRight="12dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="6" + column="17"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="13" + column="21"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toLeftOf` with `android:layout_toStartOf="@id/notification_icon"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@id/notification_icon"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="25" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toRightOf` with `android:layout_toEndOf="@id/notification_status_container"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/notification_status_container"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="26" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="7dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="7dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="27" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toLeftOf` with `android:layout_toStartOf="@id/notification_icon"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@id/notification_icon"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="36" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignLeft` with `android:layout_alignStart="@id/notification_title"` to better support right-to-left layouts" + errorLine1=" android:layout_alignLeft="@id/notification_title"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="37" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/notification_banner.xml" + line="46" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/preferences.xml" + line="6" + column="31"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="@dimen/side_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="@dimen/side_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/preferences.xml" + line="41" + column="27"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/problem_report.xml" + line="6" + column="31"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/redeem_voucher.xml" + line="11" + column="36"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="12" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="13" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentLeft="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="20" + column="22"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="@dimen/country_row_padding"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="@dimen/country_row_padding">" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="22" + column="22"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="39" + column="19"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_toRightOf` with `android:layout_toEndOf="@id/status"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/status"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/relay_list_item.xml" + line="40" + column="19"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/select_location.xml" + line="5" + column="31"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/select_location_header.xml" + line="5" + column="32"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/settings.xml" + line="6" + column="31"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="@dimen/side_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="@dimen/side_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/settings.xml" + line="42" + column="27"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginRight` with `android:layout_marginEnd="8dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="8dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/settings_back_button.xml" + line="4" + column="16"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/split_tunneling.xml" + line="6" + column="31"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left">" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="6" + column="32"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="@dimen/side_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="@dimen/side_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="11" + column="15"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:paddingLeft` with `android:paddingStart="@dimen/cell_left_padding"` to better support right-to-left layouts" + errorLine1=" android:paddingLeft="@dimen/cell_left_padding"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="33" + column="19"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:paddingRight` with `android:paddingEnd="@dimen/cell_right_padding"` to better support right-to-left layouts" + errorLine1=" android:paddingRight="@dimen/cell_right_padding"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="34" + column="19"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:paddingRight` with `android:paddingEnd="@dimen/cell_inner_spacing"` to better support right-to-left layouts" + errorLine1=" android:paddingRight="@dimen/cell_inner_spacing"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/split_tunneling_header.xml" + line="41" + column="19"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider replacing `android:drawableRight` with `android:drawableEnd="@drawable/icon_chevron"` to better support right-to-left layouts" + errorLine1=" android:drawableRight="@drawable/icon_chevron"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/switch_location_button.xml" + line="11" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales" + errorLine1=" android:gravity="left"" + errorLine2=" ~~~~"> + <location + file="src/main/res/layout/view_logs.xml" + line="6" + column="32"/> + </issue> + + <issue + id="RtlEnabled" + message="The project references RTL attributes, but does not explicitly enable or disable RTL support with `android:supportsRtl` in the manifest"> + <location + file="src/main/AndroidManifest.xml"/> + </issue> + +</issues> |
