summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2023-12-08 14:57:14 +0100
committerMichael Weghorn <m.weghorn@posteo.de>2023-12-13 10:50:26 +0100
commit6b788f8baf4c6ba42dc6c0f580fbf9480d8c60d3 (patch)
tree913ea208dc6fbbb782ed88abbcfb5c0d70d19ca3 /android
parent5757588c44218d720d912410c54338d29e2ce0e5 (diff)
android: Make the build fail on new lint warnings
In order to avoid introducing new lint errors, also run the `lint<buildVariant>` gradle target when building Android Viewer and set the `warningsAsErrors true` lint option. This makes the build fail on (new) lint errors. See [1] for more details. Downgrade missing translations and issues that can "suddenly" appear without any code changes to the app itself to informational, to prevent (CI) builds from suddenly starting to fail just because a new Android Gradle Plugin version or external library becomes available etc. To be able to avoid introducing new issues without having to address all existing ones right now, use a baseline file ("lint-baseline.xml") as described at [2] which lists all existing issues, so they don't result in a failing build. Those should still be looked into at some point. Updating the baseline file can be done by just removing the existing one and running the build again. (Build will create the new baseline file and fail on first run after deleting the file, then find the new file and succeed in subsequent builds.) [1] https://developer.android.com/studio/write/lint [2] https://developer.android.com/studio/write/lint#customize-the-baseline Change-Id: Iddbe432519ab3040c83c0e977a584b51d3ef1e5b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160199 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Diffstat (limited to 'android')
-rw-r--r--android/source/Makefile5
-rw-r--r--android/source/build.gradle10
-rw-r--r--android/source/lint-baseline.xml2649
3 files changed, 2660 insertions, 4 deletions
diff --git a/android/source/Makefile b/android/source/Makefile
index 32b233c74a4c..2c1d6f9f1cca 100644
--- a/android/source/Makefile
+++ b/android/source/Makefile
@@ -3,11 +3,12 @@ gb_Side:=host
include ../../config_host.mk
endif
-# The default target just builds.
+# The default target builds the APK and runs lint.
all: build-gradle
DISABLE_UI=TRUE
+BUILD_VARIANT=$(if $(DISABLE_UI),StrippedUI,FullUI)$(if $(ENABLE_ANDROID_EDITING),Editing)$(if $(ENABLE_RELEASE_BUILD),Release,Debug)
BOOTSTRAPDIR=../Bootstrap
include $(BOOTSTRAPDIR)/Makefile.shared
@@ -29,7 +30,7 @@ clean:
build-gradle: liboSettings.gradle local.properties link-so
ifeq ($(ENABLE_JAVA),TRUE)
- if test "$$ENABLE_ANDROID_LOK" != "TRUE" ; then ./gradlew $(if $(verbose),--info) $(if $(versionCode),-PcmdVersionCode=$(versionCode)) assemble$(if $(DISABLE_UI),StrippedUI,FullUI)$(if $(ENABLE_ANDROID_EDITING),Editing)$(if $(ENABLE_RELEASE_BUILD),Release,Debug) ; fi
+ if test "$$ENABLE_ANDROID_LOK" != "TRUE" ; then ./gradlew $(if $(verbose),--info) $(if $(versionCode),-PcmdVersionCode=$(versionCode)) assemble$(BUILD_VARIANT) lint$(BUILD_VARIANT) ; fi
endif
run:
diff --git a/android/source/build.gradle b/android/source/build.gradle
index eed27bef4e54..0160aa8ffe87 100644
--- a/android/source/build.gradle
+++ b/android/source/build.gradle
@@ -89,8 +89,14 @@ android {
fullUI.dimension "default"
}
lint {
- // don't error-out on missing translations
- warning 'MissingTranslation'
+ warningsAsErrors true
+ // don't error-out on missing translations or external updates (new gradle plugin,
+ // library versions or target API become available)
+ informational 'AndroidGradlePluginVersion', 'GradleDependency', 'MissingTranslation', 'NewerVersionAvailable', 'OldTargetApi'
+ // don't fail on pre-existing issues
+ // These should be dealt with at some point, though.
+ // To update lint-baseline.xml, just remove the file and run the build again.
+ baseline file("lint-baseline.xml")
}
}
diff --git a/android/source/lint-baseline.xml b/android/source/lint-baseline.xml
new file mode 100644
index 000000000000..b4c05e26dc6b
--- /dev/null
+++ b/android/source/lint-baseline.xml
@@ -0,0 +1,2649 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 8.2.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.2.0)" variant="all" version="8.2.0">
+
+ <issue
+ id="ScopedStorage"
+ message="WRITE_EXTERNAL_STORAGE is deprecated (and is not granted) when targeting Android 13+. If you need to write to shared storage, use the `MediaStore.createWriteRequest` intent."
+ errorLine1=" &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="AndroidManifest.xml"
+ line="10"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="ScrollViewSize"
+ message="This LinearLayout should use `android:layout_height=&quot;wrap_content&quot;`"
+ errorLine1=" android:layout_height=&quot;match_parent&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="311"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="ScrollViewSize"
+ message="This LinearLayout should use `android:layout_height=&quot;wrap_content&quot;`"
+ errorLine1=" android:layout_height=&quot;match_parent&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="378"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="CanvasSize"
+ message="Calling `Canvas.getWidth()` is usually wrong; you should be calling `getWidth()` instead"
+ errorLine1=" int horizontalMargin = (int) (canvas.getWidth()*0.1);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ui/PageView.java"
+ line="55"
+ column="43"/>
+ </issue>
+
+ <issue
+ id="CanvasSize"
+ message="Calling `Canvas.getWidth()` is usually wrong; you should be calling `getWidth()` instead"
+ errorLine1=" new Rect(horizontalMargin,verticalMargin,canvas.getWidth()-horizontalMargin,"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ui/PageView.java"
+ line="59"
+ column="62"/>
+ </issue>
+
+ <issue
+ id="CanvasSize"
+ message="Calling `Canvas.getHeight()` is usually wrong; you should be calling `getHeight()` instead"
+ errorLine1=" canvas.getHeight()-verticalMargin),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ui/PageView.java"
+ line="60"
+ column="25"/>
+ </issue>
+
+ <issue
+ id="CommitPrefEdits"
+ message="`SharedPreferences.edit()` without a corresponding `commit()` or `apply()` call"
+ errorLine1=" preferences.edit().putString(SELECTED_LANG, lang);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/LocaleHelper.java"
+ line="49"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="DefaultLocale"
+ message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+ errorLine1=" return String.format(&quot;TileIdentifier (%d, %d) z=%f s=(%d, %d)&quot;, x, y, zoom, size.width, size.height);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/TileIdentifier.java"
+ line="88"
+ column="16"/>
+ </issue>
+
+ <issue
+ id="AppBundleLocaleChanges"
+ message="Found dynamic locale changes, but did not find corresponding Play Core library calls for downloading languages and splitting by language is not disabled in the `bundle` configuration"
+ errorLine1=" cfg.locale = locale;"
+ errorLine2=" ~~~~~~">
+ <location
+ file="src/java/org/libreoffice/LocaleHelper.java"
+ line="40"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="InflateParams"
+ message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+ errorLine1=" final View headerPopupView = inflater.inflate(R.layout.calc_header_popup, null);"
+ errorLine2=" ~~~~">
+ <location
+ file="src/java/org/libreoffice/overlay/CalcHeadersController.java"
+ line="118"
+ column="87"/>
+ </issue>
+
+ <issue
+ id="InflateParams"
+ message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+ errorLine1=" view = layoutInflater.inflate(R.layout.document_part_list_layout, null);"
+ errorLine2=" ~~~~">
+ <location
+ file="src/java/org/libreoffice/DocumentPartViewListAdapter.java"
+ line="36"
+ column="79"/>
+ </issue>
+
+ <issue
+ id="QueryPermissionsNeeded"
+ message="Consider adding a `&lt;queries>` declaration to your manifest when calling this \&#xA;method; see https://g.co/dev/packagevisibility for details"
+ errorLine1=" if (takePictureIntent.resolveActivity(mContext.getPackageManager()) != null) {"
+ errorLine2=" ~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/FormattingController.java"
+ line="370"
+ column="31"/>
+ </issue>
+
+ <issue
+ id="QueryPermissionsNeeded"
+ message="Consider adding a `&lt;queries>` declaration to your manifest when calling this \&#xA;method; see https://g.co/dev/packagevisibility for details"
+ errorLine1=" .queryIntentActivities(takePictureIntent, PackageManager.MATCH_DEFAULT_ONLY);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/FormattingController.java"
+ line="386"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="UnsupportedChromeOsCameraSystemFeature"
+ message="You should look for any camera available on the device, not just the rear"
+ errorLine1=" if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/FormattingController.java"
+ line="363"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="PrivateResource"
+ message="The resource `@drawable/ic_keyboard_black_24dp` is marked as private in com.google.android.material:material:1.10.0"
+ errorLine1=" android:src=&quot;@drawable/ic_keyboard_black_24dp&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable-hdpi/ic_keyboard.xml"
+ line="4"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="SpUsage"
+ message="Should use &quot;`sp`&quot; instead of &quot;`dp`&quot; for text sizes"
+ errorLine1=" android:textSize=&quot;14dp&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="77"
+ column="21"/>
+ </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(&quot;bar&quot;, &quot;foo&quot;, null)`)."
+ errorLine1=" int resourceID = resources.getIdentifier(name, &quot;drawable&quot;, packageName);"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/mozilla/gecko/gfx/LayerView.java"
+ line="227"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;about_privacy_policy&quot; is not translated in &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;about_privacy_policy&quot;>Privacy Policy&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="16"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;create_file&quot; is not translated in &quot;de&quot; (German) or &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;create_file&quot;>Create New File&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="18"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;select_file_to_open&quot; is not translated in &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;select_file_to_open&quot;>Select file to open&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="25"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;search_find_next&quot; is not translated in &quot;de&quot; (German) or &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;search_find_next&quot;>Find Next&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="30"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;search_find_previous&quot; is not translated in &quot;de&quot; (German) or &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;search_find_previous&quot;>Find Previous&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="31"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;action_save_as&quot; is not translated in &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;action_save_as&quot;>Save As...&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="53"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;message_saving_failed&quot; is not translated in &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;message_saving_failed&quot;>Saving the document failed.&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="61"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;pdf_export_finished&quot; is not translated in &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;pdf_export_finished&quot;>PDF export finished&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="158"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;unable_to_save&quot; is not translated in &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;unable_to_save&quot;>Unable to save file&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="160"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="MissingTranslation"
+ message="&quot;automatic&quot; is not translated in &quot;tr&quot; (Turkish)"
+ errorLine1=" &lt;string name=&quot;automatic&quot;>Automatic&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="172"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="SetJavaScriptEnabled"
+ message="Using `setJavaScriptEnabled` can introduce XSS vulnerabilities into your application, review carefully"
+ errorLine1=" mWebView.getSettings().setJavaScriptEnabled(true);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/PresentationActivity.java"
+ line="39"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="DrawAllocation"
+ message="Avoid object allocations during draw/layout operations (preallocate and reuse instead)"
+ errorLine1=" mLayerClient.setViewportSize(new FloatSize(right - left, bottom - top), true);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/mozilla/gecko/gfx/LayerView.java"
+ line="293"
+ column="42"/>
+ </issue>
+
+ <issue
+ id="DrawAllocation"
+ message="Avoid object allocations during draw/layout operations (preallocate and reuse instead)"
+ errorLine1=" canvas.drawBitmap(bmp, new Rect(0, 0, bmp.getWidth(), bmp.getHeight()),"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ui/PageView.java"
+ line="58"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="DrawAllocation"
+ message="Avoid object allocations during draw/layout operations (preallocate and reuse instead)"
+ errorLine1=" new Rect(horizontalMargin,verticalMargin,canvas.getWidth()-horizontalMargin,"
+ errorLine2=" ^">
+ <location
+ file="src/java/org/libreoffice/ui/PageView.java"
+ line="59"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="DrawAllocation"
+ message="Avoid object allocations during draw/layout operations (preallocate and reuse instead)"
+ errorLine1=" canvas.drawText(getContext().getString(R.string.bmp_null), 100, 100, new Paint());"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ui/PageView.java"
+ line="64"
+ column="82"/>
+ </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=" ColorPaletteAdapter.this.notifyDataSetChanged();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ColorPaletteAdapter.java"
+ line="118"
+ column="17"/>
+ </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=" ColorPickerAdapter.this.notifyDataSetChanged();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ColorPickerAdapter.java"
+ line="147"
+ column="17"/>
+ </issue>
+
+ <issue
+ id="ObsoleteLayoutParam"
+ message="Invalid layout param in a `ScrollView`: `layout_weight`"
+ errorLine1=" android:layout_weight=&quot;0.25&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="312"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="ObsoleteLayoutParam"
+ message="Invalid layout param in a `ScrollView`: `layout_weight`"
+ errorLine1=" android:layout_weight=&quot;0.5&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="379"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="ObsoleteLayoutParam"
+ message="Invalid layout param in a `LinearLayout`: `layout_below`"
+ errorLine1=" android:layout_below=&quot;@id/fontColorView&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_color_picker.xml"
+ line="63"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="ObsoleteLayoutParam"
+ message="Invalid layout param in a `LinearLayout`: `layout_alignParentBottom`"
+ errorLine1=" android:layout_alignParentBottom=&quot;true&quot;>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_color_picker.xml"
+ line="64"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="ObsoleteSdkInt"
+ message="Unnecessary; SDK_INT is always >= 19"
+ errorLine1="@TargetApi(19)"
+ errorLine2="~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/PDFDocumentAdapter.java"
+ line="20"
+ column="1"/>
+ </issue>
+
+ <issue
+ id="UseCompoundDrawables"
+ message="This tag and its children can be replaced by one `&lt;TextView/>` and a compound drawable"
+ errorLine1="&lt;LinearLayout"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="res/layout/document_part_list_layout.xml"
+ line="2"
+ column="2"/>
+ </issue>
+
+ <issue
+ id="VectorPath"
+ message="Very long vector path (871 characters), which is bad for performance. Considering reducing precision, removing minor details or rasterizing vector."
+ errorLine1=" android:pathData=&quot;M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z&quot;/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/drawable/ic_settings_24dp.xml"
+ line="8"
+ column="27"/>
+ </issue>
+
+ <issue
+ id="InefficientWeight"
+ message="Use a `layout_height` of `0dp` instead of `wrap_content` for better performance"
+ errorLine1=" android:layout_height=&quot;wrap_content&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="73"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="InefficientWeight"
+ message="Use a `layout_height` of `0dp` instead of `match_parent` for better performance"
+ errorLine1=" android:layout_height=&quot;match_parent&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="66"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="NestedWeights"
+ message="Nested weights are bad for performance"
+ errorLine1=" android:layout_weight=&quot;0.25&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="74"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="Overdraw"
+ message="Possible overdraw: Root element paints background `#fff` with a theme that also paints a background (inferred theme is `@style/LibreOfficeTheme`)"
+ errorLine1=" android:background=&quot;#fff&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_main.xml"
+ line="8"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="Overdraw"
+ message="Possible overdraw: Root element paints background `@color/doorhanger_background_dark` with a theme that also paints a background (inferred theme is `@style/LibreOfficeTheme`)"
+ errorLine1=" android:background=&quot;@color/doorhanger_background_dark&quot;>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/calc_header_popup.xml"
+ line="5"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="Overdraw"
+ message="Possible overdraw: Root element paints background `#aaa` with a theme that also paints a background (inferred theme is `@style/LibreOfficeTheme`)"
+ errorLine1=" android:background=&quot;#aaa&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/main.xml"
+ line="12"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="Overdraw"
+ message="Possible overdraw: Root element paints background `?attr/colorPrimary` with a theme that also paints a background (inferred theme is `@style/LibreOfficeTheme`)"
+ errorLine1=" android:background=&quot;?attr/colorPrimary&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="10"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="Overdraw"
+ message="Possible overdraw: Root element paints background `?attr/colorPrimary` with a theme that also paints a background (inferred theme is `@style/LibreOfficeTheme`)"
+ errorLine1=" android:background=&quot;?attr/colorPrimary&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_color_picker.xml"
+ line="9"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.background` appears to be unused">
+ <location
+ file="res/drawable-mdpi/background.png"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.background_light` appears to be unused"
+ errorLine1=" &lt;color name=&quot;background_light&quot;>#FAFAFA&lt;/color> &lt;!--Material Grey 50-->"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="12"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.background_normal` appears to be unused"
+ errorLine1=" &lt;color name=&quot;background_normal&quot;>#F5F5F5&lt;/color> &lt;!--Material Grey 100-->"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="13"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.background_private` appears to be unused"
+ errorLine1=" &lt;color name=&quot;background_private&quot;>#FF292C29&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="14"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.background_tabs` appears to be unused"
+ errorLine1=" &lt;color name=&quot;background_tabs&quot;>#FF363B40&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="15"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight&quot;>#33000000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="16"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_focused` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_focused&quot;>#1A000000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="17"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_dark` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_dark&quot;>#33FFFFFF&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="18"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_dark_focused` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_dark_focused&quot;>#1AFFFFFF&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="19"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_shaped` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_shaped&quot;>#FF696D71&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="22"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_shaped_focused` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_shaped_focused&quot;>#FF565B60&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="25"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_nav` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_nav&quot;>#FFA5ACB2&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="28"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_nav_focused` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_nav_focused&quot;>#FFB9C1C7&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="31"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_nav_pb` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_nav_pb&quot;>#FF545654&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="34"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.highlight_nav_focused_pb` appears to be unused"
+ errorLine1=" &lt;color name=&quot;highlight_nav_focused_pb&quot;>#FF3F423F&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="37"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_primary` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_primary&quot;>#222222&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="43"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_secondary` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_secondary&quot;>#777777&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="44"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_tertiary` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_tertiary&quot;>#9198A1&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="45"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_primary_inverse` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_primary_inverse&quot;>#FFFFFF&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="48"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_secondary_inverse` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_secondary_inverse&quot;>#DDDDDD&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="49"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_tertiary_inverse` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_tertiary_inverse&quot;>#A4A7A9&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="50"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_primary_disable_only` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_primary_disable_only&quot;>#999999&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="53"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_hint` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_hint&quot;>#666666&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="56"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_hint_inverse` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_hint_inverse&quot;>#7F828A&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="57"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_highlight` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_highlight&quot;>#FF9500&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="60"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_highlight_inverse` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_highlight_inverse&quot;>#D06BFF&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="61"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.text_color_link` appears to be unused"
+ errorLine1=" &lt;color name=&quot;text_color_link&quot;>#22629E&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="64"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.splash_background` appears to be unused"
+ errorLine1=" &lt;color name=&quot;splash_background&quot;>#000000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="66"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.splash_msgfont` appears to be unused"
+ errorLine1=" &lt;color name=&quot;splash_msgfont&quot;>#ffffff&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="67"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.splash_urlfont` appears to be unused"
+ errorLine1=" &lt;color name=&quot;splash_urlfont&quot;>#000000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="68"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.splash_content` appears to be unused"
+ errorLine1=" &lt;color name=&quot;splash_content&quot;>#ffffff&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="69"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.doorhanger_text` appears to be unused"
+ errorLine1=" &lt;color name=&quot;doorhanger_text&quot;>#FF222222&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="71"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.doorhanger_link` appears to be unused"
+ errorLine1=" &lt;color name=&quot;doorhanger_link&quot;>#FF2AA1FE&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="72"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.doorhanger_divider_dark` appears to be unused"
+ errorLine1=" &lt;color name=&quot;doorhanger_divider_dark&quot;>#FFB3C2CE&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="74"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.validation_message_text` appears to be unused"
+ errorLine1=" &lt;color name=&quot;validation_message_text&quot;>#ffffff&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="77"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.url_bar_text_highlight` appears to be unused"
+ errorLine1=" &lt;color name=&quot;url_bar_text_highlight&quot;>#FFFF9500&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="78"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.url_bar_text_highlight_pb` appears to be unused"
+ errorLine1=" &lt;color name=&quot;url_bar_text_highlight_pb&quot;>#FFD06BFF&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="79"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.suggestion_primary` appears to be unused"
+ errorLine1=" &lt;color name=&quot;suggestion_primary&quot;>#dddddd&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="80"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.suggestion_pressed` appears to be unused"
+ errorLine1=" &lt;color name=&quot;suggestion_pressed&quot;>#bbbbbb&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="81"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.tab_row_pressed` appears to be unused"
+ errorLine1=" &lt;color name=&quot;tab_row_pressed&quot;>#4D000000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="82"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.dialogtitle_textcolor` appears to be unused"
+ errorLine1=" &lt;color name=&quot;dialogtitle_textcolor&quot;>#ffffff&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="83"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.textbox_background` appears to be unused"
+ errorLine1=" &lt;color name=&quot;textbox_background&quot;>#FFF&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="85"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.textbox_background_disabled` appears to be unused"
+ errorLine1=" &lt;color name=&quot;textbox_background_disabled&quot;>#DDD&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="86"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.textbox_stroke` appears to be unused"
+ errorLine1=" &lt;color name=&quot;textbox_stroke&quot;>#000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="87"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.textbox_stroke_disabled` appears to be unused"
+ errorLine1=" &lt;color name=&quot;textbox_stroke_disabled&quot;>#666&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="88"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.url_bar_urltext` appears to be unused"
+ errorLine1=" &lt;color name=&quot;url_bar_urltext&quot;>#A6A6A6&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="90"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.url_bar_domaintext` appears to be unused"
+ errorLine1=" &lt;color name=&quot;url_bar_domaintext&quot;>#000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="91"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.url_bar_domaintext_private` appears to be unused"
+ errorLine1=" &lt;color name=&quot;url_bar_domaintext_private&quot;>#FFF&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="92"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.url_bar_blockedtext` appears to be unused"
+ errorLine1=" &lt;color name=&quot;url_bar_blockedtext&quot;>#b14646&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="93"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.url_bar_shadow` appears to be unused"
+ errorLine1=" &lt;color name=&quot;url_bar_shadow&quot;>#12000000&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="94"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.home_last_tab_bar_bg` appears to be unused"
+ errorLine1=" &lt;color name=&quot;home_last_tab_bar_bg&quot;>#FFF5F7F9&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="96"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.color.panel_grid_item_image_background` appears to be unused"
+ errorLine1=" &lt;color name=&quot;panel_grid_item_image_background&quot;>#D1D9E1&lt;/color>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/colors.xml"
+ line="98"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.dimen.activity_horizontal_margin` appears to be unused"
+ errorLine1=" &lt;dimen name=&quot;activity_horizontal_margin&quot;>16dp&lt;/dimen>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/dimens.xml"
+ line="3"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.dimen.activity_vertical_margin` appears to be unused"
+ errorLine1=" &lt;dimen name=&quot;activity_vertical_margin&quot;>16dp&lt;/dimen>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/dimens.xml"
+ line="4"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.dimen.text_selection_handle_width` appears to be unused"
+ errorLine1=" &lt;dimen name=&quot;text_selection_handle_width&quot;>30dp&lt;/dimen>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/dimens.xml"
+ line="5"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.dimen.text_selection_handle_height` appears to be unused"
+ errorLine1=" &lt;dimen name=&quot;text_selection_handle_height&quot;>44dp&lt;/dimen>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/dimens.xml"
+ line="6"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.dimen.text_selection_handle_shadow` appears to be unused"
+ errorLine1=" &lt;dimen name=&quot;text_selection_handle_shadow&quot;>2dp&lt;/dimen>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/dimens.xml"
+ line="7"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.dimen.file_icon_width` appears to be unused"
+ errorLine1=" &lt;dimen name=&quot;file_icon_width&quot;>32dp&lt;/dimen>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/dimens.xml"
+ line="10"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.layout.document_viewer` appears to be unused"
+ errorLine1="&lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+ errorLine2="^">
+ <location
+ file="res/layout/document_viewer.xml"
+ line="8"
+ column="1"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.ic_menu` appears to be unused"
+ errorLine1="&lt;bitmap xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+ errorLine2="^">
+ <location
+ file="res/drawable-hdpi/ic_menu.xml"
+ line="3"
+ column="1"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.ic_menu_black_24dp` appears to be unused">
+ <location
+ file="res/drawable-xxxhdpi/ic_menu_black_24dp.png"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.ic_settings_24dp` appears to be unused"
+ errorLine1="&lt;vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+ errorLine2="^">
+ <location
+ file="res/drawable/ic_settings_24dp.xml"
+ line="1"
+ column="1"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.ic_sort_24dp` appears to be unused"
+ errorLine1="&lt;vector android:autoMirrored=&quot;true&quot; android:height=&quot;24dp&quot;"
+ errorLine2="^">
+ <location
+ file="res/drawable/ic_sort_24dp.xml"
+ line="9"
+ column="1"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.light_view_as_grid` appears to be unused">
+ <location
+ file="res/drawable-hdpi/light_view_as_grid.png"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.light_view_as_list` appears to be unused">
+ <location
+ file="res/drawable-hdpi/light_view_as_list.png"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.layout.main` appears to be unused"
+ errorLine1="&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+ errorLine2="^">
+ <location
+ file="res/layout/main.xml"
+ line="9"
+ column="1"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.drawable.shadow` appears to be unused">
+ <location
+ file="res/drawable-mdpi/shadow.png"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.app_about_name` appears to be unused"
+ errorLine1=" &lt;string name=&quot;app_about_name&quot;>&lt;b>LibreOffice Viewer \&apos;Beta\&apos;&lt;/b>&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="7"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.browser_app_name` appears to be unused"
+ errorLine1=" &lt;string name=&quot;browser_app_name&quot;>LibreOffice Browser&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="27"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.menu_search` appears to be unused"
+ errorLine1=" &lt;string name=&quot;menu_search&quot;>Search&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="28"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.search_not_found` appears to be unused"
+ errorLine1=" &lt;string name=&quot;search_not_found&quot;>Keyword not found&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="29"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.menu_preferences` appears to be unused"
+ errorLine1=" &lt;string name=&quot;menu_preferences&quot;>Preferences&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="32"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.action_bold` appears to be unused"
+ errorLine1=" &lt;string name=&quot;action_bold&quot;>Bold&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="47"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.action_underline` appears to be unused"
+ errorLine1=" &lt;string name=&quot;action_underline&quot;>Underline&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="48"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.action_italic` appears to be unused"
+ errorLine1=" &lt;string name=&quot;action_italic&quot;>Italic&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="49"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.action_strikeout` appears to be unused"
+ errorLine1=" &lt;string name=&quot;action_strikeout&quot;>Strike Out&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="50"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.message_save_incomplete` appears to be unused"
+ errorLine1=" &lt;string name=&quot;message_save_incomplete&quot;>Save incomplete. Were there any changes?&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="62"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.alert_copy_svg_slide_show_to_clipboard` appears to be unused"
+ errorLine1=" &lt;string name=&quot;alert_copy_svg_slide_show_to_clipboard&quot;>Your Android device doesn\&apos;t support in-app svg slideshow. We copied the slideshow link to clipboard. Please press home button, open a modern web browser, paste in the address bar, and go.&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="77"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.alert_copy_svg_slide_show_to_clipboard_dismiss` appears to be unused"
+ errorLine1=" &lt;string name=&quot;alert_copy_svg_slide_show_to_clipboard_dismiss&quot;>OK&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="78"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.unable_to_go_further` appears to be unused"
+ errorLine1=" &lt;string name=&quot;unable_to_go_further&quot;>Unable to go further.&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="154"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.string.directory_not_saved` appears to be unused"
+ errorLine1=" &lt;string name=&quot;directory_not_saved&quot;>Directory not saved.&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="164"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.layout.text_selection_handles` appears to be unused"
+ errorLine1="&lt;merge xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+ errorLine2="^">
+ <location
+ file="res/layout/text_selection_handles.xml"
+ line="6"
+ column="1"/>
+ </issue>
+
+ <issue
+ id="UnusedResources"
+ message="The resource `R.style.LibreOfficeTheme_NavigationView` appears to be unused"
+ errorLine1=" &lt;style name=&quot;LibreOfficeTheme.NavigationView&quot;>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values/themes.xml"
+ line="17"
+ column="12"/>
+ </issue>
+
+ <issue
+ id="UselessParent"
+ message="This `ScrollView` layout or its `LinearLayout` parent is unnecessary"
+ errorLine1=" &lt;ScrollView"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="55"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="UselessParent"
+ message="This `ScrollView` layout or its `LinearLayout` parent is unnecessary"
+ errorLine1=" &lt;ScrollView"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="193"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="UselessParent"
+ message="This `ScrollView` layout or its `LinearLayout` parent is unnecessary"
+ errorLine1=" &lt;ScrollView"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="305"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="UselessParent"
+ message="This `ScrollView` layout or its `LinearLayout` parent is unnecessary"
+ errorLine1=" &lt;ScrollView"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="373"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="RedundantNamespace"
+ message="This namespace declaration is redundant"
+ errorLine1="&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/about.xml"
+ line="6"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="TooDeepLayout"
+ message="`toolbar_bottom.xml` has more than 10 levels, bad for performance"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="70"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="UnusedNamespace"
+ message="Unused namespace declaration xmlns:android; already declared on the root element"
+ errorLine1="&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/about.xml"
+ line="6"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="TypographyEllipsis"
+ message="Replace &quot;...&quot; with ellipsis character (…, &amp;#8230;) ?"
+ errorLine1=" &lt;string name=&quot;action_save_as&quot;>Speichern unter...&lt;/string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values-de/strings.xml"
+ line="50"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="TypographyEllipsis"
+ message="Replace &quot;...&quot; with ellipsis character (…, &amp;#8230;) ?"
+ errorLine1=" &lt;string name=&quot;action_save_as&quot;>Save As...&lt;/string>"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="res/values/strings.xml"
+ line="53"
+ column="35"/>
+ </issue>
+
+ <issue
+ id="IconLocation"
+ message="Found bitmap drawable `res/drawable/calc.png` in densityless folder">
+ <location
+ file="res/drawable/calc.png"/>
+ </issue>
+
+ <issue
+ id="IconLocation"
+ message="Found bitmap drawable `res/drawable/draw.png` in densityless folder">
+ <location
+ file="res/drawable/draw.png"/>
+ </issue>
+
+ <issue
+ id="IconLocation"
+ message="Found bitmap drawable `res/drawable/dummy_page.png` in densityless folder">
+ <location
+ file="res/drawable/dummy_page.png"/>
+ </issue>
+
+ <issue
+ id="IconLocation"
+ message="Found bitmap drawable `res/drawable/impress.png` in densityless folder">
+ <location
+ file="res/drawable/impress.png"/>
+ </issue>
+
+ <issue
+ id="IconLocation"
+ message="Found bitmap drawable `res/drawable/writer.png` in densityless folder">
+ <location
+ file="res/drawable/writer.png"/>
+ </issue>
+
+ <issue
+ id="IconDensities"
+ message="Missing the following drawables in `drawable-hdpi`: background.png, decrementindent.png, handle_image_end.png, handle_image_middle.png, handle_image_start.png... (22 more)">
+ <location
+ file="res/drawable-hdpi"/>
+ </issue>
+
+ <issue
+ id="IconDensities"
+ message="Missing the following drawables in `drawable-mdpi`: decrementindent.png, handle_alias_end.xml, handle_alias_middle.xml, handle_alias_start.xml, handle_image_end.png... (33 more)">
+ <location
+ file="res/drawable-mdpi"/>
+ </issue>
+
+ <issue
+ id="IconDensities"
+ message="Missing the following drawables in `drawable-xhdpi`: background.png, decrementindent.png, handle_alias_end.xml, handle_alias_middle.xml, handle_alias_start.xml... (32 more)">
+ <location
+ file="res/drawable-xhdpi"/>
+ </issue>
+
+ <issue
+ id="IconMissingDensityFolder"
+ message="Missing density variation folders in `res`: drawable-xxhdpi">
+ <location
+ file="res"/>
+ </issue>
+
+ <issue
+ id="AlwaysShowAction"
+ message="Prefer &quot;`ifRoom`&quot; instead of &quot;`always`&quot;"
+ errorLine1=" app:showAsAction=&quot;always&quot;/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/menu/main.xml"
+ line="14"
+ column="15"/>
+ <location
+ file="res/menu/main.xml"
+ line="20"
+ column="15"/>
+ <location
+ file="res/menu/main.xml"
+ line="26"
+ column="15"/>
+ <location
+ file="res/menu/main.xml"
+ line="32"
+ column="13"/>
+ <location
+ file="res/menu/main.xml"
+ line="112"
+ column="13"/>
+ <location
+ file="res/menu/main.xml"
+ line="118"
+ column="13"/>
+ <location
+ file="res/menu/main.xml"
+ line="124"
+ column="13"/>
+ <location
+ file="res/menu/main.xml"
+ line="130"
+ column="13"/>
+ <location
+ file="res/menu/main.xml"
+ line="140"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="Autofill"
+ message="Missing `autofillHints` attribute"
+ errorLine1=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/calc_header_popup.xml"
+ line="73"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="Autofill"
+ message="Missing `autofillHints` attribute"
+ errorLine1=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/password_dialog.xml"
+ line="6"
+ column="6"/>
+ </issue>
+
+ <issue
+ id="Autofill"
+ message="Missing `autofillHints` attribute"
+ errorLine1=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="454"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="Autofill"
+ message="Missing `autofillHints` attribute"
+ errorLine1=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="493"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="Autofill"
+ message="Missing `autofillHints` attribute"
+ errorLine1=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="533"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="Autofill"
+ message="Missing `autofillHints` attribute"
+ errorLine1=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="543"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="Autofill"
+ message="Missing `autofillHints` attribute"
+ errorLine1=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="553"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="ReportShortcutUsage"
+ message="Calling this method indicates use of dynamic shortcuts, but there are no calls to methods that track shortcut usage, such as `pushDynamicShortcut` or `reportShortcutUsed`. Calling these methods is recommended, as they track shortcut usage and allow launchers to adjust which shortcuts appear based on activation history. Please see https://developer.android.com/develop/ui/views/launch/shortcuts/managing-shortcuts#track-usage"
+ errorLine1=" shortcutManager.setDynamicShortcuts(shortcuts);"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/ui/LibreOfficeUIActivity.java"
+ line="430"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="ClickableViewAccessibility"
+ message="`onTouch` should call `View#performClick` when a click is detected"
+ errorLine1=" public boolean onTouch(View v, MotionEvent event) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/overlay/CalcHeadersView.java"
+ line="69"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="ClickableViewAccessibility"
+ message="Custom view `LayerView` overrides `onTouchEvent` but not `performClick`"
+ errorLine1=" public boolean onTouchEvent(MotionEvent event) {"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="src/java/org/mozilla/gecko/gfx/LayerView.java"
+ line="115"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="ClickableViewAccessibility"
+ message="`OnSlideSwipeListener#onTouch` should call `View#performClick` when a click is detected"
+ errorLine1=" public boolean onTouch(View v, MotionEvent me) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="src/java/org/mozilla/gecko/OnSlideSwipeListener.java"
+ line="89"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="ClickableViewAccessibility"
+ message="Custom view ``WebView`` has `setOnTouchListener` called on it but does not override `performClick`"
+ errorLine1=" mWebView.setOnTouchListener(new View.OnTouchListener() {"
+ errorLine2=" ^">
+ <location
+ file="src/java/org/libreoffice/PresentationActivity.java"
+ line="40"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="ClickableViewAccessibility"
+ message="`onTouch` should call `View#performClick` when a click is detected"
+ errorLine1=" public boolean onTouch(View v, MotionEvent event) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/PresentationActivity.java"
+ line="42"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="ClickableViewAccessibility"
+ message="`onTouch` should call `View#performClick` when a click is detected"
+ errorLine1=" public boolean onTouch(View v, MotionEvent event) {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="src/java/org/libreoffice/PresentationActivity.java"
+ line="77"
+ column="28"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;com.google.android.material.floatingactionbutton.FloatingActionButton"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="137"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;com.google.android.material.floatingactionbutton.FloatingActionButton"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="169"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;com.google.android.material.floatingactionbutton.FloatingActionButton"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="201"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;com.google.android.material.floatingactionbutton.FloatingActionButton"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="233"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/colorbox.xml"
+ line="6"
+ column="6"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageView"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="res/layout/document_part_list_layout.xml"
+ line="10"
+ column="6"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/presentation_mode.xml"
+ line="16"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/presentation_mode.xml"
+ line="25"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="70"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="80"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="90"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="100"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="110"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="140"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="150"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="160"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="170"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="207"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="217"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="227"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="237"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="253"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="263"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="273"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="283"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="315"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="325"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="335"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="345"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="355"
+ column="34"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="398"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="427"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="503"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="511"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="519"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="563"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="ContentDescription"
+ message="Missing `contentDescription` attribute on image"
+ errorLine1=" &lt;ImageButton"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_color_picker.xml"
+ line="30"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="111"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="143"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="175"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="207"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_document_browser.xml"
+ line="239"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/colorbox.xml"
+ line="11"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="30"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="64"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="95"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="KeyboardInaccessibleWidget"
+ message="&apos;clickable&apos; attribute found, please also add &apos;focusable&apos;"
+ errorLine1=" android:clickable=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="126"
+ column="9"/>
+ </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=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/activity_main.xml"
+ line="42"
+ column="18"/>
+ </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=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/activity_main.xml"
+ line="52"
+ column="18"/>
+ </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=" &lt;EditText"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="454"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;Rows:&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;Rows:&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="16"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;+&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;+&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="32"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;3&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;3&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="45"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;-&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;-&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="60"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;Columns:&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;Columns:&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="77"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;-&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;-&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="90"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;3&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;3&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="108"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="HardcodedText"
+ message="Hardcoded string &quot;+&quot;, should use `@string` resource"
+ errorLine1=" android:text=&quot;+&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="122"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RelativeOverlap"
+ message="`@id/slide_show_nav_back` can overlap `@id/slide_show_nav_prev` if @string/slideshow_action_back grows due to localized text expansion"
+ errorLine1=" &lt;Button"
+ errorLine2=" ~~~~~~">
+ <location
+ file="res/layout/presentation_mode.xml"
+ line="34"
+ column="10"/>
+ </issue>
+
+ <issue
+ id="RelativeOverlap"
+ message="`TextView-1` can overlap `@id/font_color_picker_button` if @string/font_color grows due to localized text expansion"
+ errorLine1=" &lt;TextView"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="386"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="RelativeOverlap"
+ message="`TextView-1` can overlap `@id/font_back_color_picker_button` if @string/highlight_color grows due to localized text expansion"
+ errorLine1=" &lt;TextView"
+ errorLine2=" ~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="415"
+ column="38"/>
+ </issue>
+
+ <issue
+ id="RelativeOverlap"
+ message="`@id/button_auto_color` can overlap `@id/button_go_back_color_picker` if @string/automatic grows due to localized text expansion"
+ errorLine1=" &lt;Button"
+ errorLine2=" ~~~~~~">
+ <location
+ file="res/layout/toolbar_color_picker.xml"
+ line="38"
+ column="14"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_toRightOf`; already defining `layout_toEndOf` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_toRightOf=&quot;@+id/calc_header_top_left&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_main.xml"
+ line="78"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_toRightOf`; already defining `layout_toEndOf` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_toRightOf=&quot;@+id/calc_header_row&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/activity_main.xml"
+ line="94"
+ column="21"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_marginRight`; already defining `layout_marginEnd` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_marginRight=&quot;@dimen/file_icon_margin_end&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/item_recent_files.xml"
+ line="26"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_marginLeft`; already defining `layout_marginStart` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_marginLeft=&quot;8dp&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="14"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_marginRight`; already defining `layout_marginEnd` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_marginRight=&quot;8dp&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="27"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_marginLeft`; already defining `layout_marginStart` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_marginLeft=&quot;8dp&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="75"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_marginRight`; already defining `layout_marginEnd` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_marginRight=&quot;8dp&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/number_picker.xml"
+ line="120"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_alignParentRight`; already defining `layout_alignParentEnd` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_alignParentRight=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/presentation_mode.xml"
+ line="21"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_alignParentRight`; already defining `layout_alignParentEnd` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_alignParentRight=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/presentation_mode.xml"
+ line="31"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Redundant attribute `layout_alignParentLeft`; already defining `layout_alignParentStart` with `targetSdkVersion` 34"
+ errorLine1=" android:layout_alignParentLeft=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/presentation_mode.xml"
+ line="38"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart=&quot;true&quot;` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentLeft=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="395"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd=&quot;true&quot;` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentRight=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="405"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart=&quot;true&quot;` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentLeft=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="424"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd=&quot;true&quot;` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentRight=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_bottom.xml"
+ line="434"
+ column="41"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd=&quot;true&quot;` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentRight=&quot;true&quot;"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/layout/toolbar_color_picker.xml"
+ line="40"
+ column="17"/>
+ </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="AndroidManifest.xml"/>
+ </issue>
+
+</issues>