diff options
-rw-r--r-- | Makefile | 12 | ||||
-rw-r--r-- | circle.yml | 32 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/.gitignore | 2 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/build.gradle | 2 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/lint/lint-baseline-ci.xml | 629 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDKTestApp/.gitignore | 2 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDKTestApp/build.gradle | 2 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDKTestApp/lint/lint-baseline-ci.xml | 2569 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDKWearTestApp/.gitignore | 2 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDKWearTestApp/build.gradle | 2 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDKWearTestApp/gradle-config.gradle | 2 | ||||
-rw-r--r-- | platform/android/MapboxGLAndroidSDKWearTestApp/lint/lint-baseline-ci.xml | 823 | ||||
-rw-r--r-- | platform/android/gradle-lint.gradle | 30 |
13 files changed, 4108 insertions, 1 deletions
@@ -616,6 +616,18 @@ test-code-android: android-checkstyle: platform/android/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none checkstyle +.PHONY: android-lint-sdk +android-lint-sdk: platform/android/configuration.gradle + cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDK:lint + +.PHONY: android-lint-test-app +android-lint-test-app: platform/android/configuration.gradle + cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDKTestApp:lint + +.PHONY: android-lint-wear-app +android-lint-wear-app: platform/android/configuration.gradle + cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDKWearTestApp:lint + .PHONY: android-javadoc android-javadoc: platform/android/configuration.gradle cd platform/android && $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDK:javadocrelease diff --git a/circle.yml b/circle.yml index 218e5822e3..506fbddb33 100644 --- a/circle.yml +++ b/circle.yml @@ -152,6 +152,7 @@ jobs: LIBSYSCONFCPUS: 4 JOBS: 4 BUILDTYPE: Debug + IS_LOCAL_DEVELOPMENT: false steps: - checkout - *generate-cache-key @@ -176,6 +177,18 @@ jobs: name: Check Java code style command: make android-checkstyle - run: + name: Check Android modules for potential bugs (Lint SDK) + command: | + make android-lint-sdk + - run: + name: Check Android modules for potential bugs (Lint Test App) + command: | + make android-lint-test-app + - run: + name: Check Android modules for potential bugs (Lint Wear Test App) + command: | + make android-lint-wear-app + - run: name: Build Test APK command: | echo "${MAPBOX_DEVELOPER_CONFIG_XML}" > platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/developer-config.xml @@ -213,6 +226,24 @@ jobs: - store_artifacts: path: platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk destination: . + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/reports/lint-results.html + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/build/reports/lint-results.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDK/lint-baseline.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/build/reports/lint-results.html + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/build/reports/lint-results.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKTestApp/lint-baseline.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKWearTestApp/build/reports/lint-results.html + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKWearTestApp/build/reports/lint-results.xml + - store_artifacts: + path: platform/android/MapboxGLAndroidSDKWearTestApp/lint-baseline.xml # ------------------------------------------------------------------------------ android-release-all: @@ -223,6 +254,7 @@ jobs: LIBSYSCONFCPUS: 4 JOBS: 4 BUILDTYPE: Release + IS_LOCAL_DEVELOPMENT: false steps: - checkout - *generate-cache-key diff --git a/platform/android/MapboxGLAndroidSDK/.gitignore b/platform/android/MapboxGLAndroidSDK/.gitignore new file mode 100644 index 0000000000..cec211fe81 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/.gitignore @@ -0,0 +1,2 @@ +lint-baseline.xml +lint/lint-baseline-local.xml
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index 8b92fa1af2..0cb6e529f1 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -116,6 +116,7 @@ android { } lintOptions { + baseline file("lint-baseline.xml") checkAllWarnings true warningsAsErrors true } @@ -152,3 +153,4 @@ apply from: 'gradle-javadoc.gradle' apply from: 'gradle-publish.gradle' apply from: 'gradle-checkstyle.gradle' apply from: 'gradle-tests-staticblockremover.gradle' +apply from: '../gradle-lint.gradle' diff --git a/platform/android/MapboxGLAndroidSDK/lint/lint-baseline-ci.xml b/platform/android/MapboxGLAndroidSDK/lint/lint-baseline-ci.xml new file mode 100644 index 0000000000..4dc8ecde70 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/lint/lint-baseline-ci.xml @@ -0,0 +1,629 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- REMEMBER! First you run Lint locally you'll need to move the lint-baseline.xml file + generated into the lint folder and called it lint-baseline-local.xml + If you remove any error when running Lint locally, you'll get a warning from the command + line advising you to remove it from the baseline. If you remove it (remember to remove it + from lint-baseline-local.xml file) you should remove it too from + lint-baseline-ci.xml (THIS FILE) which is the only one included in the repo. + Eventually, it'll be removed (when we remove all current lint errors included). --> +<issues format="4" by="lint 2.3.1"> + + <issue + id="MissingPermission" + message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`" + errorLine1=" Location lastKnownLocation = locationEngine.getLastLocation();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java" + line="783" + column="38"/> + </issue> + + <issue + id="MissingPermission" + message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`" + errorLine1=" locationEngine.requestLocationUpdates();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java" + line="787" + column="9"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" Timber.v(String.format("[HTTP] Request was successful (code = %d).", response.code()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="112" + column="16"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" Timber.d(String.format(" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="116" + column="16"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to read the package metadata: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to read the package metadata: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="75" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to read the storage key: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to read the storage key: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="77" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to obtain the external storage path: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to obtain the external storage path: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="86" + column="9"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to delete old ambient cache database: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to delete old ambient cache database: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="113" + column="11"/> + </issue> + + <issue + id="MissingTranslation" + message=""`mapbox_attributionErrorNoBrowser`" is not translated in "ca" (Catalan), "es" (Spanish), "lt" (Lithuanian), "nl" (Dutch), "sv" (Swedish), "vi" (Vietnamese)" + errorLine1=" <string name="mapbox_attributionErrorNoBrowser">No web browser installed on device, can\'t open web page.</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="13" + column="13"/> + </issue> + + <issue + id="MissingTranslation" + message=""`mapbox_telemetrySettings`" is not translated in "ca" (Catalan), "es" (Spanish), "lt" (Lithuanian), "nl" (Dutch), "sv" (Swedish), "vi" (Vietnamese)" + errorLine1=" <string name="mapbox_telemetrySettings">Telemetry Settings</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="15" + column="13"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.v("Connected: " + connected);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java" + line="85" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Device returned an out of range width size, "" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="178" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Device returned an out of range height size, "" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="185" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Old ambient cache database deleted to save space: " + path);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="110" + column="22"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Not setting minZoomPreference, value is in unsupported range: " + minZoom);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/Transform.java" + line="349" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Not setting maxZoomPreference, value is in unsupported range: " + maxZoom);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/Transform.java" + line="361" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Stops: %s is a different type: %s", stops.getClass(), exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/style/functions/Function.java" + line="282" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.v(String.format("[HTTP] Request was successful (code = %d).", response.code()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="112" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.d(String.format(" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="116" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.d(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="163" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="166" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.w(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="170" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Layer: %s is a different type: %s", layerId, exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java" + line="286" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Source: %s is a different type: %s", sourceId, exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java" + line="407" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="92" + column="16"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to read the package metadata: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="75" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to read the storage key: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="77" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to obtain the external storage path: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="86" + column="9"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to delete old ambient cache database: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="113" + column="11"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `ConnectivityReceiver` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static ConnectivityReceiver INSTANCE;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java" + line="24" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `IconFactory` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static IconFactory instance;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/annotations/IconFactory.java" + line="38" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `Mapbox` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static Mapbox INSTANCE;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/Mapbox.java" + line="29" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `OfflineManager` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" // This object is implemented as a singleton" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="42" + column="3"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapbox_my_location_ring` appears to be unused" + errorLine1=" <color name="mapbox_my_location_ring">@color/mapbox_blue</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_infowindow_offset` appears to be unused" + errorLine1=" <dimen name="mapbox_infowindow_offset">-2dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="5" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_infowindow_line_width` appears to be unused" + errorLine1=" <dimen name="mapbox_infowindow_line_width">1.5dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_left_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_left_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="7" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_top_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_top_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="8" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_right_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_right_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="9" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_bottom_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_bottom_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="10" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_two_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_two_dp">2dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="11" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_ten_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_ten_dp">10dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="14" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_sixteen_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_sixteen_dp">16dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="15" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.drawable.mapbox_infowindow_icon_bg` appears to be unused"> + <location + file="src/main/res/drawable-xxxhdpi/mapbox_infowindow_icon_bg.9.png"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapbox_material_bg_selector` appears to be unused" + errorLine1="<selector xmlns:android="http://schemas.android.com/apk/res/android">" + errorLine2="^"> + <location + file="src/main/res/color/mapbox_material_bg_selector.xml" + line="2" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_outdoors` appears to be unused" + errorLine1=" <string name="mapbox_style_outdoors" translatable="false">mapbox://styles/mapbox/outdoors-v10</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="22" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_traffic_day` appears to be unused" + errorLine1=" <string name="mapbox_style_traffic_day" translatable="false">mapbox://styles/mapbox/traffic-day-v2</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="27" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_traffic_night` appears to be unused" + errorLine1=" <string name="mapbox_style_traffic_night" translatable="false">mapbox://styles/mapbox/traffic-night-v2</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/strings.xml" + line="28" + column="13"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.infowindow_subdescription` appears to be unused" + errorLine1=" android:id="@+id/infowindow_subdescription"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/mapbox_infowindow_content.xml" + line="43" + column="9"/> + </issue> + + <issue + id="TypographyQuotes" + message="Replace straight quotes ('') with directional quotes (‘’, &#8216; and &#8217;) ?" + errorLine1=" <string name="mapbox_attributionTelemetryMessage">Estàs ajudant a millorar els mapes d\'OpenStreetMap i de Mapbox aportant dades d\'ús anònimes.</string>" + errorLine2=" ^"> + <location + file="src/main/res/values-ca/strings.xml" + line="9" + column="55"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-hdpi`: mapbox_infowindow_icon_bg.9.png, mapbox_mapview_preview.jpg"> + <location + file="src/main/res/drawable-hdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-mdpi`: mapbox_infowindow_icon_bg.9.png, mapbox_mapview_preview.jpg"> + <location + file="src/main/res/drawable-mdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xhdpi`: mapbox_infowindow_icon_bg.9.png, mapbox_mapview_preview.jpg"> + <location + file="src/main/res/drawable-xhdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xxhdpi`: mapbox_infowindow_icon_bg.9.png (found in drawable-xxxhdpi)"> + <location + file="src/main/res/drawable-xxhdpi"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1="<TextView" + errorLine2="^"> + <location + file="src/main/res/layout/mapbox_attribution_list_item.xml" + line="2" + column="1"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/mapbox_infowindow_content.xml" + line="21" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/mapbox_infowindow_content.xml" + line="31" + column="5"/> + </issue> + + <issue + id="ContentDescription" + message="[Accessibility] Missing `contentDescription` attribute on image" + errorLine1="<ImageView xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/layout/mapbox_view_image_marker.xml" + line="2" + column="1"/> + </issue> + +</issues> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/.gitignore b/platform/android/MapboxGLAndroidSDKTestApp/.gitignore new file mode 100644 index 0000000000..cec211fe81 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/.gitignore @@ -0,0 +1,2 @@ +lint-baseline.xml +lint/lint-baseline-local.xml
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle index 656789fcdb..b13362751a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle +++ b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle @@ -25,6 +25,7 @@ android { } lintOptions { + baseline file("lint-baseline.xml") checkAllWarnings true warningsAsErrors true disable 'MissingTranslation' @@ -84,5 +85,6 @@ apply from: 'gradle-config.gradle' apply from: 'gradle-device-farm.gradle' apply from: 'gradle-spoon.gradle' apply from: 'gradle-checkstyle.gradle' +apply from: '../gradle-lint.gradle' diff --git a/platform/android/MapboxGLAndroidSDKTestApp/lint/lint-baseline-ci.xml b/platform/android/MapboxGLAndroidSDKTestApp/lint/lint-baseline-ci.xml new file mode 100644 index 0000000000..89eab70c48 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/lint/lint-baseline-ci.xml @@ -0,0 +1,2569 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- REMEMBER! First you run Lint locally you'll need to move the lint-baseline.xml file + generated into the lint folder and called it lint-baseline-local.xml + If you remove any error when running Lint locally, you'll get a warning from the command + line advising you to remove it from the baseline. If you remove it (remember to remove it + from lint-baseline-local.xml file) you should remove it too from + lint-baseline-ci.xml (THIS FILE) which is the only one included in the repo. + Eventually, it'll be removed (when we remove all current lint errors included). --> +<issues format="4" by="lint 2.3.1"> + + <issue + id="MissingPermission" + message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`" + errorLine1=" Location lastKnownLocation = locationEngine.getLastLocation();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java" + line="783" + column="38"/> + </issue> + + <issue + id="MissingPermission" + message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`" + errorLine1=" locationEngine.requestLocationUpdates();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java" + line="787" + column="9"/> + </issue> + + <issue + id="MissingPermission" + message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`" + errorLine1=" .target(new LatLng(Mapbox.getLocationSource().getLastLocation()))" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/widgets/MyLocationViewTest.java" + line="107" + column="34"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" ((TextView) infoWindow.getView()).setText(String.format("%.2fkm", distanceKm));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/DynamicInfoWindowAdapterActivity.java" + line="72" + column="53"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" Timber.v(String.format("[HTTP] Request was successful (code = %d).", response.code()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="112" + column="16"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" Timber.d(String.format(" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="116" + column="16"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" String.format("Snapshot taken in %d ms", duration)," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java" + line="59" + column="11"/> + </issue> + + <issue + id="InflateParams" + message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout's root element)" + errorLine1=" final View dialogContent = LayoutInflater.from(context).inflate(R.layout.dialog_camera_position, null);" + errorLine2=" ~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java" + line="89" + column="106"/> + </issue> + + <issue + id="StringFormatMatches" + message="Suspicious argument type for formatting argument #1 in `debug_zoom`: conversion is `s`, received `double` (argument #2 in method call) (Did you mean formatting character `e`, 'f', 'g' or `a`?)" + errorLine1=" textView.setText(String.format(getString(R.string.debug_zoom), position.zoom));" + errorLine2=" ~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java" + line="60" + column="76"/> + <location + file="src/main/res/values/strings.xml" + line="186" + column="5"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Could not add markers,` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Could not add markers,", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java" + line="277" + column="9"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `That's not an url... ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("That's not an url... ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java" + line="77" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `That's not an url... ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("That's not an url... ", malformedUrlException);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java" + line="135" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Could not resolve package info` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Could not resolve package info", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java" + line="95" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to read the package metadata: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to read the package metadata: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="75" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to read the storage key: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to read the storage key: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="77" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to obtain the external storage path: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to obtain the external storage path: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="86" + column="9"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to delete old ambient cache database: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to delete old ambient cache database: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="113" + column="11"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `could not reflect` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("could not reflect", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java" + line="49" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Got NULL feature %s` requires `1` but format call supplies `0`" + errorLine1=" Timber.i("Got NULL feature %s");" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java" + line="84" + column="9"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Got NULL feature %s` requires `1` but format call supplies `0`" + errorLine1=" Timber.i("Got NULL feature %s");" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java" + line="102" + column="9"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Invalid URL` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Invalid URL", malformedUrlException);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RealTimeGeoJsonActivity.java" + line="58" + column="7"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Remove marker with " + activeMarker.getId());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AddRemoveMarkerActivity.java" + line="118" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("showLowThresholdMarker() " + activeMarker.getId());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AddRemoveMarkerActivity.java" + line="125" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Remove marker with " + activeMarker.getId());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AddRemoveMarkerActivity.java" + line="137" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("showHighThresholdMarker() " + activeMarker.getId());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AddRemoveMarkerActivity.java" + line="144" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.v("Connected: " + connected);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java" + line="85" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Debug FAB: isDebug Active? " + mapboxMap.isDebugActive());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java" + line="72" + column="20"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("That's not an url... " + malformedUrlException.getMessage());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GeoJsonClusteringActivity.java" + line="131" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Device returned an out of range width size, "" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="178" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Device returned an out of range height size, "" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="185" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Error: " + error);" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java" + line="210" + column="18"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Download started: " + regionName);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java" + line="226" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Offline region created: " + regionName);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java" + line="244" + column="18"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Error: " + error);" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java" + line="251" + column="18"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Selected item: " + which);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/model/other/OfflineListRegionsDialog.java" + line="35" + column="20"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Old ambient cache database deleted to save space: " + path);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="110" + column="22"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Failed to encode metadata: " + exception.getMessage());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/utils/OfflineUtils.java" + line="32" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("isMapboxReady called with value " + (mapboxMap != null));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java" + line="46" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Could not load geojson: " + ioException.getMessage());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java" + line="62" + column="20"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Fill anti alias: " + fillAntialias.getValue());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java" + line="320" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Fill translate anchor: " + fillTranslateAnchor.getValue());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java" + line="323" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Visibility: " + visibility.getValue());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java" + line="325" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Fill color base: " + stops.getBase());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java" + line="480" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Fill color #stops: " + stops.size());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java" + line="481" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Fill color #stops: " + stop);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java" + line="484" + column="20"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.i("Writing style file to: " + cacheStyleFile.getAbsolutePath());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/StyleFileActivity.java" + line="75" + column="18"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d(label + ": begin");" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/utils/TimingLogger.java" + line="149" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d(label + ": " + (now - prev) + " ms, " + splitLabel);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/utils/TimingLogger.java" + line="156" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d(label + ": end, " + (now - first) + " ms");" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/utils/TimingLogger.java" + line="158" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Not setting minZoomPreference, value is in unsupported range: " + minZoom);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/Transform.java" + line="349" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Not setting maxZoomPreference, value is in unsupported range: " + maxZoom);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/Transform.java" + line="361" + column="16"/> + </issue> + + <issue + id="LogNotTimber" + message="Using 'Log' instead of 'Timber'" + errorLine1=" Log.w(LOG_TAG, ACCESS_TOKEN_NOT_SET_MESSAGE);" + errorLine2=" ~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java" + line="58" + column="7"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Stops: %s is a different type: %s", stops.getClass(), exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/style/functions/Function.java" + line="282" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.v(String.format("[HTTP] Request was successful (code = %d).", response.code()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="112" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.d(String.format(" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="116" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.d(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="163" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="166" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.w(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="170" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Layer: %s is a different type: %s", layerId, exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java" + line="286" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Source: %s is a different type: %s", sourceId, exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java" + line="407" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Querying box %s", box));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewsInRectangleActivity.java" + line="56" + column="14"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="92" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.d(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java" + line="78" + column="14"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Querying box %s", box));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java" + line="51" + column="22"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Got %s features", features.size()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java" + line="69" + column="14"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Got feature %s with %s properties and Geometry %s"," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java" + line="72" + column="18"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Prop %s - %s", entry.getKey(), entry.getValue()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java" + line="79" + column="22"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Querying box %s for buildings", box));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxHighlightActivity.java" + line="56" + column="22"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Querying box %s", box));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java" + line="79" + column="22"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format(" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java" + line="62" + column="22"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Got %s features", features.size()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java" + line="87" + column="14"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Got feature %s with %s properties and Geometry %s"," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java" + line="90" + column="18"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format("Prop %s - %s", entry.getKey(), entry.getValue()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java" + line="97" + column="22"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Could not add markers,", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java" + line="277" + column="9"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("That's not an url... ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java" + line="77" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("That's not an url... ", malformedUrlException);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java" + line="135" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Could not resolve package info", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java" + line="95" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to read the package metadata: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="75" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to read the storage key: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="77" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to obtain the external storage path: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="86" + column="9"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to delete old ambient cache database: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="113" + column="11"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("could not reflect", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java" + line="49" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Invalid URL", malformedUrlException);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RealTimeGeoJsonActivity.java" + line="58" + column="7"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `ConnectivityReceiver` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static ConnectivityReceiver INSTANCE;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java" + line="24" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `IconFactory` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static IconFactory instance;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/annotations/IconFactory.java" + line="38" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `Mapbox` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static Mapbox INSTANCE;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/Mapbox.java" + line="29" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `OfflineManager` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" // This object is implemented as a singleton" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="42" + column="3"/> + </issue> + + <issue + id="UnpackedNativeCode" + message="Missing attribute android:extractNativeLibs="false" on the `<application>` tag." + errorLine1=" <application" + errorLine2=" ^"> + <location + file="src/main/AndroidManifest.xml" + line="8" + column="5"/> + </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/activity_building_layer.xml" + line="2" + column="1"/> + </issue> + + <issue + id="MergeRootFrame" + message="This `<FrameLayout>` can be replaced with a `<merge>` tag" + errorLine1="<FrameLayout" + errorLine2="^"> + <location + file="src/main/res/layout/activity_map_in_dialog.xml" + line="2" + column="1"/> + </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/activity_map_padding.xml" + line="2" + column="1"/> + </issue> + + <issue + id="DisableBaselineAlignment" + message="Set `android:baselineAligned="false"` on this element for better performance" + errorLine1=" <LinearLayout" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_multi_map.xml" + line="10" + column="5"/> + </issue> + + <issue + id="DisableBaselineAlignment" + message="Set `android:baselineAligned="false"` on this element for better performance" + errorLine1=" <LinearLayout" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_multi_map.xml" + line="42" + column="5"/> + </issue> + + <issue + id="NestedWeights" + message="Nested weights are bad for performance" + errorLine1=" android:layout_weight="0.5"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_multi_map.xml" + line="23" + column="13"/> + </issue> + + <issue + id="NestedWeights" + message="Nested weights are bad for performance" + errorLine1=" android:layout_weight="0.5"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_multi_map.xml" + line="55" + column="13"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `#cccc` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="#cccc"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/drawer_navigation_drawer.xml" + line="4" + column="5"/> + </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/item_main_feature.xml" + line="6" + column="5"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/mapboxGreen` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/mapboxGreen">" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/view_text_marker.xml" + line="5" + column="5"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapbox_my_location_ring` appears to be unused" + errorLine1=" <color name="mapbox_my_location_ring">@color/mapbox_blue</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_access_token` appears to be unused" + errorLine1=" <string name="mapbox_access_token">YOUR_MAPBOX_ACCESS_TOKEN_GOES_HERE</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/developer-config.xml" + line="3" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_infowindow_offset` appears to be unused" + errorLine1=" <dimen name="mapbox_infowindow_offset">-2dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="5" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.coordinatebounds_margin` appears to be unused" + errorLine1=" <dimen name="coordinatebounds_margin">32dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/dimens.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_infowindow_line_width` appears to be unused" + errorLine1=" <dimen name="mapbox_infowindow_line_width">1.5dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_left_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_left_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="7" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_top_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_top_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="8" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_right_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_right_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="9" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_bottom_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_bottom_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="10" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_two_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_two_dp">2dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="11" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_ten_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_ten_dp">10dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="14" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_sixteen_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_sixteen_dp">16dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="15" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.drawable.ic_check_box` appears to be unused" + errorLine1="<vector xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/drawable/ic_check_box.xml" + line="1" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.drawable.mapbox_infowindow_icon_bg` appears to be unused"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-xxxhdpi/mapbox_infowindow_icon_bg.9.png"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapbox_material_bg_selector` appears to be unused" + errorLine1="<selector xmlns:android="http://schemas.android.com/apk/res/android">" + errorLine2="^"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/color/mapbox_material_bg_selector.xml" + line="2" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.drawable.marker` appears to be unused" + errorLine1="<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">" + errorLine2="^"> + <location + file="src/main/res/drawable/marker.xml" + line="1" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_outdoors` appears to be unused" + errorLine1=" <string name="mapbox_style_outdoors" translatable="false">mapbox://styles/mapbox/outdoors-v10</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/strings.xml" + line="22" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_traffic_day` appears to be unused" + errorLine1=" <string name="mapbox_style_traffic_day" translatable="false">mapbox://styles/mapbox/traffic-day-v2</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/strings.xml" + line="27" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_traffic_night` appears to be unused" + errorLine1=" <string name="mapbox_style_traffic_night" translatable="false">mapbox://styles/mapbox/traffic-night-v2</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/strings.xml" + line="28" + column="13"/> + </issue> + + <issue + id="UselessParent" + message="This `FrameLayout` layout or its `LinearLayout` parent is possibly useless" + errorLine1=" <FrameLayout" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_my_location_customization.xml" + line="9" + column="5"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.fabStartStop` appears to be unused" + errorLine1=" android:id="@+id/fabStartStop"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_animated_image_source.xml" + line="18" + column="5"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.map_container` appears to be unused" + errorLine1=" android:id="@+id/map_container"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_multi_map.xml" + line="5" + column="5"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.map_container1` appears to be unused" + errorLine1=" android:id="@+id/map_container1"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_multi_map.xml" + line="11" + column="9"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.map_container2` appears to be unused" + errorLine1=" android:id="@+id/map_container2"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_multi_map.xml" + line="43" + column="9"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.content_frame` appears to be unused" + errorLine1=" android:id="@+id/content_frame"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_scroll_by.xml" + line="69" + column="9"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.viewpager_header` appears to be unused" + errorLine1=" android:id="@+id/viewpager_header"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_viewpager.xml" + line="13" + column="13"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.map_card` appears to be unused" + errorLine1=" android:id="@+id/map_card"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/fragment_double_map.xml" + line="12" + column="9"/> + </issue> + + <issue + id="UnusedIds" + message="The resource `R.id.infowindow_subdescription` appears to be unused" + errorLine1=" android:id="@+id/infowindow_subdescription"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/layout/mapbox_infowindow_content.xml" + line="43" + column="9"/> + </issue> + + <issue + id="TypographyQuotes" + message="Replace straight quotes ('') with directional quotes (‘’, &#8216; and &#8217;) ?" + errorLine1=" <string name="mapbox_attributionTelemetryMessage">Estàs ajudant a millorar els mapes d\'OpenStreetMap i de Mapbox aportant dades d\'ús anònimes.</string>" + errorLine2=" ^"> + <location + file="src/main/res/values-ca/strings.xml" + line="9" + column="55"/> + </issue> + + <issue + id="IconDipSize" + message="The image `icon_burned.png` varies significantly in its density-independent (dip) size across the various density versions: drawable-hdpi/icon_burned.png: 64x64 dp (96x96 px), drawable-xxxhdpi/icon_burned.png: 48x48 dp (192x192 px), drawable-xxhdpi/icon_burned.png: 48x48 dp (144x144 px), drawable-mdpi/icon_burned.png: 48x48 dp (48x48 px), drawable-xhdpi/icon_burned.png: 48x48 dp (96x96 px)"> + <location + file="src/main/res/drawable-xhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-mdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-xxhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-xxxhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-hdpi/icon_burned.png"/> + </issue> + + <issue + id="IconDuplicatesConfig" + message="The `icon_burned.png` icon has identical contents in the following configuration folders: drawable-hdpi, drawable-xhdpi"> + <location + file="src/main/res/drawable-xhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-hdpi/icon_burned.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-hdpi/ic_launcher_round.png`: expected 72x72, but was 216x216"> + <location + file="src/main/res/drawable-hdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-mdpi/ic_launcher_round.png`: expected 48x48, but was 144x144"> + <location + file="src/main/res/drawable-mdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xhdpi/ic_launcher_round.png`: expected 96x96, but was 288x288"> + <location + file="src/main/res/drawable-xhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxhdpi/ic_launcher_round.png`: expected 144x144, but was 432x432"> + <location + file="src/main/res/drawable-xxhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxxhdpi/ic_launcher_round.png`: expected 192x192, but was 576x576"> + <location + file="src/main/res/drawable-xxxhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-hdpi/icon.png`: expected 72x72, but was 215x212"> + <location + file="src/main/res/drawable-hdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-mdpi/icon.png`: expected 48x48, but was 143x141"> + <location + file="src/main/res/drawable-mdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xhdpi/icon.png`: expected 96x96, but was 286x282"> + <location + file="src/main/res/drawable-xhdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxhdpi/icon.png`: expected 144x144, but was 429x423"> + <location + file="src/main/res/drawable-xxhdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxxhdpi/icon.png`: expected 192x192, but was 572x564"> + <location + file="src/main/res/drawable-xxxhdpi/icon.png"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_debug_mode.xml" + line="18" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_marker_bulk.xml" + line="18" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_marker_view.xml" + line="18" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/item_main_feature.xml" + line="14" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/item_main_feature.xml" + line="25" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1="<TextView" + errorLine2="^"> + <location + file="src/main/res/layout/mapbox_attribution_list_item.xml" + line="2" + column="1"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/mapbox_infowindow_content.xml" + line="21" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/mapbox_infowindow_content.xml" + line="31" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/section_main_layout.xml" + line="13" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/view_custom_marker.xml" + line="11" + column="5"/> + </issue> + + <issue + id="SelectableText" + message="Consider making the text value selectable by specifying `android:textIsSelectable="true"`" + errorLine1=" <TextView" + errorLine2=" ^"> + <location + file="src/main/res/layout/view_text_marker.xml" + line="7" + column="5"/> + </issue> + + <issue + id="ButtonStyle" + message="Buttons in button bars should be borderless; use `style="?android:attr/buttonBarButtonStyle"` (and `?android:attr/buttonBarStyle` on the parent)" + errorLine1=" <Button" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_camera_animation_types.xml" + line="24" + column="9"/> + </issue> + + <issue + id="ButtonStyle" + message="Buttons in button bars should be borderless; use `style="?android:attr/buttonBarButtonStyle"` (and `?android:attr/buttonBarStyle` on the parent)" + errorLine1=" <Button" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_camera_animation_types.xml" + line="31" + column="9"/> + </issue> + + <issue + id="ButtonStyle" + message="Buttons in button bars should be borderless; use `style="?android:attr/buttonBarButtonStyle"` (and `?android:attr/buttonBarStyle` on the parent)" + errorLine1=" <Button" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_camera_animation_types.xml" + line="38" + column="9"/> + </issue> + + <issue + id="GoogleAppIndexingWarning" + message="App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW intent filter. See issue explanation for more details." + errorLine1=" <application" + errorLine2=" ^"> + <location + file="src/main/AndroidManifest.xml" + line="8" + column="5"/> + </issue> + + <issue + id="ContentDescription" + message="[Accessibility] Missing `contentDescription` attribute on image" + errorLine1=" <ImageView" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_snapshot.xml" + line="14" + column="9"/> + </issue> + + <issue + id="ContentDescription" + message="[Accessibility] Missing `contentDescription` attribute on image" + errorLine1="<ImageView xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/layout/mapbox_view_image_marker.xml" + line="2" + column="1"/> + </issue> + + <issue + id="ContentDescription" + message="[Accessibility] Missing `contentDescription` attribute on image" + errorLine1=" <ImageView" + errorLine2=" ^"> + <location + file="src/main/res/layout/view_custom_marker.xml" + line="6" + column="5"/> + </issue> + + <issue + id="SetTextI18n" + message="String literal in `setText` can not be translated. Use Android resources instead." + errorLine1=" textView.setText("Click the map to calculate the distance");" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/DynamicInfoWindowAdapterActivity.java" + line="103" + column="26"/> + </issue> + + <issue + id="SetTextI18n" + message="Do not concatenate text displayed with `setText`. Use resource string with placeholders." + errorLine1=" viewCountView.setText("ViewCache size " + markerViewContainer.getChildCount());" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewActivity.java" + line="153" + column="39"/> + </issue> + + <issue + id="SetTextI18n" + message="String literal in `setText` can not be translated. Use Android resources instead." + errorLine1=" viewCountView.setText("ViewCache size " + markerViewContainer.getChildCount());" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewActivity.java" + line="153" + column="39"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "No Results", should use `@string` resource" + errorLine1=" android:text="No Results"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_metadata_update.xml" + line="18" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "No Results", should use `@string` resource" + errorLine1=" android:text="No Results"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_offline_region_delete.xml" + line="18" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Move the map by x/y pixels", should use `@string` resource" + errorLine1=" android:text="Move the map by x/y pixels"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_scroll_by.xml" + line="25" + column="17"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "X: 0000", should use `@string` resource" + errorLine1=" android:text="X: 0000" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_scroll_by.xml" + line="35" + column="17"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Y: 0000", should use `@string` resource" + errorLine1=" android:text="Y: 0000" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_scroll_by.xml" + line="51" + column="17"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Latitude", should use `@string` resource" + errorLine1=" android:text="Latitude"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="19" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "-180", should use `@string` resource" + errorLine1=" android:text="-180"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="41" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Longitude", should use `@string` resource" + errorLine1=" android:text="Longitude" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="59" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "-180", should use `@string` resource" + errorLine1=" android:text="-180" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="81" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Zoom", should use `@string` resource" + errorLine1=" android:text="Zoom" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="98" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "18", should use `@string` resource" + errorLine1=" android:text="18" />" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="120" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Bearing", should use `@string` resource" + errorLine1=" android:text="Bearing" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="137" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "0", should use `@string` resource" + errorLine1=" android:text="0" />" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="159" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Tilt", should use `@string` resource" + errorLine1=" android:text="Tilt" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="176" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "0", should use `@string` resource" + errorLine1=" android:text="0" />" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="198" + column="13"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Change intensity", should use `@string` resource" + errorLine1=" android:title="Change intensity"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_building.xml" + line="6" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Change Anchor", should use `@string` resource" + errorLine1=" android:title="Change Anchor"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_building.xml" + line="10" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Amount of markers", should use `@string` resource" + errorLine1=" android:title="Amount of markers"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_bulk_marker.xml" + line="6" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Update layer (invalidate)", should use `@string` resource" + errorLine1=" android:title="Update layer (invalidate)" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_custom_layer.xml" + line="7" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Red", should use `@string` resource" + errorLine1=" android:title="Red" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_custom_layer.xml" + line="10" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Green", should use `@string` resource" + errorLine1=" android:title="Green" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_custom_layer.xml" + line="13" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Blue", should use `@string` resource" + errorLine1=" android:title="Blue" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_custom_layer.xml" + line="16" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add an exponential zoom function", should use `@string` resource" + errorLine1=" android:title="Add an exponential zoom function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="7" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add an interval zoom function", should use `@string` resource" + errorLine1=" android:title="Add an interval zoom function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="12" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a categorical source function", should use `@string` resource" + errorLine1=" android:title="Add a categorical source function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="17" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add an exponential source function", should use `@string` resource" + errorLine1=" android:title="Add an exponential source function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="22" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add an identity source function", should use `@string` resource" + errorLine1=" android:title="Add an identity source function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="27" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add an interval source function", should use `@string` resource" + errorLine1=" android:title="Add an interval source function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="32" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a composite, exponential function", should use `@string` resource" + errorLine1=" android:title="Add a composite, exponential function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="37" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a composite, categorical function", should use `@string` resource" + errorLine1=" android:title="Add a composite, categorical function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="42" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a composite, interval function", should use `@string` resource" + errorLine1=" android:title="Add a composite, interval function"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_data_driven_style.xml" + line="47" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "My Location Tracking", should use `@string` resource" + errorLine1=" android:title="My Location Tracking"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_padding.xml" + line="6" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Bangalore", should use `@string` resource" + errorLine1=" android:title="Bangalore"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_padding.xml" + line="10" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "List all layers in the style", should use `@string` resource" + errorLine1=" android:title="List all layers in the style"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="7" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "List all sources in the style", should use `@string` resource" + errorLine1=" android:title="List all sources in the style"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="11" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Color the water", should use `@string` resource" + errorLine1=" android:title="Color the water"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="15" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Set background opacity", should use `@string` resource" + errorLine1=" android:title="Set background opacity"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="19" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Set road symbol placement to Point", should use `@string` resource" + errorLine1=" android:title="Set road symbol placement to Point"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="23" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Set layer visibility to false", should use `@string` resource" + errorLine1=" android:title="Set layer visibility to false"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="27" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a parks layer", should use `@string` resource" + errorLine1=" android:title="Add a parks layer"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="31" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a dynamic GeoJSON source", should use `@string` resource" + errorLine1=" android:title="Add a dynamic GeoJSON source"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="35" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Remove buildings layer", should use `@string` resource" + errorLine1=" android:title="Remove buildings layer"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="39" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a terrain layer", should use `@string` resource" + errorLine1=" android:title="Add a terrain layer"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="43" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Add a satellite layer", should use `@string` resource" + errorLine1=" android:title="Add a satellite layer"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="47" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Change the water color on zoom", should use `@string` resource" + errorLine1=" android:title="Change the water color on zoom"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="51" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Custom tiles", should use `@string` resource" + errorLine1=" android:title="Custom tiles"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="55" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Apply filtered fill", should use `@string` resource" + errorLine1=" android:title="Apply filtered fill"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="59" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Apply filtered line", should use `@string` resource" + errorLine1=" android:title="Apply filtered line"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="63" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Apply numeric fill filter", should use `@string` resource" + errorLine1=" android:title="Apply numeric fill filter"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_runtime_style.xml" + line="67" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Toggle text size", should use `@string` resource" + errorLine1=" android:title="Toggle text size"/>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_symbol_layer.xml" + line="6" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Toggle text field contents", should use `@string` resource" + errorLine1=" android:title="Toggle text field contents"/>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_symbol_layer.xml" + line="10" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Toggle text font", should use `@string` resource" + errorLine1=" android:title="Toggle text font"/>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_symbol_layer.xml" + line="14" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Zoom in", should use `@string` resource" + errorLine1=" android:title="Zoom in"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_zoom.xml" + line="6" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Zoom out", should use `@string` resource" + errorLine1=" android:title="Zoom out"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_zoom.xml" + line="10" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Zoom by 2", should use `@string` resource" + errorLine1=" android:title="Zoom by 2"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_zoom.xml" + line="14" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Zoom to point", should use `@string` resource" + errorLine1=" android:title="Zoom to point"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_zoom.xml" + line="18" + column="9"/> + </issue> + + <issue + id="HardcodedText" + message="[I18N] Hardcoded string "Zoom to 4", should use `@string` resource" + errorLine1=" android:title="Zoom to 4"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/menu/menu_zoom.xml" + line="22" + column="9"/> + </issue> + + <issue + id="RelativeOverlap" + message="`@id/button_list_regions` can overlap `@id/button_download_region` if @string/button_download_region, @string/button_list_regions grow due to localized text expansion" + errorLine1=" <Button" + errorLine2=" ^"> + <location + file="src/main/res/layout/activity_offline.xml" + line="33" + column="5"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_marginEnd="@dimen/fab_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="@dimen/fab_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_animated_image_source.xml" + line="25" + column="5"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_marginEnd="@dimen/fab_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="@dimen/fab_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_circle_layer.xml" + line="25" + column="9"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_marginEnd="@dimen/fab_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="@dimen/fab_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_circle_layer.xml" + line="37" + column="9"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_marginEnd="@dimen/fab_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="@dimen/fab_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_debug_mode.xml" + line="32" + column="9"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_alignParentEnd="true"` to better support right-to-left layouts" + errorLine1=" android:layout_alignParentRight="true"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_offline.xml" + line="38" + column="9"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_marginEnd="@dimen/fab_margin"` to better support right-to-left layouts" + errorLine1=" android:layout_marginRight="@dimen/fab_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_offline.xml" + line="39" + column="9"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_marginStart="56dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="56dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_scroll_by.xml" + line="42" + column="17"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_marginStart="56dp"` to better support right-to-left layouts" + errorLine1=" android:layout_marginLeft="56dp"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/activity_scroll_by.xml" + line="59" + column="17"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toStartOf="@+id/value_lat"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@+id/value_lat"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="28" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toEndOf="@id/text_lat"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/text_lat"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="29" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toStartOf="@+id/value_lon"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@+id/value_lon"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="67" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toEndOf="@id/text_lon"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/text_lon"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="68" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toStartOf="@+id/value_zoom"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@+id/value_zoom"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="106" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toEndOf="@id/text_zoom"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/text_zoom"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="107" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toStartOf="@+id/value_bearing"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@+id/value_bearing"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="145" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toEndOf="@id/text_bearing"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/text_bearing"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="146" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toStartOf="@+id/value_tilt"` to better support right-to-left layouts" + errorLine1=" android:layout_toLeftOf="@+id/value_tilt"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="184" + column="13"/> + </issue> + + <issue + id="RtlHardcoded" + message="Consider adding `android:layout_toEndOf="@id/text_tilt"` to better support right-to-left layouts" + errorLine1=" android:layout_toRightOf="@id/text_tilt"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/dialog_camera_position.xml" + line="185" + column="13"/> + </issue> + +</issues> diff --git a/platform/android/MapboxGLAndroidSDKWearTestApp/.gitignore b/platform/android/MapboxGLAndroidSDKWearTestApp/.gitignore new file mode 100644 index 0000000000..cec211fe81 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKWearTestApp/.gitignore @@ -0,0 +1,2 @@ +lint-baseline.xml +lint/lint-baseline-local.xml
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKWearTestApp/build.gradle b/platform/android/MapboxGLAndroidSDKWearTestApp/build.gradle index 6ac8961421..7c3ffd8ce5 100644 --- a/platform/android/MapboxGLAndroidSDKWearTestApp/build.gradle +++ b/platform/android/MapboxGLAndroidSDKWearTestApp/build.gradle @@ -13,6 +13,7 @@ android { } lintOptions { + baseline file("lint-baseline.xml") disable 'MissingTranslation' } @@ -48,3 +49,4 @@ dependencies { apply from: 'gradle-config.gradle' apply from: 'gradle-checkstyle.gradle' +apply from: '../gradle-lint.gradle' diff --git a/platform/android/MapboxGLAndroidSDKWearTestApp/gradle-config.gradle b/platform/android/MapboxGLAndroidSDKWearTestApp/gradle-config.gradle index 27c13b935b..1068e5e69e 100644 --- a/platform/android/MapboxGLAndroidSDKWearTestApp/gradle-config.gradle +++ b/platform/android/MapboxGLAndroidSDKWearTestApp/gradle-config.gradle @@ -3,7 +3,7 @@ // task accessToken { - def tokenFile = new File("MapboxGLAndroidSDKWearTestApp/src/main/res/values/developer-config.xml") + def tokenFile = new File("${projectDir}/src/main/res/values/developer-config.xml") if (!tokenFile.exists()) { String tokenFileContents = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<resources>\n" + diff --git a/platform/android/MapboxGLAndroidSDKWearTestApp/lint/lint-baseline-ci.xml b/platform/android/MapboxGLAndroidSDKWearTestApp/lint/lint-baseline-ci.xml new file mode 100644 index 0000000000..de038e3bcc --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKWearTestApp/lint/lint-baseline-ci.xml @@ -0,0 +1,823 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- REMEMBER! First you run Lint locally you'll need to move the lint-baseline.xml file + generated into the lint folder and called it lint-baseline-local.xml + If you remove any error when running Lint locally, you'll get a warning from the command + line advising you to remove it from the baseline. If you remove it (remember to remove it + from lint-baseline-local.xml file) you should remove it too from + lint-baseline-ci.xml (THIS FILE) which is the only one included in the repo. + Eventually, it'll be removed (when we remove all current lint errors included). --> +<issues format="4" by="lint 2.3.1"> + + <issue + id="MissingPermission" + message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`" + errorLine1=" Location lastKnownLocation = locationEngine.getLastLocation();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java" + line="783" + column="38"/> + </issue> + + <issue + id="MissingPermission" + message="Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`" + errorLine1=" locationEngine.requestLocationUpdates();" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java" + line="787" + column="9"/> + </issue> + + <issue + id="GradleCompatible" + message="All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 25.3.1, 23.0.1. Examples include `com.android.support:animated-vector-drawable:25.3.1` and `com.android.support:percent:23.0.1`"> + <location + file="build.gradle"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" Timber.v(String.format("[HTTP] Request was successful (code = %d).", response.code()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="112" + column="16"/> + </issue> + + <issue + id="DefaultLocale" + message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead" + errorLine1=" Timber.d(String.format(" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="116" + column="16"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to read the package metadata: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to read the package metadata: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="75" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to read the storage key: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to read the storage key: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="77" + column="7"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to obtain the external storage path: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to obtain the external storage path: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="86" + column="9"/> + </issue> + + <issue + id="TimberArgCount" + message="Wrong argument count, format string `Failed to delete old ambient cache database: ` requires `0` but format call supplies `1`" + errorLine1=" Timber.e("Failed to delete old ambient cache database: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="113" + column="11"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.v("Connected: " + connected);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java" + line="85" + column="14"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Device returned an out of range width size, "" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="178" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Device returned an out of range height size, "" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="185" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.d("Old ambient cache database deleted to save space: " + path);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="110" + column="22"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Not setting minZoomPreference, value is in unsupported range: " + minZoom);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/Transform.java" + line="349" + column="16"/> + </issue> + + <issue + id="BinaryOperationInTimber" + message="Replace String concatenation with Timber's string formatting" + errorLine1=" Timber.e("Not setting maxZoomPreference, value is in unsupported range: " + maxZoom);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/Transform.java" + line="361" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Stops: %s is a different type: %s", stops.getClass(), exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/style/functions/Function.java" + line="282" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.v(String.format("[HTTP] Request was successful (code = %d).", response.code()));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="112" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.d(String.format(" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="116" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.d(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="163" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.i(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="166" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.w(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java" + line="170" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Layer: %s is a different type: %s", layerId, exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java" + line="286" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format("Source: %s is a different type: %s", sourceId, exception));" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java" + line="407" + column="16"/> + </issue> + + <issue + id="StringFormatInTimber" + message="Using 'String#format' inside of 'Timber'" + errorLine1=" Timber.e(String.format(MapboxConstants.MAPBOX_LOCALE," + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java" + line="92" + column="16"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to read the package metadata: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="75" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to read the storage key: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="77" + column="7"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to obtain the external storage path: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/storage/FileSource.java" + line="86" + column="9"/> + </issue> + + <issue + id="ThrowableNotAtBeginning" + message="Throwable should be first argument" + errorLine1=" Timber.e("Failed to delete old ambient cache database: ", exception);" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="113" + column="11"/> + </issue> + + <issue + id="AllowBackup" + message="On SDK version 23 and up, your app data will be automatically backed up and restored on app install. Consider adding the attribute `android:fullBackupContent` to specify an `@xml` resource which configures which files to backup. More info: https://developer.android.com/training/backup/autosyncapi.html" + errorLine1=" <application" + errorLine2=" ^"> + <location + file="src/main/AndroidManifest.xml" + line="14" + column="5"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `ConnectivityReceiver` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static ConnectivityReceiver INSTANCE;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java" + line="24" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `IconFactory` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static IconFactory instance;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/annotations/IconFactory.java" + line="38" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `Mapbox` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" private static Mapbox INSTANCE;" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/java/com/mapbox/mapboxsdk/Mapbox.java" + line="29" + column="3"/> + </issue> + + <issue + id="StaticFieldLeak" + message="Do not place Android context classes in static fields (static reference to `OfflineManager` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" + errorLine1=" // This object is implemented as a singleton" + errorLine2=" ^"> + <location + file="src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java" + line="42" + column="3"/> + </issue> + + <issue + id="MergeRootFrame" + message="This `<FrameLayout>` can be replaced with a `<merge>` tag" + errorLine1="<FrameLayout" + errorLine2="^"> + <location + file="src/main/res/layout/activity_simple_mapview.xml" + line="2" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.colorPrimary` appears to be unused" + errorLine1=" <color name="colorPrimary">@color/mapboxBlue</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="5" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.colorPrimaryDark` appears to be unused" + errorLine1=" <color name="colorPrimaryDark">@color/mapboxBlueDark</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapbox_my_location_ring` appears to be unused" + errorLine1=" <color name="mapbox_my_location_ring">@color/mapbox_blue</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/colors.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.colorAccent` appears to be unused" + errorLine1=" <color name="colorAccent">@color/mapboxRed</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="7" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.materialGrey` appears to be unused" + errorLine1=" <color name="materialGrey">#F5F5F5</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="9" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.materialDarkGrey` appears to be unused" + errorLine1=" <color name="materialDarkGrey">#DFDFDF</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="10" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxCyan` appears to be unused" + errorLine1=" <color name="mapboxCyan">#3BB2D0</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="13" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxGreen` appears to be unused" + errorLine1=" <color name="mapboxGreen">#56B881</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="14" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxBlue` appears to be unused" + errorLine1=" <color name="mapboxBlue">#3887BE</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="15" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxBlueDark` appears to be unused" + errorLine1=" <color name="mapboxBlueDark">#1F6EA5</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="16" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxPurple` appears to be unused" + errorLine1=" <color name="mapboxPurple">#8A8ACB</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="17" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxPurpleDark` appears to be unused" + errorLine1=" <color name="mapboxPurpleDark">#7171b2</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="18" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxPurpleLight` appears to be unused" + errorLine1=" <color name="mapboxPurpleLight">#A4A4E5</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="19" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxDenim` appears to be unused" + errorLine1=" <color name="mapboxDenim">#50667F</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="21" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxTeal` appears to be unused" + errorLine1=" <color name="mapboxTeal">#41AFA5</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="22" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxOrange` appears to be unused" + errorLine1=" <color name="mapboxOrange">#F9886C</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="23" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxRed` appears to be unused" + errorLine1=" <color name="mapboxRed">#E55E5E</color>" + errorLine2=" ~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="24" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxPink` appears to be unused" + errorLine1=" <color name="mapboxPink">#ED6498</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="25" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxYellow` appears to be unused" + errorLine1=" <color name="mapboxYellow">#f1f075</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="26" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxMustard` appears to be unused" + errorLine1=" <color name="mapboxMustard">#FBB03B</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="27" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxNavy` appears to be unused" + errorLine1=" <color name="mapboxNavy">#28353D</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="28" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapboxNavyDark` appears to be unused" + errorLine1=" <color name="mapboxNavyDark">#222B30</color>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/colors.xml" + line="29" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_infowindow_offset` appears to be unused" + errorLine1=" <dimen name="mapbox_infowindow_offset">-2dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="5" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_infowindow_line_width` appears to be unused" + errorLine1=" <dimen name="mapbox_infowindow_line_width">1.5dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="6" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_left_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_left_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="7" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_top_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_top_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="8" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_right_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_right_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="9" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_attribution_icon_bottom_padding` appears to be unused" + errorLine1=" <dimen name="mapbox_attribution_icon_bottom_padding">@dimen/mapbox_two_dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="10" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_two_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_two_dp">2dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="11" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_ten_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_ten_dp">10dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="14" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.dimen.mapbox_sixteen_dp` appears to be unused" + errorLine1=" <dimen name="mapbox_sixteen_dp">16dp</dimen>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml" + line="15" + column="12"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.drawable.mapbox_infowindow_icon_bg` appears to be unused"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/drawable-xxxhdpi/mapbox_infowindow_icon_bg.9.png"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.color.mapbox_material_bg_selector` appears to be unused" + errorLine1="<selector xmlns:android="http://schemas.android.com/apk/res/android">" + errorLine2="^"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/color/mapbox_material_bg_selector.xml" + line="2" + column="1"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_outdoors` appears to be unused" + errorLine1=" <string name="mapbox_style_outdoors" translatable="false">mapbox://styles/mapbox/outdoors-v10</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/strings.xml" + line="22" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_traffic_day` appears to be unused" + errorLine1=" <string name="mapbox_style_traffic_day" translatable="false">mapbox://styles/mapbox/traffic-day-v2</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/strings.xml" + line="27" + column="13"/> + </issue> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_style_traffic_night` appears to be unused" + errorLine1=" <string name="mapbox_style_traffic_night" translatable="false">mapbox://styles/mapbox/traffic-night-v2</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="/src/platform/android/MapboxGLAndroidSDK/src/main/res/values/strings.xml" + line="28" + column="13"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-hdpi`: mapbox_infowindow_icon_bg.9.png, mapbox_mapview_preview.jpg"> + <location + file="src/main/res/drawable-hdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-mdpi`: mapbox_infowindow_icon_bg.9.png, mapbox_mapview_preview.jpg"> + <location + file="src/main/res/drawable-mdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xhdpi`: mapbox_infowindow_icon_bg.9.png, mapbox_mapview_preview.jpg"> + <location + file="src/main/res/drawable-xhdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xxhdpi`: mapbox_infowindow_icon_bg.9.png (found in drawable-xxxhdpi)"> + <location + file="src/main/res/drawable-xxhdpi"/> + </issue> + + <issue + id="GoogleAppIndexingWarning" + message="App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW intent filter. See issue explanation for more details." + errorLine1=" <application" + errorLine2=" ^"> + <location + file="src/main/AndroidManifest.xml" + line="14" + column="5"/> + </issue> + + <issue + id="ContentDescription" + message="[Accessibility] Missing `contentDescription` attribute on image" + errorLine1="<ImageView xmlns:android="http://schemas.android.com/apk/res/android"" + errorLine2="^"> + <location + file="src/main/res/layout/mapbox_view_image_marker.xml" + line="2" + column="1"/> + </issue> + +</issues> diff --git a/platform/android/gradle-lint.gradle b/platform/android/gradle-lint.gradle new file mode 100644 index 0000000000..cbebeaa74a --- /dev/null +++ b/platform/android/gradle-lint.gradle @@ -0,0 +1,30 @@ +task ciLint(type: Copy) { + if (isLocalBuild()) { + from "${projectDir}/lint/lint-baseline-local.xml" + into "${projectDir}" + rename { String fileName -> + fileName.replace("lint-baseline-local.xml", "lint-baseline.xml") + } + } else { + from "${projectDir}/lint/lint-baseline-ci.xml" + into "${projectDir}" + rename { String fileName -> + fileName.replace("lint-baseline-ci.xml", "lint-baseline.xml") + } + } +} + +def isLocalBuild() { + if (System.getenv('IS_LOCAL_DEVELOPMENT') != null) { + return System.getenv('IS_LOCAL_DEVELOPMENT').toBoolean() + } + return true +} + +lint.dependsOn ciLint + +tasks.whenTaskAdded { task -> + if (task.name == 'lintVitalRelease') { + task.dependsOn ciLint + } +}
\ No newline at end of file |