Bug 1366644 - Part 3b: Use lint baseline to broaden Android lint coverage. r=maliu draft
authorNick Alexander <nalexander@mozilla.com>
Mon, 16 Oct 2017 12:47:56 -0700
changeset 681054 33f8590de5a4d7b84d706eb65e165c2eab36e5d6
parent 681048 0bdfa3967b838d5d4737467441bed5d60e725b5f
child 681056 6b50e42602329db7f0fa5c4b3e89d2e44debaf33
push id84745
push usernalexander@mozilla.com
push dateMon, 16 Oct 2017 22:33:47 +0000
reviewersmaliu
bugs1366644, 46561874
milestone58.0a1
Bug 1366644 - Part 3b: Use lint baseline to broaden Android lint coverage. r=maliu It's not possible -- or at least not obvious how -- to set the baseline per variant: see https://stackoverflow.com/q/46561874. For now, we'll just set the one baseline for the automation build (currently `officialPhotonDebug`). MozReview-Commit-ID: 6YpeudDpBn9
mobile/android/app/build.gradle
mobile/android/app/lint-baseline.xml
mobile/android/app/lint.xml
--- a/mobile/android/app/build.gradle
+++ b/mobile/android/app/build.gradle
@@ -33,17 +33,19 @@ android {
     }
 
     dexOptions {
         javaMaxHeapSize "2g"
         jumboMode = true
     }
 
     lintOptions {
+        baseline file("lint-baseline.xml")
         abortOnError true
+        warningsAsErrors true
     }
 
     buildTypes {
         // We have the following difficult situation.  Minification (Proguard) is only available per
         // Android-Gradle `buildType`.  Instrumentation (Robocop) is only available for exactly one
         // `buildType` (see Android-Gradle `testBuildType`, which defaults to "debug").  Local
         // developers expect to build and run tests against the "debug" build type.  Automation
         // needs to produce an instrumentation (Robocop) APK against a Fennec APK that will ship.
new file mode 100644
--- /dev/null
+++ b/mobile/android/app/lint-baseline.xml
@@ -0,0 +1,5919 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="4" by="lint 2.3.3">
+
+    <issue
+        id="MissingPermission"
+        message="Missing permissions required by KeyguardManager.KeyguardLock.disableKeyguard: android.permission.DISABLE_KEYGUARD"
+        errorLine1="                keyguardLock.disableKeyguard();"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/FennecInstrumentationTestRunner.java"
+            line="51"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="MissingPermission"
+        message="Missing permissions required by KeyguardManager.KeyguardLock.reenableKeyguard: android.permission.DISABLE_KEYGUARD"
+        errorLine1="            keyguardLock.reenableKeyguard();"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/FennecInstrumentationTestRunner.java"
+            line="76"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="ReferenceType"
+        message="Unexpected resource reference type; expected value of type `@integer/`"
+        errorLine1="    &lt;integer name=&quot;search_assist_launch_res&quot;>@drawable/search_launcher&lt;/integer>"
+        errorLine2="                                             ^">
+        <location
+            file="src/main/res/values-v21/integers.xml"
+            line="8"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="CommitTransaction"
+        message="This transaction should be completed with a `commit()` call"
+        errorLine1="                        fragment.show(R.id.tab_history_panel, fragmentManager.beginTransaction(), TAB_HISTORY_FRAGMENT_TAG);"
+        errorLine2="                                                                              ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java"
+            line="704"
+            column="79"/>
+    </issue>
+
+    <issue
+        id="ResourceAsColor"
+        message="Should pass resolved color instead of resource id here: `getResources().getColor(R.color.placeholder_grey)`"
+        errorLine1="        mTitleColor = a.getColor(R.styleable.CustomColorPreference_titleColor, R.color.placeholder_grey);"
+        errorLine2="                                                                               ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/activities/CustomColorPreference.java"
+            line="39"
+            column="80"/>
+    </issue>
+
+    <issue
+        id="ResourceAsColor"
+        message="Should pass resolved color instead of resource id here: `getResources().getColor(R.color.placeholder_grey)`"
+        errorLine1="        mSummaryColor = a.getColor(R.styleable.CustomColorPreference_summaryColor, R.color.placeholder_grey);"
+        errorLine2="                                                                                   ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/activities/CustomColorPreference.java"
+            line="40"
+            column="84"/>
+    </issue>
+
+    <issue
+        id="ResourceType"
+        message="Expected resource of type xml"
+        errorLine1="            parser = mContext.getResources().getXml(menuRes);"
+        errorLine2="                                                    ~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="59"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      getSyncPrefs().edit().putLong(PREF_KEY_LAST_SYNCED_TIMESTAMP, now).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/authenticator/AndroidFxAccount.java"
+            line="824"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      getReadingListPrefs().edit().clear().commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/authenticator/AndroidFxAccount.java"
+            line="866"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      getSyncPrefs().edit().clear().commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/authenticator/AndroidFxAccount.java"
+            line="871"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        syncPrefsEditor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/devices/FxAccountDeviceListUpdater.java"
+            line="149"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      prefs.edit().remove(CRYPTO5_KEYS_SERVER_RESPONSE_BODY).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/crypto/PersistedCrypto5Keys.java"
+            line="66"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      prefs.edit().putString(CRYPTO5_KEYS_SERVER_RESPONSE_BODY, keysJSON).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/crypto/PersistedCrypto5Keys.java"
+            line="75"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      prefs.edit().remove(CRYPTO5_KEYS_LAST_MODIFIED).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/crypto/PersistedCrypto5Keys.java"
+            line="92"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="    prefs.edit().putLong(CRYPTO5_KEYS_LAST_MODIFIED, lastModified).commit();"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/crypto/PersistedCrypto5Keys.java"
+            line="96"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      prefs.edit().remove(META_GLOBAL_SERVER_RESPONSE_BODY).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/PersistedMetaGlobal.java"
+            line="55"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      prefs.edit().putString(META_GLOBAL_SERVER_RESPONSE_BODY, json).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/PersistedMetaGlobal.java"
+            line="62"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      prefs.edit().remove(META_GLOBAL_LAST_MODIFIED).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/PersistedMetaGlobal.java"
+            line="75"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="    prefs.edit().putLong(META_GLOBAL_LAST_MODIFIED, lastModified).commit();"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/PersistedMetaGlobal.java"
+            line="79"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="            getPrefs().edit()"
+        errorLine2="            ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/Prefs.java"
+            line="38"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="            getPrefs().edit().putInt(VALUES_VERSION_PREF, AppGlobals.appVersionCode).commit();"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/Prefs.java"
+            line="43"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="            getPrefs().edit().commit();"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/Prefs.java"
+            line="44"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="    edit.commit();"
+        errorLine2="    ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/PrefsBackoffHandler.java"
+            line="33"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="    edit.commit();"
+        errorLine2="    ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/PrefsBackoffHandler.java"
+            line="43"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="      sharedPreferences.edit().putString(SyncConfiguration.PREF_ACCOUNT_GUID, accountGUID).commit();"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/SharedPreferencesClientsDataDelegate.java"
+            line="38"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="    sharedPreferences.edit().putLong(SyncConfiguration.PREF_NUM_CLIENTS, clientsCount).commit();"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/SharedPreferencesClientsDataDelegate.java"
+            line="87"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="    edit.commit();"
+        errorLine2="    ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/SyncConfiguration.java"
+            line="275"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="    edit.commit();"
+        errorLine2="    ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/SyncConfiguration.java"
+            line="339"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="                getSharedPreferences(prefsName, 0).edit().clear().commit();"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java"
+            line="45"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        pmEditor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java"
+            line="120"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        pmEditor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java"
+            line="120"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        pmEditor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java"
+            line="120"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        appEditor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java"
+            line="128"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        appEditor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java"
+            line="128"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        profileEditor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java"
+            line="129"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="                getSharedPreferences(prefsName, 0).edit().clear().commit();"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestImageDownloader.java"
+            line="51"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="                getSharedPreferences(prefsName, 0).edit().clear().commit();"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestSuggestedSites.java"
+            line="69"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        editor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/updater/UpdateService.java"
+            line="754"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        editor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/updater/UpdateService.java"
+            line="764"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        editor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/updater/UpdateService.java"
+            line="774"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        editor.commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/updater/UpdateService.java"
+            line="783"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ApplySharedPref"
+        message="Consider using `apply()` instead; `commit` writes its data to persistent storage immediately, whereas `apply` will handle it in the background"
+        errorLine1="        settings.edit().remove(keyName).commit();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testDistribution.java"
+            line="506"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="CommitPrefEdits"
+        message="`SharedPreferences.edit()` without a corresponding `commit()` or `apply()` call"
+        errorLine1="    this.editor = prefs.edit();"
+        errorLine2="                  ~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/background/common/EditorBranch.java"
+            line="22"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="CommitPrefEdits"
+        message="`SharedPreferences.edit()` without a corresponding `commit()` or `apply()` call"
+        errorLine1="        prefs.edit().putString(GeckoPreferences.PREFS_APP_UPDATE_LAST_BUILD_ID, AppConstants.MOZ_APP_BUILDID).apply();"
+        errorLine2="        ~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/updater/PostUpdateHandler.java"
+            line="90"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        return url != null &amp;&amp; url.toLowerCase().startsWith(page);"
+        errorLine2="                                  ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/AboutPages.java"
+            line="75"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="        logMsg = &quot;Send data: &quot; + String.format(&quot;%.2f&quot;, data.length / 1024.0) + &quot; kB&quot;;"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/utils/AbstractCommunicator.java"
+            line="136"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="        logMsg += &quot; Session Total:&quot; + String.format(&quot;%.2f&quot;, sBytesSentTotal / 1024.0) + &quot; kB&quot;;"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/utils/AbstractCommunicator.java"
+            line="137"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        super.setText(text.toString().toUpperCase(), type);"
+        errorLine2="                                      ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/AllCapsTextView.java"
+            line="19"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            final String titleInLowerCase = title.toString().toLowerCase();"
+        errorLine2="                                                             ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/BrowserSearch.java"
+            line="1219"
+            column="62"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            final String pattern = mSearchTerm.toLowerCase();"
+        errorLine2="                                               ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/BrowserSearch.java"
+            line="1220"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            uri = Uri.parse(&quot;content://&quot; + AppConstants.ANDROID_PACKAGE_NAME + &quot;.db.browser/&quot; + dataType.toString().toLowerCase());"
+        errorLine2="                                                                                                                    ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/DatabaseHelper.java"
+            line="43"
+            column="117"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="        return String.format(&quot;[%s,%s] %s (%d bytes) %s&quot;, getType(), getKind(), getId(), getSize(), getChecksum());"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/dlc/catalog/DownloadContent.java"
+            line="189"
+            column="16"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="                     sb.append(String.format(&quot;(%3d,%3d,%3d) &quot;, (agbr &amp; 0xFF), (agbr &amp; 0xFF00) >> 8, (agbr &amp; 0xFF0000) >> 16));"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/FennecNativeDriver.java"
+            line="238"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            return context.getString(panels.get(i).getTitleRes()).toUpperCase();"
+        errorLine2="                                                                  ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java"
+            line="175"
+            column="67"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        if (!provider.toLowerCase().contains(&quot;gps&quot;)) {"
+        errorLine2="                      ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/stumblerthread/scanners/GPSScanner.java"
+            line="200"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="        logMsg += String.format(&quot;%s Coord: %.4f,%.4f, Acc: %.0f, Speed: %.0f, Alt: %.0f, Bearing: %.1f&quot;, time, location.getLatitude(),"
+        errorLine2="                  ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/stumblerthread/scanners/GPSScanner.java"
+            line="221"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        url = url.toLowerCase();"
+        errorLine2="                  ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/restrictions/GuestProfileConfiguration.java"
+            line="66"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            return info.getTitle().toUpperCase();"
+        errorLine2="                                   ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/HomeAdapter.java"
+            line="76"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="                if (TextUtils.equals(panelType.mId, id.toLowerCase())) {"
+        errorLine2="                                                       ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java"
+            line="69"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="                if (TextUtils.equals(layoutType.mId, id.toLowerCase())) {"
+        errorLine2="                                                        ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java"
+            line="448"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="                if (TextUtils.equals(viewType.mId, id.toLowerCase())) {"
+        errorLine2="                                                      ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java"
+            line="500"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="                if (TextUtils.equals(itemType.mId, id.toLowerCase())) {"
+        errorLine2="                                                      ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java"
+            line="553"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="                if (TextUtils.equals(itemHandler.mId, id.toLowerCase())) {"
+        errorLine2="                                                         ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/HomeConfig.java"
+            line="605"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            return super.toString().toLowerCase();"
+        errorLine2="                                    ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/ImageLoader.java"
+            line="46"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        return str.substring(0, 1).toUpperCase() + str.substring(1);"
+        errorLine2="                                   ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/JavascriptBridgeTest.java"
+            line="105"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="                        if (album != null &amp;&amp; album.toLowerCase().contains(&quot;screenshot&quot;)) {"
+        errorLine2="                                                   ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java"
+            line="117"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        status = status.toUpperCase();"
+        errorLine2="                        ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/StructuredLogger.java"
+            line="79"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        status = status.toUpperCase();"
+        errorLine2="                        ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/StructuredLogger.java"
+            line="104"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            final int start = value.toLowerCase().indexOf(searchTerm.toLowerCase());"
+        errorLine2="                                    ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/search/java/org/mozilla/search/autocomplete/SuggestionsFragment.java"
+            line="168"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="            final int start = value.toLowerCase().indexOf(searchTerm.toLowerCase());"
+        errorLine2="                                                                     ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/search/java/org/mozilla/search/autocomplete/SuggestionsFragment.java"
+            line="168"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        button.setText(title.toUpperCase());"
+        errorLine2="                             ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/TabMenuStripLayout.java"
+            line="100"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="        fAssertNotNull(String.format(&quot;Tab at index %d is not null&quot;, index), tabView);"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/components/TabStripComponent.java"
+            line="39"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="            String fileInfo = String.format(&quot;existence: %b, can write: %b, size: %d.&quot;,"
+        errorLine2="                              ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/telemetry/stores/TelemetryJSONFilePingStore.java"
+            line="237"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="        final String dbAssetPath = String.format(&quot;browser_db_upgrade&quot; + File.separator + String.format(&quot;v%d.db&quot;, version));"
+        errorLine2="                                                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testBrowserDatabaseHelperUpgrades.java"
+            line="144"
+            column="90"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
+        errorLine1="        mAsserter.ok(!s.toLowerCase().contains(&quot;%2f&quot;), &quot;Path characters aren&apos;t escaped.&quot;, null);"
+        errorLine2="                        ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testJarReader.java"
+            line="23"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="DefaultLocale"
+        message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
+        errorLine1="                             String.format(&quot;Should have %d results&quot;, limit));"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testSearchHistoryProvider.java"
+            line="142"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="InconsistentLayout"
+        message="The id &quot;back&quot; in layout &quot;browser_toolbar&quot; is missing from the following layout configurations: layout (present in layout-large-v11)"
+        errorLine1="        android:id=&quot;@+id/back&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+            line="25"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="InconsistentLayout"
+        message="The id &quot;url_bar_translating_edge&quot; in layout &quot;browser_toolbar&quot; is missing from the following layout configurations: layout-large-v11 (present in layout)"
+        errorLine1="        android:id=&quot;@+id/url_bar_translating_edge&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout/browser_toolbar.xml"
+            line="31"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="InconsistentLayout"
+        message="The id &quot;forward&quot; in layout &quot;browser_toolbar&quot; is missing from the following layout configurations: layout (present in layout-large-v11)"
+        errorLine1="        android:id=&quot;@+id/forward&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+            line="38"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="InconsistentLayout"
+        message="The id &quot;menu_items&quot; in layout &quot;browser_toolbar&quot; is missing from the following layout configurations: layout (present in layout-large-v11)"
+        errorLine1="        android:id=&quot;@+id/menu_items&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+            line="61"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="InconsistentLayout"
+        message="The id &quot;menu_margin&quot; in layout &quot;browser_toolbar&quot; is missing from the following layout configurations: layout (present in layout-large-v11)"
+        errorLine1="        android:id=&quot;@id/menu_margin&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+            line="86"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="InlinedApi"
+        message="Field requires API level 21 (current min is 16): `android.app.Notification#VISIBILITY_PRIVATE`"
+        errorLine1="            Notification.VISIBILITY_PRIVATE : Notification.VISIBILITY_PUBLIC;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="408"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="InlinedApi"
+        message="Field requires API level 21 (current min is 16): `android.app.Notification#VISIBILITY_PUBLIC`"
+        errorLine1="            Notification.VISIBILITY_PRIVATE : Notification.VISIBILITY_PUBLIC;"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="408"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="InlinedApi"
+        message="Field requires API level 19 (current min is 16): `android.content.Context#PRINT_SERVICE`"
+        errorLine1="        PrintManager printManager = (PrintManager) context.getSystemService(Context.PRINT_SERVICE);"
+        errorLine2="                                                                            ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="61"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="InlinedApi"
+        message="Field requires API level 19 (current min is 16): `android.print.PrintDocumentInfo#CONTENT_TYPE_DOCUMENT`"
+        errorLine1="                PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(filePath).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();"
+        errorLine2="                                                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="106"
+            column="96"/>
+    </issue>
+
+    <issue
+        id="InlinedApi"
+        message="Field requires API level 17 (current min is 16): `android.view.View#TEXT_DIRECTION_LOCALE`"
+        errorLine1="            ViewUtil.setTextDirection(mTitle, TEXT_DIRECTION_LOCALE);"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/java/org/mozilla/gecko/toolbar/ToolbarDisplayLayout.java"
+            line="289"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="InlinedApi"
+        message="Field requires API level 17 (current min is 16): `android.view.View#TEXT_DIRECTION_FIRST_STRONG`"
+        errorLine1="            ViewUtil.setTextDirection(mTitle, TEXT_DIRECTION_FIRST_STRONG);"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/java/org/mozilla/gecko/toolbar/ToolbarDisplayLayout.java"
+            line="292"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="Instantiatable"
+        message="This class should be public (org.mozilla.gecko.ActionModeCompatView)"
+        errorLine1="    public ActionModeCompatView(Context context, AttributeSet attrs, int style) {"
+        errorLine2="           ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/ActionModeCompatView.java"
+            line="50"
+            column="12"/>
+    </issue>
+
+    <issue
+        id="Instantiatable"
+        message="This class should be public (org.mozilla.gecko.home.BookmarkScreenshotRow)"
+        errorLine1="    public BookmarkScreenshotRow(Context context, AttributeSet attrs) {"
+        errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/BookmarkScreenshotRow.java"
+            line="37"
+            column="12"/>
+    </issue>
+
+    <issue
+        id="Instantiatable"
+        message="This class should be public (org.mozilla.gecko.tabs.PrivateTabsPanel)"
+        errorLine1="    public PrivateTabsPanel(final Context context, final AttributeSet attrs) {"
+        errorLine2="           ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/tabs/PrivateTabsPanel.java"
+            line="37"
+            column="12"/>
+    </issue>
+
+    <issue
+        id="Instantiatable"
+        message="This class should be public (org.mozilla.gecko.home.SearchEngineRow)"
+        errorLine1="    public SearchEngineRow(Context context, AttributeSet attrs, int defStyle) {"
+        errorLine2="           ~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/java/org/mozilla/gecko/home/SearchEngineRow.java"
+            line="95"
+            column="12"/>
+    </issue>
+
+    <issue
+        id="Instantiatable"
+        message="This class should be public (org.mozilla.gecko.widget.SquaredImageView)"
+        errorLine1="    public SquaredImageView(Context context, AttributeSet attrs) {"
+        errorLine2="           ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/SquaredImageView.java"
+            line="12"
+            column="12"/>
+    </issue>
+
+    <issue
+        id="Instantiatable"
+        message="This class should be public (org.mozilla.gecko.tabs.TabsPanel.TabsPanelToolbar)"
+        errorLine1="        public TabsPanelToolbar(Context context, AttributeSet attrs) {"
+        errorLine2="               ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/tabs/TabsPanel.java"
+            line="322"
+            column="16"/>
+    </issue>
+
+    <issue
+        id="Instantiatable"
+        message="This class should be public (org.mozilla.gecko.toolbar.ToolbarRoundButton)"
+        errorLine1="        final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ToolbarRoundButton);"
+        errorLine2="                                                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/java/org/mozilla/gecko/toolbar/ToolbarRoundButton.java"
+            line="44"
+            column="81"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;Should not happen: Can&apos;t build telemetry extra JSON&quot;, e);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/dlc/DownloadContentTelemetry.java"
+            line="58"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;Should not happen: Can&apos;t build telemetry extra JSON&quot;, e);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/dlc/DownloadContentTelemetry.java"
+            line="76"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;Should not happen: Can&apos;t build telemetry extra JSON&quot;, e);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/dlc/DownloadContentTelemetry.java"
+            line="90"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;Should not happen: Can&apos;t build telemetry extra JSON&quot;, e);"
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/dlc/DownloadContentTelemetry.java"
+            line="107"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `android.graphics.Bitmap#getAllocationByteCount`"
+        errorLine1="                byteCount = b.getAllocationByteCount();"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/preferences/LocaleListPreference.java"
+            line="67"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaSession#release`"
+        errorLine1="        mSession.release();"
+        errorLine2="                 ~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="109"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getTransportControls`"
+        errorLine1="                mController.getTransportControls().play();"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="214"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.TransportControls#play`"
+        errorLine1="                mController.getTransportControls().play();"
+        errorLine2="                                                   ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="214"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getTransportControls`"
+        errorLine1="                mController.getTransportControls().pause();"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="217"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.TransportControls#pause`"
+        errorLine1="                mController.getTransportControls().pause();"
+        errorLine2="                                                   ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="217"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getTransportControls`"
+        errorLine1="                mController.getTransportControls().stop();"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="220"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.TransportControls#stop`"
+        errorLine1="                mController.getTransportControls().stop();"
+        errorLine2="                                                   ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="220"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getTransportControls`"
+        errorLine1="                mController.getTransportControls().sendCustomAction(ACTION_PAUSE_BY_AUDIO_FOCUS, null);"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="223"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.TransportControls#sendCustomAction`"
+        errorLine1="                mController.getTransportControls().sendCustomAction(ACTION_PAUSE_BY_AUDIO_FOCUS, null);"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="223"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getTransportControls`"
+        errorLine1="                mController.getTransportControls().sendCustomAction(ACTION_RESUME_BY_AUDIO_FOCUS, null);"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="226"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.TransportControls#sendCustomAction`"
+        errorLine1="                mController.getTransportControls().sendCustomAction(ACTION_RESUME_BY_AUDIO_FOCUS, null);"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="226"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getPlaybackInfo`"
+        errorLine1="        int currentVolume = mController.getPlaybackInfo().getCurrentVolume();"
+        errorLine2="                                        ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="242"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.PlaybackInfo#getCurrentVolume`"
+        errorLine1="        int currentVolume = mController.getPlaybackInfo().getCurrentVolume();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="242"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getPlaybackInfo`"
+        errorLine1="        int maxVolume = mController.getPlaybackInfo().getMaxVolume();"
+        errorLine2="                                    ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="243"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.PlaybackInfo#getMaxVolume`"
+        errorLine1="        int maxVolume = mController.getPlaybackInfo().getMaxVolume();"
+        errorLine2="                                                      ~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="243"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#adjustVolume`"
+        errorLine1="            mController.adjustVolume(adjustDirection, 0);"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="255"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `new android.media.session.MediaSession`"
+        errorLine1="            mSession = new MediaSession(getApplicationContext(),"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="290"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaSession#getSessionToken`"
+        errorLine1="                                              mSession.getSessionToken());"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="293"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `new android.media.session.MediaController`"
+        errorLine1="            Log.e(LOGTAG, &quot;can&apos;t create MediaSession and MediaController!&quot;);"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="295"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController#getPlaybackInfo`"
+        errorLine1="        int volumeControl = mController.getPlaybackInfo().getVolumeControl();"
+        errorLine2="                                        ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="299"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaController.PlaybackInfo#getVolumeControl`"
+        errorLine1="        int volumeControl = mController.getPlaybackInfo().getVolumeControl();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="299"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.media.session.MediaSession#setCallback`"
+        errorLine1="        mSession.setCallback(new MediaSession.Callback() {"
+        errorLine2="                 ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="307"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `new android.media.session.MediaSession.Callback`"
+        errorLine1="        mSession.setCallback(new MediaSession.Callback() {"
+        errorLine2="                                              ~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="307"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 21 (current min is 16): `android.media.session.MediaSession.Callback`"
+        errorLine1="        mSession.setCallback(new MediaSession.Callback() {"
+        errorLine2="                                              ~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="307"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `new android.app.Notification.MediaStyle`"
+        errorLine1="        final Notification.MediaStyle style = new Notification.MediaStyle();"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="403"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.app.Notification.MediaStyle#setShowActionsInCompactView`"
+        errorLine1="        style.setShowActionsInCompactView(0);"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="404"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 20 (current min is 16): `android.app.Notification.Builder#addAction`"
+        errorLine1="            .addAction(createNotificationAction())"
+        errorLine2="             ~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="418"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Notification.Builder#setShowWhen`"
+        errorLine1="            .setShowWhen(false)"
+        errorLine2="             ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="420"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 16): `android.app.Notification.Builder#setVisibility`"
+        errorLine1="            .setVisibility(visibility)"
+        errorLine2="             ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="422"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 20 (current min is 16): `android.app.Notification.Action.Builder#build`"
+        errorLine1="        return new Notification.Action.Builder(icon, title, pendingIntent).build();"
+        errorLine2="                                                                           ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="444"
+            column="76"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 20 (current min is 16): `new android.app.Notification.Action.Builder`"
+        errorLine1="        return new Notification.Action.Builder(icon, title, pendingIntent).build();"
+        errorLine2="                                       ~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"
+            line="444"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `new android.print.PrintDocumentAdapter`"
+        errorLine1="        PrintDocumentAdapter pda = new PrintDocumentAdapter() {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="66"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 19 (current min is 16): `android.print.PrintDocumentAdapter`"
+        errorLine1="        PrintDocumentAdapter pda = new PrintDocumentAdapter() {"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="66"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `android.print.PrintDocumentAdapter.WriteResultCallback#onWriteFinished`"
+        errorLine1="                            callback.onWriteFinished(new PageRange[] { PageRange.ALL_PAGES });"
+        errorLine2="                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="86"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 16): `android.print.PageRange#ALL_PAGES`"
+        errorLine1="                            callback.onWriteFinished(new PageRange[] { PageRange.ALL_PAGES });"
+        errorLine2="                                                                                 ~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="86"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `android.print.PrintDocumentAdapter.LayoutResultCallback#onLayoutCancelled`"
+        errorLine1="                    callback.onLayoutCancelled();"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="102"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `android.print.PrintDocumentInfo.Builder#build`"
+        errorLine1="                PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(filePath).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();"
+        errorLine2="                                                                                                                                        ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="106"
+            column="137"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `android.print.PrintDocumentInfo.Builder#setContentType`"
+        errorLine1="                PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(filePath).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();"
+        errorLine2="                                                                                ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="106"
+            column="81"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `new android.print.PrintDocumentInfo.Builder`"
+        errorLine1="                PrintDocumentInfo pdi = new PrintDocumentInfo.Builder(filePath).setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build();"
+        errorLine2="                                                              ~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="106"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `android.print.PrintDocumentAdapter.LayoutResultCallback#onLayoutFinished`"
+        errorLine1="                callback.onLayoutFinished(pdi, true);"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="107"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `android.print.PrintManager#print`"
+        errorLine1="        printManager.print(jobName, pda, null);"
+        errorLine2="                     ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"
+            line="123"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Presentation#dismiss`"
+        errorLine1="            presentation.dismiss();"
+        errorLine2="                         ~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="73"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Presentation#setDeviceId`"
+        errorLine1="        virtualPresentation.setDeviceId(deviceId);"
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="93"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Presentation#setScreenId`"
+        errorLine1="        virtualPresentation.setScreenId(screenId);"
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="94"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Presentation#show`"
+        errorLine1="            presentation.show();"
+        errorLine2="                         ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="98"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Presentation#getContext`"
+        errorLine1="        view = new PresentationView(getContext(), deviceId, screenId);"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="131"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Presentation#getContext`"
+        errorLine1="        layout = new RelativeLayout(getContext());"
+        errorLine2="                                    ~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="136"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.app.Presentation#setContentView`"
+        errorLine1="        setContentView(layout);"
+        errorLine2="        ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="141"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.view.ViewGroup.MarginLayoutParams#getMarginStart`"
+        errorLine1="                final int start = getLeft() + lp.getMarginStart();"
+        errorLine2="                                                 ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/tabs/TabPanelBackButton.java"
+            line="51"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.widget.TextView#setTextDirection`"
+        errorLine1="            textView.setTextDirection(textDirection);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/util/ViewUtil.java"
+            line="174"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>12dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="77"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>7dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="79"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>@dimen/dialog_switchpreferenceview_padding&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="95"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>@dimen/dialog_switchpreferenceview_padding&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="97"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>15dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="127"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>10dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="129"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>16dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="250"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>16dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="252"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>10dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="267"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>10dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="269"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>3dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="561"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>3dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="563"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:layout_marginStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:layout_marginStart&quot;>5dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="573"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:layout_marginEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:layout_marginEnd&quot;>5dip&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="575"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:layout_marginStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:layout_marginStart&quot;>16dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="601"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:layout_marginEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:layout_marginEnd&quot;>16dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="603"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>12dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="609"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>12dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="611"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>15dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="684"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>15dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="686"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>15dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="711"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>15dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="713"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>32dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="768"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>32dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="770"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:layout_marginStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:layout_marginStart&quot;>8dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="790"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:layout_marginEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:layout_marginEnd&quot;>8dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="792"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingStart` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingStart&quot;>8dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="815"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="`android:paddingEnd` requires API level 17 (current min is 16)"
+        errorLine1="        &lt;item name=&quot;android:paddingEnd&quot;>8dp&lt;/item>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="817"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="OldTargetApi"
+        message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details."
+        errorLine1="              android:targetSdkVersion=&quot;23&quot;/>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="10"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="SdCardPath"
+        message="Do not hardcode &quot;/sdcard/&quot;; use `Environment.getExternalStorageDirectory().getPath()` instead"
+        errorLine1="    public static final String DEFAULT_ROOT_PATH = &quot;/mnt/sdcard/tests&quot;;"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/BaseRobocopTest.java"
+            line="44"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="SdCardPath"
+        message="Do not hardcode &quot;`/data/`&quot;; use `Context.getFilesDir().getPath()` instead"
+        errorLine1="            System.load(&quot;/data/data/&quot; + AppConstants.ANDROID_PACKAGE_NAME + &quot;/lib/libmozglue.so&quot;);"
+        errorLine2="                        ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/background/nativecode/NativeCrypto.java"
+            line="26"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="SdCardPath"
+        message="Do not hardcode &quot;/sdcard/&quot;; use `Environment.getExternalStorageDirectory().getPath()` instead"
+        errorLine1="    private static final String TEST_FILENAME = &quot;/mnt/sdcard/my-favorite-martian.png&quot;;"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testFilePicker.java"
+            line="15"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="SimpleDateFormat"
+        message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
+        errorLine1="                mMinDate.setTime(new SimpleDateFormat(dateFormat).parse(minDateValue));"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/DateTimePicker.java"
+            line="235"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="SimpleDateFormat"
+        message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
+        errorLine1="                mMaxDate.setTime(new SimpleDateFormat(dateFormat).parse(maxDateValue));"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/DateTimePicker.java"
+            line="246"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="SimpleDateFormat"
+        message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
+        errorLine1="                mTempDate.setTime(new SimpleDateFormat(dateFormat).parse(dateTimeValue));"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/DateTimePicker.java"
+            line="258"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="SimpleDateFormat"
+        message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
+        errorLine1="        SimpleDateFormat formatter = new SimpleDateFormat(&quot;HH:mm:ss&quot;);"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/stumblerthread/scanners/GPSScanner.java"
+            line="219"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="SimpleDateFormat"
+        message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
+        errorLine1="                            calendar.setTime(new SimpleDateFormat(&quot;yyyy-MM-dd&quot;).parse(mValue));"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/prompts/PromptInput.java"
+            line="193"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="SimpleDateFormat"
+        message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
+        errorLine1="                        calendar.setTime(new SimpleDateFormat(&quot;HH:mm&quot;).parse(mValue));"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/prompts/PromptInput.java"
+            line="214"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="SimpleDateFormat"
+        message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
+        errorLine1="            return new SimpleDateFormat(dateFormat).format(calendar.getTime());"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/prompts/PromptInput.java"
+            line="235"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="UnusedAttribute"
+        message="Attribute `relinquishTaskIdentity` is only used in API level 21 and higher (current min is 16)"
+        errorLine1="            android:relinquishTaskIdentity=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="121"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="UnusedAttribute"
+        message="Attribute `elevation` is only used in API level 21 and higher (current min is 16)"
+        errorLine1="        android:elevation=&quot;4dp&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/customtabs_activity.xml"
+            line="19"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="UnusedAttribute"
+        message="Attribute `elevation` is only used in API level 21 and higher (current min is 16)"
+        errorLine1="        android:elevation=&quot;15dp&quot;>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/pwa_confirm.xml"
+            line="19"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="UnusedAttribute"
+        message="Attribute `widgetCategory` is only used in API level 17 and higher (current min is 16)"
+        errorLine1="    android:widgetCategory=&quot;home_screen&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/xml/search_widget_info.xml"
+            line="10"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ValidFragment"
+        message="The default constructor must be public"
+        errorLine1="    private PinSiteDialog() {"
+        errorLine2="            ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PinSiteDialog.java"
+            line="71"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="WifiManagerPotentialLeak"
+        message="The WIFI_SERVICE must be looked up on the Application context or memory will leak on devices &lt; Android N. Try changing `mContext` to `mContext.getApplicationContext()` "
+        errorLine1="        return (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/stumbler/java/org/mozilla/mozstumbler/service/stumblerthread/scanners/WifiScanner.java"
+            line="215"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;always&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu-large/browser_app_menu.xml"
+            line="16"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;always&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu-xlarge/browser_app_menu.xml"
+            line="16"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;always&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu/browser_app_menu.xml"
+            line="16"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;always&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu/browser_app_menu.xml"
+            line="21"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;always&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu/browser_app_menu.xml"
+            line="26"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;ifRoom&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu-large/browser_app_menu.xml"
+            line="31"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;always&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu-xlarge/browser_app_menu.xml"
+            line="31"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;always&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu/browser_app_menu.xml"
+            line="31"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;ifRoom&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu-large/browser_app_menu.xml"
+            line="36"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;ifRoom&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu-xlarge/browser_app_menu.xml"
+            line="36"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="          android:showAsAction=&quot;ifRoom&quot;/>"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu/browser_app_menu.xml"
+            line="36"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="        android:showAsAction=&quot;always&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu/customtabs_menu.xml"
+            line="15"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="        android:showAsAction=&quot;always&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu/customtabs_menu.xml"
+            line="21"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="AppCompatResource"
+        message="Should use `app:showAsAction` with the appcompat library with `xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;`"
+        errorLine1="       android:showAsAction=&quot;never&quot;"
+        errorLine2="       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/menu-v11/preferences_search_menu.xml"
+            line="9"
+            column="8"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        final View layout = inflater.inflate(R.layout.anchored_popup, null);"
+        errorLine2="                                                                      ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/AnchoredPopup.java"
+            line="61"
+            column="71"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="            convertView = inflater.inflate(R.layout.search_suggestions_row, null);"
+        errorLine2="                                                                            ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/search/java/org/mozilla/search/autocomplete/AutoCompleteAdapter.java"
+            line="49"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mView = inflater.inflate(R.layout.basic_color_picker_dialog, null);"
+        errorLine2="                                                                     ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/prompts/ColorPickerInput.java"
+            line="35"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mIdentity = (LinearLayout) inflater.inflate(R.layout.customtabs_site_identity, null);"
+        errorLine2="                                                                                       ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/customtabs/CustomTabsSecurityPopup.java"
+            line="88"
+            column="88"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        final View editView = LayoutInflater.from(context).inflate(R.layout.bookmark_edit, null);"
+        errorLine2="                                                                                           ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/EditBookmarkDialog.java"
+            line="193"
+            column="92"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="                .inflate(R.layout.extension_permissions_dialog, null);"
+        errorLine2="                                                                ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/extensions/ExtensionPermissionsHelper.java"
+            line="54"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="            mAutoCompleteList = (ListView) inflater.inflate(R.layout.autocomplete_list, null);"
+        errorLine2="                                                                                        ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/FormAssistPopup.java"
+            line="142"
+            column="89"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="            mValidationMessage = (RelativeLayout) inflater.inflate(R.layout.validation_message, null);"
+        errorLine2="                                                                                                ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/FormAssistPopup.java"
+            line="217"
+            column="97"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mPrimaryActionItemBar = (DefaultActionItemBar) LayoutInflater.from(context).inflate(R.layout.menu_action_bar, null);"
+        errorLine2="                                                                                                                      ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenu.java"
+            line="154"
+            column="119"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mSecondaryActionItemBar = (DefaultActionItemBar) LayoutInflater.from(context).inflate(R.layout.menu_secondary_action_bar, null);"
+        errorLine2="                                                                                                                                  ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenu.java"
+            line="155"
+            column="131"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mQuickShareActionItemBar = (DefaultActionItemBar) LayoutInflater.from(context).inflate(R.layout.menu_secondary_action_bar, null);"
+        errorLine2="                                                                                                                                   ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenu.java"
+            line="156"
+            column="132"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        final GridView view = (GridView) LayoutInflater.from(context).inflate(R.layout.icon_grid, null, false);"
+        errorLine2="                                                                                                  ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/prompts/IconGridInput.java"
+            line="70"
+            column="99"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="                        R.layout.login_edit_dialog, null);"
+        errorLine2="                                                    ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/LoginDoorHanger.java"
+            line="114"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mPanel = (CardView) inflater.inflate(R.layout.menu_popup, null);"
+        errorLine2="                                                                  ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/MenuPopup.java"
+            line="42"
+            column="67"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="            view = LayoutInflater.from(getContext()).inflate(R.layout.home_empty_panel, null);"
+        errorLine2="                                                                                        ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelLayout.java"
+            line="446"
+            column="89"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="                    .inflate(R.layout.panel_item_container, null);"
+        errorLine2="                                                            ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelRecyclerViewAdapter.java"
+            line="28"
+            column="61"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        View card = inflater.inflate(R.layout.activity_stream_contextmenu_popupmenu, null);"
+        errorLine2="                                                                                     ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/menu/PopupContextMenu.java"
+            line="50"
+            column="86"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        ListView listView = (ListView) mInflater.inflate(R.layout.select_dialog_list, null);"
+        errorLine2="                                                                                      ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/prompts/Prompt.java"
+            line="315"
+            column="87"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mIdentity = (LinearLayout) inflater.inflate(R.layout.site_identity, null);"
+        errorLine2="                                                                            ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/toolbar/SiteIdentityPopup.java"
+            line="115"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        mHost = (TabHost) inflater.inflate(R.layout.tab_prompt_input, null);"
+        errorLine2="                                                                      ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/prompts/TabInput.java"
+            line="49"
+            column="71"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        toastLayout = layoutInflater.inflate(R.layout.tab_queue_toast, null);"
+        errorLine2="                                                                       ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/tabqueue/TabQueueService.java"
+            line="102"
+            column="72"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="                final TopSitesPage page = (TopSitesPage) inflater.inflate(R.layout.activity_stream_topsites_page, null, false);"
+        errorLine2="                                                                                                                  ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/activitystream/homepanel/topsites/TopSitesPagerAdapter.java"
+            line="105"
+            column="115"/>
+    </issue>
+
+    <issue
+        id="InflateParams"
+        message="Avoid passing `null` as the view root (needed to resolve layout parameters on the inflated layout&apos;s root element)"
+        errorLine1="        final View panelDialogView = inflater.inflate(R.layout.preference_topsites_panel_dialog, null);"
+        errorLine2="                                                                                                 ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/preferences/TopSitesPanelsPreference.java"
+            line="28"
+            column="98"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 28 (GeckoFilePickerResultHandler)"
+        errorLine1="                    Log.i(LOGTAG, &quot;Error writing file&quot;, ex);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/FilePickerResultHandler.java"
+            line="246"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (RobocopMotionEventHelper)"
+        errorLine1="        Log.i(LOGTAG, &quot;Initialized using offset (&quot; + mSurfaceOffsetX + &quot;,&quot; + mSurfaceOffsetY + &quot;)&quot;);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/MotionEventHelper.java"
+            line="41"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (RobocopMotionEventHelper)"
+        errorLine1="        Log.d(LOGTAG, &quot;Triggering down at (&quot; + x + &quot;,&quot; + y + &quot;)&quot;);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/MotionEventHelper.java"
+            line="55"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (RobocopMotionEventHelper)"
+        errorLine1="        Log.d(LOGTAG, &quot;Triggering move to (&quot; + x + &quot;,&quot; + y + &quot;)&quot;);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/MotionEventHelper.java"
+            line="72"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (RobocopMotionEventHelper)"
+        errorLine1="        Log.d(LOGTAG, &quot;Triggering up at (&quot; + x + &quot;,&quot; + y + &quot;)&quot;);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/MotionEventHelper.java"
+            line="88"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 26 (RobocopMotionEventReplayer)"
+        errorLine1="        Log.i(LOGTAG, &quot;Initialized using offset (&quot; + mSurfaceOffsetX + &quot;,&quot; + mSurfaceOffsetY + &quot;)&quot;);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/MotionEventReplayer.java"
+            line="45"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 26 (RobocopMotionEventReplayer)"
+        errorLine1="                    Log.v(LOGTAG, &quot;Injecting &quot; + event.toString());"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/MotionEventReplayer.java"
+            line="180"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoMultiPrefPreference)"
+        errorLine1="                    Log.i(LOGTAG, &quot;Err&quot;, ex);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/preferences/MultiPrefMultiChoicePreference.java"
+            line="96"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 25 (GeckoNotificationReceiver)"
+        errorLine1="            Log.e(LOGTAG, &quot;handleNotificationEvent: empty data&quot;);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationReceiver.java"
+            line="31"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoOverlayDialogButton)"
+        errorLine1="                        Log.e(LOGTAG, &quot;enabledOnClickListener is null.&quot;);"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/overlays/ui/OverlayDialogButton.java"
+            line="67"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 25 (RemotePresentationService)"
+        errorLine1="            Log.e(LOGTAG, &quot;Unable to show presentation, display was removed.&quot;, ex);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"
+            line="100"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                Log.d(LOG_TAG, &quot;Found default engine name in SharedPreferences: &quot; + name);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="271"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                    Log.d(LOG_TAG, &quot;Found default searchplugin locale in distribution Preferences.&quot;);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="318"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                    Log.d(LOG_TAG, &quot;Found default engine name in distribution LocalizablePreferences override.&quot;);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="329"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                    Log.d(LOG_TAG, &quot;Found default engine name in distribution LocalizablePreferences.&quot;);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="338"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error getting search engine name from preferences.json&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="343"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error parsing preferences.json&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="345"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                    Log.e(LOG_TAG, &quot;Error closing InputStream&quot;, e);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="368"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                Log.e(LOG_TAG, &quot;Country code fetch failed&quot;);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="416"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Country code fetch failed&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="424"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                        Log.d(LOG_TAG, &quot;Found region-specific default engine name in browsersearch.json.&quot;);"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="454"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                Log.d(LOG_TAG, &quot;Found default engine name in browsersearch.json.&quot;);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="462"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error getting search engine name from browsersearch.json&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="466"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error parsing browsersearch.json&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="468"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Could not create search engine from name: &quot; + name);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="500"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Could not find search plugin files in distribution directory&quot;);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="559"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error reading list.json&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="586"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error parsing list.json&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="589"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error creating shipped search engine from name: &quot; + name, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="613"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Could not find search plugin files in profile directory&quot;);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="635"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="                Log.e(LOG_TAG, &quot;Error creating search engine from name: &quot; + name, e);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="658"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Exception creating search engine&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="682"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (GeckoSearchEngineManager)"
+        errorLine1="            Log.e(LOG_TAG, &quot;Error reading fallback locale from chrome registry&quot;, e);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/search/SearchEngineManager.java"
+            line="750"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 24 (SearchPreferenceActivity)"
+        errorLine1="                    Log.e(LOG_TAG, &quot;Error clearing search history.&quot;);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/search/java/org/mozilla/search/SearchPreferenceActivity.java"
+            line="100"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="SQLiteString"
+        message="Using column type STRING; did you mean to use TEXT? (STRING is a numeric type and its value can be adjusted; for example, strings that look like integers can drop leading zeroes. See issue explanation for details.)"
+        errorLine1="        db.execSQL(create);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/db/URLImageDataTable.java"
+            line="47"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="SQLiteString"
+        message="Using column type STRING; did you mean to use TEXT? (STRING is a numeric type and its value can be adjusted; for example, strings that look like integers can drop leading zeroes. See issue explanation for details.)"
+        errorLine1="        db.execSQL(&quot;ALTER TABLE &quot; + TABLE +"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/db/URLImageDataTable.java"
+            line="51"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="StateListReachable"
+        message="This item is unreachable because a previous item (item #1) is a more general match than this one"
+        errorLine1="    &lt;item android:state_focused=&quot;true&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/drawable/tab_thumbnail.xml"
+            line="19"
+            column="5"/>
+        <location
+            file="src/main/res/drawable/tab_thumbnail.xml"
+            line="9"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatTextView` instead"
+        errorLine1="public class AllCapsTextView extends TextView {"
+        errorLine2="                                     ~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/AllCapsTextView.java"
+            line="11"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatEditText` instead"
+        errorLine1="public class BackCaptureEditText extends EditText {"
+        errorLine2="                                         ~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/search/java/org/mozilla/search/ui/BackCaptureEditText.java"
+            line="16"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatEditText` instead"
+        errorLine1="public class ClickableWhenDisabledEditText extends EditText {"
+        errorLine2="                                                   ~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/ClickableWhenDisabledEditText.java"
+            line="13"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatTextView` instead"
+        errorLine1="public class EllipsisTextView extends TextView {"
+        errorLine2="                                      ~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/EllipsisTextView.java"
+            line="18"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatRadioButton` instead"
+        errorLine1="    private static class FacetButton extends RadioButton {"
+        errorLine2="                                             ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/search/java/org/mozilla/search/ui/FacetBar.java"
+            line="85"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatTextView` instead"
+        errorLine1="public class MenuItemDefault extends TextView"
+        errorLine2="                                     ~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/MenuItemDefault.java"
+            line="18"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatImageView` instead"
+        errorLine1="public class PanelHeaderView extends ImageView {"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelHeaderView.java"
+            line="8"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatImageView` instead"
+        errorLine1="final class SquaredImageView extends ImageView {"
+        errorLine2="                                     ~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/SquaredImageView.java"
+            line="7"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatImageButton` instead"
+        errorLine1="public class TabPanelBackButton extends ImageButton {"
+        errorLine2="                                        ~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/tabs/TabPanelBackButton.java"
+            line="18"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatEditText` instead"
+        errorLine1="public class ThemedEditText extends android.widget.EditText"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedEditText.java"
+            line="22"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatImageButton` instead"
+        errorLine1="public class ThemedImageButton extends android.widget.ImageButton"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedImageButton.java"
+            line="22"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatImageView` instead"
+        errorLine1="public class ThemedImageView extends android.widget.ImageView"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedImageView.java"
+            line="22"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="AppCompatCustomView"
+        message="This custom view should extend `android.support.v7.widget.AppCompatTextView` instead"
+        errorLine1="public class ThemedTextView extends android.widget.TextView"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/themed/ThemedTextView.java"
+            line="22"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="GradleOverrides"
+        message="This `minSdkVersion` value (`16`) is not used; it is always overridden by the value specified in the Gradle build script (`16`)"
+        errorLine1="    &lt;uses-sdk android:minSdkVersion=&quot;16&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="9"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="GradleOverrides"
+        message="This `targetSdkVersion` value (`23`) is not used; it is always overridden by the value specified in the Gradle build script (`23`)"
+        errorLine1="              android:targetSdkVersion=&quot;23&quot;/>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="10"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="ObjectAnimatorBinding"
+        message="Could not find property setter method `setTranslationY` on `org.mozilla.gecko.firstrun.FirstrunPager`"
+        errorLine1="        final Animator translateAnimator = ObjectAnimator.ofFloat(this, &quot;translationY&quot;, 0);"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java"
+            line="124"
+            column="73"/>
+    </issue>
+
+    <issue
+        id="ObjectAnimatorBinding"
+        message="Could not find property setter method `setAlpha` on `org.mozilla.gecko.firstrun.FirstrunPager`"
+        errorLine1="        final Animator alphaAnimator = ObjectAnimator.ofFloat(this, &quot;alpha&quot;, 1);"
+        errorLine2="                                                                    ~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/firstrun/FirstrunPager.java"
+            line="127"
+            column="69"/>
+    </issue>
+
+    <issue
+        id="VisibleForTests"
+        message="This method should only be accessed from tests or within private scope"
+        errorLine1="            failRecordStore(new PayloadTooLargeToUpload(), record, true);"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/BatchingUploader.java"
+            line="151"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="VisibleForTests"
+        message="This method should only be accessed from tests or within private scope"
+        errorLine1="        super(profileName);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/telemetry/stores/TelemetryJSONFilePingStore.java"
+            line="82"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_id` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.id = a.getResourceId(R.styleable.MenuItem_android_id, NO_ID);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="125"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_orderInCategory` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.order = a.getInt(R.styleable.MenuItem_android_orderInCategory, 0);"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="126"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_title` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.title = a.getText(R.styleable.MenuItem_android_title);"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="127"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_checkable` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.checkable = a.getBoolean(R.styleable.MenuItem_android_checkable, false);"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="128"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_checked` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.checked = a.getBoolean(R.styleable.MenuItem_android_checked, false);"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="129"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_visible` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.visible = a.getBoolean(R.styleable.MenuItem_android_visible, true);"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="130"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_enabled` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.enabled = a.getBoolean(R.styleable.MenuItem_android_enabled, true);"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="131"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@styleable/MenuItem_android_icon` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        item.iconRes = a.getResourceId(R.styleable.MenuItem_android_icon, 0);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/menu/GeckoMenuInflater.java"
+            line="133"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@drawable/abc_ic_ab_back_mtrl_am_alpha` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        actionBar.setHomeAsUpIndicator(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_mtrl_am_alpha);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/preferences/GeckoPreferences.java"
+            line="234"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@drawable/abc_ic_ab_back_mtrl_am_alpha` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        actionBar.setHomeAsUpIndicator(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_mtrl_am_alpha);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/preferences/GeckoPreferences.java"
+            line="234"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@drawable/abc_ic_clear_mtrl_alpha` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        app:navigationIcon=&quot;@drawable/abc_ic_clear_mtrl_alpha&quot;"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_add_folder.xml"
+            line="20"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@drawable/abc_ic_clear_mtrl_alpha` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        app:navigationIcon=&quot;@drawable/abc_ic_clear_mtrl_alpha&quot;"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit_with_full_page.xml"
+            line="20"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@drawable/abc_ic_ab_back_mtrl_am_alpha` is marked as private in com.android.support:appcompat-v7"
+        errorLine1="        app:navigationIcon=&quot;@drawable/abc_ic_ab_back_mtrl_am_alpha&quot;"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_folder_select.xml"
+            line="19"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="PrivateResource"
+        message="The resource `@dimen/design_snackbar_text_size` is marked as private in com.android.support:design"
+        errorLine1="        &lt;item name=&quot;android:textSize&quot;>@dimen/design_snackbar_text_size&lt;/item>"
+        errorLine2="                                      ^">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="299"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="SpUsage"
+        message="This dimension is used as a text size: Should use &quot;`sp`&quot; instead of &quot;`dp`&quot;"
+        errorLine1="    &lt;dimen name=&quot;preference_panel_text_size&quot;>15dp&lt;/dimen>"
+        errorLine2="                                             ^">
+        <location
+            file="src/photon/res/values/dimens.xml"
+            line="261"
+            column="46"/>
+        <location
+            file="src/main/res/layout/preference_panels.xml"
+            line="20"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="SpUsage"
+        message="Should use &quot;`sp`&quot; instead of &quot;`dp`&quot; for text sizes"
+        errorLine1="    android:textSize=&quot;12dp&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/home_remote_tabs_hidden_devices.xml"
+            line="16"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="SpUsage"
+        message="Should use &quot;`sp`&quot; instead of &quot;`dp`&quot; for text sizes"
+        errorLine1="        &lt;item name=&quot;android:textSize&quot;>16dp&lt;/item>"
+        errorLine2="                                      ^">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="428"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_add_folder.xml"
+            line="49"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_add_folder.xml"
+            line="73"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit.xml"
+            line="21"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit.xml"
+            line="34"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit.xml"
+            line="47"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit_with_full_page.xml"
+            line="49"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit_with_full_page.xml"
+            line="72"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                android:singleLine=&quot;true&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit_with_full_page.xml"
+            line="98"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_folder_item.xml"
+            line="51"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_screenshot_row.xml"
+            line="31"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/customtabs_action_bar_custom_view.xml"
+            line="53"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="          android:singleLine=&quot;true&quot;"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/find_in_page_content.xml"
+            line="20"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="              android:singleLine=&quot;true&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/media_casting.xml"
+            line="30"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/panel_icon_item.xml"
+            line="27"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                  android:singleLine=&quot;true&quot;/>"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/panel_image_item.xml"
+            line="31"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                  android:singleLine=&quot;true&quot;"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/panel_image_item.xml"
+            line="39"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                  android:singleLine=&quot;true&quot;"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/pin_site_dialog.xml"
+            line="33"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="                 android:singleLine=&quot;true&quot;"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_panels.xml"
+            line="21"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="35"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_search_engine.xml"
+            line="36"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: False is the default, so just remove the attribute"
+        errorLine1="            android:singleLine=&quot;false&quot;/>"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/simple_helper_ui.xml"
+            line="51"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/site_setting_item.xml"
+            line="31"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/site_setting_item.xml"
+            line="41"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout-large/tabs_layout_item_view.xml"
+            line="46"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="            android:singleLine=&quot;true&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/tabs_layout_item_view.xml"
+            line="46"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: False is the default, so just remove the attribute"
+        errorLine1="              android:singleLine=&quot;false&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/tabs_list_item_view.xml"
+            line="56"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="Deprecated"
+        message="`android:singleLine` is deprecated: Use `maxLines=&quot;1&quot;` instead"
+        errorLine1="              android:singleLine=&quot;true&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/validation_message.xml"
+            line="20"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="UnsafeProtectedBroadcastReceiver"
+        message="This broadcast receiver declares an intent-filter for a protected broadcast action string, which can only be sent by the system, not third-party applications. However, the receiver&apos;s onReceive method does not appear to call getAction to ensure that the received Intent&apos;s action string matches the expected value, potentially making it possible for another actor to send a spoofed intent with no action string or a different action string and cause undesired behavior."
+        errorLine1="  public void onReceive(final Context context, Intent intent) {"
+        errorLine2="              ~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/receivers/FxAccountUpgradeReceiver.java"
+            line="53"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="ExportedReceiver"
+        message="Exported receiver does not require permission"
+        errorLine1="        &lt;receiver android:name=&quot;org.mozilla.gecko.GeckoUpdateReceiver&quot;>"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="279"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ExportedReceiver"
+        message="Exported receiver does not require permission"
+        errorLine1="        &lt;receiver android:name=&quot;org.mozilla.gecko.distribution.ReferrerReceiver&quot;"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="290"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ExportedService"
+        message="Exported service does not require permission"
+        errorLine1="        &lt;service"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="675"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ExportedService"
+        message="Exported service does not require permission"
+        errorLine1="        &lt;service"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="683"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="UnsafeDynamicallyLoadedCode"
+        message="Dynamically loading code using `load` is risky, please use `loadLibrary` instead when possible"
+        errorLine1="        System.load(&quot;/data/app-lib/&quot; + AppConstants.ANDROID_PACKAGE_NAME + &quot;/libmozglue.so&quot;);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/background/nativecode/NativeCrypto.java"
+            line="22"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="UnsafeDynamicallyLoadedCode"
+        message="Dynamically loading code using `load` is risky, please use `loadLibrary` instead when possible"
+        errorLine1="            System.load(&quot;/data/data/&quot; + AppConstants.ANDROID_PACKAGE_NAME + &quot;/lib/libmozglue.so&quot;);"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/background/nativecode/NativeCrypto.java"
+            line="26"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="Recycle"
+        message="This `Cursor` should be freed up after use with `#close()`"
+        errorLine1="    Cursor c = cr.query(appendProfile(BrowserContractHelpers.BOOKMARKS_CONTENT_URI),"
+        errorLine2="                  ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestBookmarks.java"
+            line="911"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="Recycle"
+        message="This `ContentProviderClient` should be freed up after use with `#release()`"
+        errorLine1="    ContentProviderClient client = getApplicationContext().getContentResolver().acquireContentProviderClient(BrowserContract.PASSWORDS_AUTHORITY_URI);"
+        errorLine2="                                                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestPasswordsRepository.java"
+            line="315"
+            column="81"/>
+    </issue>
+
+    <issue
+        id="Recycle"
+        message="This `Cursor` should be freed up after use with `#close()`"
+        errorLine1="            Cursor c = cr.query(passwordUri, null, null, null, null);"
+        errorLine2="                          ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testPasswordEncrypt.java"
+            line="97"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="ObsoleteSdkInt"
+        message="Unnecessary; SDK_INT is never &lt; 16"
+        errorLine1="        if (Build.VERSION.SDK_INT &lt; 16) {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/db/BrowserDatabaseHelper.java"
+            line="2451"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static Context mContext;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/AudioFocusAgent.java"
+            line="18"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `AudioFocusAgent` which has field `mContext` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="        private static final AudioFocusAgent INSTANCE = new AudioFocusAgent();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/media/AudioFocusAgent.java"
+            line="102"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static Activity sActivity;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/helpers/DeviceHelper.java"
+            line="34"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `DiskStorage` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static DiskStorage instance;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/icons/storage/DiskStorage.java"
+            line="50"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `FilePicker` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static FilePicker sFilePicker;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/FilePicker.java"
+            line="35"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static Activity sActivity;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/helpers/GeckoClickHelper.java"
+            line="17"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `GeckoFontScaleListener` which has field `applicationContext` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static final GeckoFontScaleListener listenerInstance = new GeckoFontScaleListener();"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/GeckoFontScaleListener.java"
+            line="30"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static Activity sActivity;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/helpers/GeckoHelper.java"
+            line="18"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `HomePanelsManager` which has field `mContext` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static final HomePanelsManager sInstance = new HomePanelsManager();"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/HomePanelsManager.java"
+            line="35"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `MediaPlayerManager` which has field `mAnimatingAway` pointing to `View`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    /**"
+        errorLine2="    ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/MediaPlayerManager.java"
+            line="34"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `AppMenuComponent` which has field `mActivity` pointing to `Activity`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static AppMenuComponent sAppMenu;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/helpers/NavigationHelper.java"
+            line="24"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `ToolbarComponent` which has field `mActivity` pointing to `Activity`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static ToolbarComponent sToolbar;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/helpers/NavigationHelper.java"
+            line="25"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `PushService` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static PushService sInstance;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/push/PushService.java"
+            line="70"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `SavedReaderViewHelper` which has field `mContext` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static SavedReaderViewHelper instance = null;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/reader/SavedReaderViewHelper.java"
+            line="77"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `PerProfileDatabases` which has field `mContext` pointing to `Context`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static PerProfileDatabases&lt;BrowserDatabaseHelper> databases;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/db/SharedBrowserDatabaseProvider.java"
+            line="35"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="StaticFieldLeak"
+        message="Do not place Android context classes in static fields (static reference to `ToolbarComponent` which has field `mActivity` pointing to `Activity`); this is a memory leak (and also breaks Instant Run)"
+        errorLine1="    private static ToolbarComponent sToolbar;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/helpers/WaitHelper.java"
+            line="45"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="UseSparseArrays"
+        message="Use `new LongSparseArray(...)` instead for better performance"
+        errorLine1="    HashMap&lt;Long, Long> otherVisits = new HashMap&lt;Long, Long>();"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/domain/HistoryRecord.java"
+            line="171"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="UseSparseArrays"
+        message="Use `new LongSparseArray(...)` instead for better performance"
+        errorLine1="          HashMap&lt;Long, String> map = new HashMap&lt;Long, String>();"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/login/Married.java"
+            line="80"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="UseSparseArrays"
+        message="Use `new SparseArray&lt;Tab>(...)` instead for better performance"
+        errorLine1="    private final HashMap&lt;Integer, Tab> mTabs = new HashMap&lt;Integer, Tab>();"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/Tabs.java"
+            line="70"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="UseValueOf"
+        message="Use `Integer.valueOf(keys.next())` instead"
+        errorLine1="                    sizes.add(new Integer(keys.next()));"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/db/LocalURLMetadata.java"
+            line="85"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `#FAFAFA` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="                                                                     android:background=&quot;#FAFAFA&quot;/>"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/activity_stream.xml"
+            line="6"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@drawable/dropshadow` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="              android:background=&quot;@drawable/dropshadow&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/anchored_popup.xml"
+            line="9"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@android:color/white` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@android:color/white&quot;>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_add_folder.xml"
+            line="13"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@android:color/white` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@android:color/white&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_edit_with_full_page.xml"
+            line="11"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@android:color/white` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@android:color/white&quot;>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/bookmark_folder_select.xml"
+            line="12"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@drawable/color_picker_row_bg` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="                 android:background=&quot;@drawable/color_picker_row_bg&quot;"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/color_picker_row.xml"
+            line="12"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/dark_transparent_overlay` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="             android:background=&quot;@color/dark_transparent_overlay&quot;>"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/firstrun_animation_container.xml"
+            line="11"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/fxaccount_error_preference_backgroundcolor` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@color/fxaccount_error_preference_backgroundcolor&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/fxaccount_status_error_preference.xml"
+            line="5"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@android:color/white` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="                                  android:background=&quot;@android:color/white&quot;>"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout/home_pager.xml"
+            line="14"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@drawable/action_bar_button` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@drawable/action_bar_button&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/home_remote_tabs_hidden_devices.xml"
+            line="11"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/photon_notification_bg` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="              android:background=&quot;@color/photon_notification_bg&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout/home_suggestion_prompt.xml"
+            line="11"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/toolbar_menu_dark_grey` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="      android:background=&quot;@color/toolbar_menu_dark_grey&quot;/>"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/menu_action_bar.xml"
+            line="15"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/dark_transparent_overlay` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="                                      android:background=&quot;@color/dark_transparent_overlay&quot;"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/pwa_confirm.xml"
+            line="8"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/dark_transparent_overlay` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="                                         android:background=&quot;@color/dark_transparent_overlay&quot;"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/pwa_onboarding.xml"
+            line="7"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/pressed_about_page_header_grey` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@color/pressed_about_page_header_grey&quot;>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_engine_bar_label.xml"
+            line="11"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/toolbar_grey` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@color/toolbar_grey&quot;>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_fragment_pre_search.xml"
+            line="10"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/toolbar_grey` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@color/toolbar_grey&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_sugestions.xml"
+            line="9"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@drawable/widget_bg` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@drawable/widget_bg&quot;>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_widget.xml"
+            line="13"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@drawable/url_bar_bg` with a theme that also paints a background (inferred theme is `@style/Gecko_App`)"
+        errorLine1="                                       android:background=&quot;@drawable/url_bar_bg&quot;"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/splash_screen.xml"
+            line="5"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/photon_tab_strip_bg` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="    android:background=&quot;@color/photon_tab_strip_bg&quot;/>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout/tab_strip.xml"
+            line="10"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="Overdraw"
+        message="Possible overdraw: Root element paints background `@color/text_and_tabs_tray_grey` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
+        errorLine1="                                  android:background=&quot;@color/text_and_tabs_tray_grey&quot;"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/tabs_panel_view.xml"
+            line="12"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="UselessParent"
+        message="This `ScrollView` layout or its `FrameLayout` parent is useless; transfer the `background` attribute to the other view"
+        errorLine1="    &lt;ScrollView android:layout_width=&quot;match_parent&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/anchored_popup.xml"
+            line="15"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="UselessParent"
+        message="This `LinearLayout` layout or its `LinearLayout` parent is useless"
+        errorLine1="    &lt;LinearLayout android:layout_width=&quot;match_parent&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/customtabs_site_identity.xml"
+            line="11"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="TypographyEllipsis"
+        message="Replace &quot;...&quot; with ellipsis character (…, &amp;#8230;) ?"
+        errorLine1="  &lt;string name=&quot;bookmarkhistory_import_wait&quot;>Please wait...&lt;/string>"
+        errorLine2="                                             ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_resources/values/strings.xml"
+            line="484"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="IconDipSize"
+        message="The image `large_icon.png` varies significantly in its density-independent (dip) size across the various density versions: drawable-hdpi/large_icon.png: 96x96 dp (144x144 px), drawable-xhdpi/large_icon.png: 72x72 dp (144x144 px), drawable-xxhdpi/large_icon.png: 48x48 dp (144x144 px)">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-xxhdpi/large_icon.png"/>
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-xhdpi/large_icon.png"/>
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-hdpi/large_icon.png"/>
+    </issue>
+
+    <issue
+        id="IconLocation"
+        message="Found bitmap drawable `res/drawable/push_notification.png` in densityless folder">
+        <location
+            file="src/main/res/drawable/push_notification.png"/>
+    </issue>
+
+    <issue
+        id="IconLocation"
+        message="Found bitmap drawable `res/drawable/pwa_popup.png` in densityless folder">
+        <location
+            file="src/photon/res/drawable/pwa_popup.png"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-hdpi`: add_to_homescreen.png, suggestedsites_restricted_fxsupport.png, suggestedsites_restricted_mozilla.png, suggestedsites_webmaker.png, tip_addsearch.png">
+        <location
+            file="src/photon/res/drawable-hdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-hdpi`: exit_fullscreen.png, fullscreen.png">
+        <location
+            file="src/main/res/drawable-hdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-hdpi`: widget_icon.png (found in drawable-xhdpi)">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-hdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-xhdpi`: exit_fullscreen.png, fullscreen.png, home_bg.png, home_star.png">
+        <location
+            file="src/main/res/drawable-xhdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-xhdpi`: home_tab_menu_strip.9.png, tab_indicator_background.9.png, tab_indicator_selected.9.png, tab_indicator_selected_focused.9.png, tip_addsearch.png">
+        <location
+            file="src/photon/res/drawable-xhdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-xhdpi`: sync_avatar_default.png (found in drawable-hdpi, drawable-xxhdpi)">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/drawable-xhdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-xxhdpi`: blank.png, close.png, color_picker_row_bg.9.png, grid_icon_bg_activated.9.png, grid_icon_bg_focused.9.png... (9 more)">
+        <location
+            file="src/main/res/drawable-xxhdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-xxhdpi`: handle_end.png, handle_middle.png, handle_start.png, home_tab_menu_strip.9.png, suggestedsites_restricted_fxsupport.png... (6 more)">
+        <location
+            file="src/photon/res/drawable-xxhdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-xxhdpi`: sync_promo.png (found in drawable-hdpi, drawable-xhdpi)">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/drawable-xxhdpi"/>
+    </issue>
+
+    <issue
+        id="IconDensities"
+        message="Missing the following drawables in `drawable-xxhdpi`: widget_icon.png (found in drawable-xhdpi)">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-xxhdpi"/>
+    </issue>
+
+    <issue
+        id="IconDuplicates"
+        message="The following unrelated icon files have identical contents: large_icon.png, large_icon.png, icon.png, large_icon.png">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-xxhdpi/large_icon.png"/>
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-xxhdpi/icon.png"/>
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-xhdpi/large_icon.png"/>
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res/drawable-hdpi/large_icon.png"/>
+    </issue>
+
+    <issue
+        id="IconDuplicates"
+        message="The following unrelated icon files have identical contents: ic_menu_stop.png, tab_close.png">
+        <location
+            file="src/photon/res/drawable-xxhdpi/tab_close.png"/>
+        <location
+            file="src/photon/res/drawable-large-hdpi-v11/ic_menu_stop.png"/>
+    </issue>
+
+    <issue
+        id="IconDuplicates"
+        message="The following unrelated icon files have identical contents: search_clear.png, tab_close_active.png">
+        <location
+            file="src/photon/res/drawable-xhdpi/tab_close_active.png"/>
+        <location
+            file="src/photon/res/drawable-hdpi/search_clear.png"/>
+    </issue>
+
+    <issue
+        id="IconMissingDensityFolder"
+        message="Missing density variation folders in `/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res`: drawable-mdpi">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/branding/unofficial/res"/>
+    </issue>
+
+    <issue
+        id="IconMissingDensityFolder"
+        message="Missing density variation folders in `/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res`: drawable-mdpi">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res"/>
+    </issue>
+
+    <issue
+        id="IconMissingDensityFolder"
+        message="Missing density variation folders in `src/main/res`: drawable-mdpi">
+        <location
+            file="src/main/res"/>
+    </issue>
+
+    <issue
+        id="IconMissingDensityFolder"
+        message="Missing density variation folders in `src/photon/res`: drawable-mdpi">
+        <location
+            file="src/photon/res"/>
+    </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="    &lt;application android:label=&quot;@string/moz_app_displayname&quot;"
+        errorLine2="    ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/objdir-droid/gradle/build/mobile/android/app/generated/source/preprocessed_manifest/AndroidManifest.xml"
+            line="100"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="            android:layout_marginTop=&quot;-2dp&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/gecko_app.xml"
+            line="151"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginEnd&quot;>-3dp&lt;/item>"
+        errorLine2="                                              ^">
+        <location
+            file="src/photon/res/values-v17/styles.xml"
+            line="39"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginEnd&quot;>-3dp&lt;/item>"
+        errorLine2="                                              ^">
+        <location
+            file="src/photon/res/values-v17/styles.xml"
+            line="63"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginRight&quot;>-3dp&lt;/item>"
+        errorLine2="                                                ^">
+        <location
+            file="src/photon/res/values-v17/styles.xml"
+            line="81"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginEnd&quot;>-3dp&lt;/item>"
+        errorLine2="                                              ^">
+        <location
+            file="src/photon/res/values-v17/styles.xml"
+            line="95"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginRight&quot;>-3dp&lt;/item>"
+        errorLine2="                                                ^">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="888"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginRight&quot;>-3dp&lt;/item>"
+        errorLine2="                                                ^">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="917"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginRight&quot;>-3dp&lt;/item>"
+        errorLine2="                                                ^">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="936"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NegativeMargin"
+        message="Margin values should not be negative"
+        errorLine1="        &lt;item name=&quot;android:layout_marginRight&quot;>-3dp&lt;/item>"
+        errorLine2="                                                ^">
+        <location
+            file="src/photon/res/values/styles.xml"
+            line="941"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="SmallSp"
+        message="Avoid using sizes smaller than `12sp`: `10sp`"
+        errorLine1="            android:textSize=&quot;10sp&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/customtabs_action_bar_custom_view.xml"
+            line="55"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `ContentSecurityDoorHanger` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="public class ContentSecurityDoorHanger extends DoorHanger {"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/ContentSecurityDoorHanger.java"
+            line="25"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `DefaultDoorHanger` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="public class DefaultDoorHanger extends DoorHanger {"
+        errorLine2="             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/DefaultDoorHanger.java"
+            line="30"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `FramePanelLayout` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="class FramePanelLayout extends PanelLayout {"
+        errorLine2="      ~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/FramePanelLayout.java"
+            line="16"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `LoginDoorHanger` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="public class LoginDoorHanger extends DoorHanger {"
+        errorLine2="             ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/LoginDoorHanger.java"
+            line="33"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `PanelAuthLayout` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="class PanelAuthLayout extends LinearLayout {"
+        errorLine2="      ~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelAuthLayout.java"
+            line="25"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `PanelBackItemView` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="class PanelBackItemView extends LinearLayout {"
+        errorLine2="      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelBackItemView.java"
+            line="20"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `PanelItemView` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="class PanelItemView extends LinearLayout {"
+        errorLine2="      ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelItemView.java"
+            line="22"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `PanelListView` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="public class PanelListView extends HomeListView"
+        errorLine2="             ~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelListView.java"
+            line="25"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="ViewConstructor"
+        message="Custom view `PanelRefreshLayout` is missing constructor used by tools: `(Context)` or `(Context,AttributeSet)` or `(Context,AttributeSet,int)`"
+        errorLine1="class PanelRefreshLayout extends SwipeRefreshLayout implements DatasetBacked {"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/home/PanelRefreshLayout.java"
+            line="27"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="ClickableViewAccessibility"
+        message="`org/mozilla/gecko/widget/SwipeDismissListViewTouchListener#onTouch` should call `View#performClick` when a click is detected"
+        errorLine1="    public boolean onTouch(View view, MotionEvent motionEvent) {"
+        errorLine2="                   ~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/SwipeDismissListViewTouchListener.java"
+            line="187"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageButton android:id=&quot;@+id/actionbar_menu&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/actionbar.xml"
+            line="26"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/activity_stream_overridable_page_icon_layout.xml"
+            line="15"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/activity_stream_webpage_item_row.xml"
+            line="106"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/bookmark_folder_item.xml"
+            line="33"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/bookmark_folder_item.xml"
+            line="57"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+            line="14"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout/browser_toolbar.xml"
+            line="16"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout/browser_toolbar.xml"
+            line="30"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView android:id=&quot;@+id/site_identity_icon&quot;"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/customtabs_site_identity.xml"
+            line="19"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView android:id=&quot;@+id/doorhanger_icon&quot;"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/doorhanger.xml"
+            line="16"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView android:id=&quot;@+id/firstrun_image&quot;"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/firstrun_basepanel_checkable_fragment.xml"
+            line="20"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView android:id=&quot;@+id/firstrun_image&quot;"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/firstrun_sync_fragment.xml"
+            line="21"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/fxaccount_status_error_preference.xml"
+            line="17"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="     &lt;ImageView android:id=&quot;@+id/icon&quot;"
+        errorLine2="     ^">
+        <location
+            file="src/main/res/layout/home_banner_content.xml"
+            line="9"
+            column="6"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/home_empty_image&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/home_empty_panel.xml"
+            line="19"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/home_remote_tabs_group.xml"
+            line="17"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/home_remote_tabs_group.xml"
+            line="51"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout/home_smartfolder.xml"
+            line="17"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/homescreen_prompt.xml"
+            line="23"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/homescreen_prompt.xml"
+            line="70"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/icon&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/icon_grid_item.xml"
+            line="39"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/overlay_share_dialog.xml"
+            line="78"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/image&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/panel_article_item.xml"
+            line="8"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/image&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/panel_auth_layout.xml"
+            line="12"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/image&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/panel_back_item.xml"
+            line="8"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/panel_icon_item.xml"
+            line="10"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/panel_icon_item.xml"
+            line="16"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="42"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout/preference_search_tip.xml"
+            line="14"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="            &lt;ImageView"
+        errorLine2="            ^">
+        <location
+            file="src/main/res/layout/pwa_confirm.xml"
+            line="30"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageButton"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/pwa_confirm.xml"
+            line="52"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="                    &lt;ImageView"
+        errorLine2="                    ^">
+        <location
+            file="src/main/res/layout/pwa_onboarding.xml"
+            line="40"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageButton"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="28"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="40"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/search_empty.xml"
+            line="20"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/search_engine_bar_item.xml"
+            line="21"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/search_engine_bar_label.xml"
+            line="13"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/logo_button&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/search_widget.xml"
+            line="15"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView"
+        errorLine2="        ^">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/simple_helper_ui.xml"
+            line="23"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView android:id=&quot;@+id/site_identity_icon&quot;"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/site_identity.xml"
+            line="19"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/splash_screen.xml"
+            line="10"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout/suggestion_item.xml"
+            line="21"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView android:id=&quot;@+id/tab_history_timeline_top&quot;"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/tab_history_item_row.xml"
+            line="23"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="        &lt;ImageView android:id=&quot;@+id/tab_history_timeline_bottom&quot;"
+        errorLine2="        ^">
+        <location
+            file="src/main/res/layout/tab_history_item_row.xml"
+            line="38"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="            &lt;ImageView"
+        errorLine2="            ^">
+        <location
+            file="src/main/res/layout/tab_queue_prompt.xml"
+            line="85"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout/tab_strip_item_view.xml"
+            line="21"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="                &lt;ImageView android:layout_width=&quot;wrap_content&quot;"
+        errorLine2="                ^">
+        <location
+            file="src/main/res/layout/tracking_protection_prompt.xml"
+            line="36"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/two_line_folder_row.xml"
+            line="16"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/two_line_folder_row.xml"
+            line="54"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView"
+        errorLine2="    ^">
+        <location
+            file="src/photon/res/layout/two_line_page_row.xml"
+            line="65"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/validation_message_arrow&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/validation_message.xml"
+            line="24"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="ContentDescription"
+        message="[Accessibility] Missing `contentDescription` attribute on image"
+        errorLine1="    &lt;ImageView android:id=&quot;@+id/validation_message_arrow_inverted&quot;"
+        errorLine2="    ^">
+        <location
+            file="src/main/res/layout/validation_message.xml"
+            line="32"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingLeft` you should probably also define `paddingRight` for right-to-left symmetry"
+        errorLine1="            android:paddingLeft=&quot;@dimen/activity_stream_base_margin&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/activity_stream_contextmenu_bottomsheet.xml"
+            line="38"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
+        errorLine1="            android:paddingStart=&quot;@dimen/activity_stream_base_margin&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/activity_stream_contextmenu_bottomsheet.xml"
+            line="39"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingLeft` you should probably also define `paddingRight` for right-to-left symmetry"
+        errorLine1="            android:paddingLeft=&quot;@dimen/activity_stream_base_margin&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/activity_stream_contextmenu_bottomsheet.xml"
+            line="53"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
+        errorLine1="            android:paddingStart=&quot;@dimen/activity_stream_base_margin&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/activity_stream_contextmenu_bottomsheet.xml"
+            line="54"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="        android:paddingEnd=&quot;5dp&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/customtabs_action_bar_custom_view.xml"
+            line="15"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="        android:paddingRight=&quot;5dp&quot;>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/customtabs_action_bar_custom_view.xml"
+            line="16"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="    android:paddingRight=&quot;?android:attr/scrollbarSize&quot;>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/fxaccount_status_error_preference.xml"
+            line="8"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingLeft` you should probably also define `paddingRight` for right-to-left symmetry"
+        errorLine1="          android:paddingLeft=&quot;24dp&quot;"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/home_combined_back_item.xml"
+            line="10"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
+        errorLine1="          android:paddingStart=&quot;24dp&quot;"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/home_combined_back_item.xml"
+            line="11"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingLeft` you should probably also define `paddingRight` for right-to-left symmetry"
+        errorLine1="    android:paddingLeft=&quot;5dip&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/list_item_header.xml"
+            line="13"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
+        errorLine1="    android:paddingStart=&quot;5dip&quot;"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/list_item_header.xml"
+            line="14"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="      android:paddingRight=&quot;?android:attr/scrollbarSize&quot;"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="13"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="      android:paddingEnd=&quot;?android:attr/scrollbarSize&quot;"
+        errorLine2="      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="14"
+            column="7"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="        android:paddingRight=&quot;6dip&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="27"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="        android:paddingEnd=&quot;6dip&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="28"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="               android:paddingRight=&quot;16dp&quot;"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="48"
+            column="16"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="               android:paddingEnd=&quot;16dp&quot; />"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="49"
+            column="16"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="        android:paddingRight=&quot;30dp&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="16"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="        android:paddingEnd=&quot;30dp&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="17"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingLeft` you should probably also define `paddingRight` for right-to-left symmetry"
+        errorLine1="        android:paddingLeft=&quot;10dp&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="32"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
+        errorLine1="        android:paddingStart=&quot;10dp&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="33"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingLeft` you should probably also define `paddingRight` for right-to-left symmetry"
+        errorLine1="        android:paddingLeft=&quot;@dimen/search_row_padding&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_suggestions_row.xml"
+            line="26"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingStart` you should probably also define `paddingEnd` for right-to-left symmetry"
+        errorLine1="        android:paddingStart=&quot;@dimen/search_row_padding&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_suggestions_row.xml"
+            line="27"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="        android:paddingRight=&quot;12dip&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/site_setting_item.xml"
+            line="50"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="        android:paddingEnd=&quot;12dip&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/site_setting_item.xml"
+            line="51"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="            android:paddingRight=&quot;@dimen/tab_history_title_margin_end&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/tab_history_item_row.xml"
+            line="55"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="            android:paddingEnd=&quot;@dimen/tab_history_title_margin_end&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/tab_history_item_row.xml"
+            line="56"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="        android:paddingEnd=&quot;@dimen/page_row_edge_padding&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/two_line_folder_row.xml"
+            line="32"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="        android:paddingRight=&quot;@dimen/page_row_edge_padding&quot;>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/two_line_folder_row.xml"
+            line="33"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingEnd` you should probably also define `paddingStart` for right-to-left symmetry"
+        errorLine1="        android:paddingEnd=&quot;10dp&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout/two_line_page_row.xml"
+            line="31"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlSymmetry"
+        message="When you define `paddingRight` you should probably also define `paddingLeft` for right-to-left symmetry"
+        errorLine1="        android:paddingRight=&quot;10dp&quot;>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/photon/res/layout/two_line_page_row.xml"
+            line="32"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`Gravity.START`&quot; instead of &quot;`Gravity.LEFT`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        toast.setGravity(Gravity.TOP | Gravity.LEFT, xOffset, yOffset);"
+        errorLine2="                                               ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/ActionModeCompat.java"
+            line="143"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`Gravity.START`&quot; instead of &quot;`Gravity.LEFT`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="                showAtLocation(decorView, Gravity.TOP | Gravity.LEFT, offsetX, offsetY);"
+        errorLine2="                                                                ~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/widget/AnchoredPopup.java"
+            line="112"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`Gravity.END`&quot; instead of &quot;`Gravity.RIGHT`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="            Gravity.apply(Gravity.TOP | Gravity.RIGHT,"
+        errorLine2="                                                ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/lwt/LightweightTheme.java"
+            line="267"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`Gravity.END`&quot; instead of &quot;`Gravity.RIGHT`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        drawable.setGravity(Gravity.TOP | Gravity.RIGHT);"
+        errorLine2="                                                  ~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/base/java/org/mozilla/gecko/lwt/LightweightTheme.java"
+            line="399"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        android:layout_gravity=&quot;right|end|top&quot;"
+        errorLine2="                                ~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/activity_stream_webpage_item_row.xml"
+            line="39"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_marginEnd=&quot;@dimen/doorhanger_section_padding_small&quot;` to better support right-to-left layouts"
+        errorLine1="                   android:layout_marginRight=&quot;@dimen/doorhanger_section_padding_small&quot;/>"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/customtabs_site_identity.xml"
+            line="24"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="              android:gravity=&quot;right|end&quot;"
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/main/res/layout/default_doorhanger.xml"
+            line="22"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_marginEnd=&quot;@dimen/doorhanger_section_padding_small&quot;` to better support right-to-left layouts"
+        errorLine1="                   android:layout_marginRight=&quot;@dimen/doorhanger_section_padding_small&quot;"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/doorhanger.xml"
+            line="21"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`start`&quot; instead of &quot;`left`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="          android:gravity=&quot;center_vertical|left|start&quot;"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/find_in_page_content.xml"
+            line="31"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:paddingEnd=&quot;?android:attr/scrollbarSize&quot;` to better support right-to-left layouts"
+        errorLine1="    android:paddingRight=&quot;?android:attr/scrollbarSize&quot;>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="/Users/nalexander/Mozilla/gecko/mobile/android/services/src/main/res/layout/fxaccount_status_error_preference.xml"
+            line="8"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_marginStart=&quot;10dp&quot;` to better support right-to-left layouts"
+        errorLine1="                android:layout_marginLeft=&quot;10dp&quot;"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/home_banner_content.xml"
+            line="12"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_marginStart=&quot;10dp&quot;` to better support right-to-left layouts"
+        errorLine1="         android:layout_marginLeft=&quot;10dp&quot;"
+        errorLine2="         ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/home_banner_content.xml"
+            line="20"
+            column="10"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_alignParentStart=&quot;true&quot;` to better support right-to-left layouts"
+        errorLine1="              android:layout_alignParentLeft=&quot;true&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/media_casting.xml"
+            line="27"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_toStartOf=&quot;@id/media_controls&quot;` to better support right-to-left layouts"
+        errorLine1="              android:layout_toLeftOf=&quot;@id/media_controls&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/media_casting.xml"
+            line="28"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_alignParentEnd=&quot;true&quot;` to better support right-to-left layouts"
+        errorLine1="                 android:layout_alignParentRight=&quot;true&quot;"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/media_casting.xml"
+            line="38"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_alignParentEnd=&quot;true&quot;` to better support right-to-left layouts"
+        errorLine1="              android:layout_alignParentRight=&quot;true&quot;"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/menu_popup.xml"
+            line="11"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`start`&quot; instead of &quot;`left`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="                  android:gravity=&quot;center_vertical|left|start&quot;/>"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/pin_site_dialog.xml"
+            line="34"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:paddingEnd=&quot;?android:attr/scrollbarSize&quot;` to better support right-to-left layouts"
+        errorLine1="              android:paddingRight=&quot;?android:attr/scrollbarSize&quot;>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_panels.xml"
+            line="14"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        android:gravity=&quot;right|end&quot;"
+        errorLine2="                         ~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="20"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="            android:layout_gravity=&quot;right|end&quot;"
+        errorLine2="                                    ~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_rightalign_icon.xml"
+            line="32"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:paddingEnd=&quot;?android:attr/scrollbarSize&quot;` to better support right-to-left layouts"
+        errorLine1="              android:paddingRight=&quot;?android:attr/scrollbarSize&quot;>"
+        errorLine2="              ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_search_engine.xml"
+            line="13"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_marginStart=&quot;15dip&quot;` to better support right-to-left layouts"
+        errorLine1="        android:layout_marginLeft=&quot;15dip&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_search_engine.xml"
+            line="27"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_marginEnd=&quot;6dip&quot;` to better support right-to-left layouts"
+        errorLine1="        android:layout_marginRight=&quot;6dip&quot;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/preference_search_engine.xml"
+            line="28"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        android:layout_gravity=&quot;bottom|right|end&quot;"
+        errorLine2="                                ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_activity_main.xml"
+            line="53"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        android:layout_gravity=&quot;right|end|center_vertical&quot;"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="34"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        android:layout_gravity=&quot;right|end|center_vertical&quot;"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_bar.xml"
+            line="44"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`end`&quot; instead of &quot;`right`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="        android:layout_gravity=&quot;right|end|center_vertical&quot;"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_suggestions_row.xml"
+            line="25"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:drawableStart=&quot;@drawable/ic_widget_search&quot;` to better support right-to-left layouts"
+        errorLine1="            android:drawableLeft=&quot;@drawable/ic_widget_search&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_widget.xml"
+            line="35"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:drawableStart=&quot;@drawable/ic_widget_new_tab&quot;` to better support right-to-left layouts"
+        errorLine1="            android:drawableLeft=&quot;@drawable/ic_widget_new_tab&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/search_widget.xml"
+            line="57"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:layout_marginEnd=&quot;@dimen/doorhanger_section_padding_small&quot;` to better support right-to-left layouts"
+        errorLine1="                   android:layout_marginRight=&quot;@dimen/doorhanger_section_padding_small&quot;/>"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/site_identity.xml"
+            line="24"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`start`&quot; instead of &quot;`left`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="            android:gravity=&quot;center_vertical|left|start&quot;"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/site_setting_item.xml"
+            line="30"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Use &quot;`start`&quot; instead of &quot;`left`&quot; to ensure correct behavior in right-to-left locales"
+        errorLine1="            android:gravity=&quot;center_vertical|left|start&quot;"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/site_setting_item.xml"
+            line="40"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="RtlHardcoded"
+        message="Consider adding `android:drawableStart=&quot;@drawable/switch_button_icon&quot;` to better support right-to-left layouts"
+        errorLine1="            android:drawableLeft=&quot;@drawable/switch_button_icon&quot;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/res/layout/tab_queue_toast.xml"
+            line="33"
+            column="13"/>
+    </issue>
+
+</issues>
--- a/mobile/android/app/lint.xml
+++ b/mobile/android/app/lint.xml
@@ -15,230 +15,16 @@
     <!-- We have our own l10n system & don't use the platform's plurals. -->
     <issue id="PluralsCandidate" severity="ignore" />
 
     <!-- We don't want to have to follow the SDK release schedule: we can keep
 	 the warning in order to not forget that there's a new SDK, but there's
 	 no need to break on update. -->
     <issue id="OldTargetApi" severity="warning" />
 
-    <!-- We want all lint warnings to be fatal errors.
-         Right now, we set these to lint warnings so:
-
-         DO NOT ADD TO THIS LIST.
-
-         We did this so we can land lint in automation
-         and not fail everything. -->
-    <issue id="AppCompatResource" severity="warning" />
-    <issue id="GoogleAppIndexingDeepLinkError" severity="warning" />
-    <issue id="GoogleAppIndexingUrlError" severity="warning" />
-    <issue id="Instantiatable" severity="warning" />
-    <issue id="LongLogTag" severity="warning" />
-    <issue id="MissingPermission" severity="warning" />
-    <issue id="OnClick" severity="warning" />
-    <issue id="ReferenceType" severity="warning" />
-    <issue id="ResourceAsColor" severity="warning" />
-    <issue id="ResourceType" severity="warning" />
-    <issue id="ValidFragment" severity="warning" />
-    <issue id="WrongConstant" severity="warning" />
-
-    <!-- Fixes are in progress but we would like to block future candidates.
-         The ** in the path are wildcards. We need these wildcards to not change our code structure.
-         See: http://stackoverflow.com/questions/43994420/what-path-is-the-issue-ignore-path-element-in-lint-xml-relative-to -->
-    <issue id="NewApi" severity="error">
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/activitystream/ActivityStreamPreference.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/dlc/DownloadContentTelemetry.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/preferences/LocaleListPreference.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/media/MediaControlService.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/db/PerProfileDatabaseProvider.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/PrintHelper.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/animation/PropertyAnimator.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/RemotePresentationService.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/db/SharedBrowserDatabaseProvider.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/tabs/TabPanelBackButton.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/toolbar/ToolbarEditText.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/util/ViewUtil.java"/>
-        <ignore path="**/mobile/android/base/java/org/mozilla/gecko/IntentHelper.java"/>
-        <ignore path="**/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioEffects.java"/>
-        <ignore path="**/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java"/>
-        <ignore path="src/photon/res/values/styles.xml"/>
-    </issue>
-
-    <!-- We fixed all "Registered" lint errors. However the current gradle plugin has a bug where
-         it ignores @SuppressLint annotations for this check. See CrashReporter class and
-         https://code.google.com/p/android/issues/detail?id=204846 -->
-    <issue id="Registered" severity="warning" />
-
-    <!-- WHEN YOU FIX A LINT WARNING, ADD IT TO THIS LIST.
-
-         We want all lint warnings to be fatal errors.
-         This is the list of checks that we've explicitly
-         set as errors. Ideally, once we have no more warnings,
-         we switch to the `warningsAsErrors` lint option
-         (bug 1253737) rather than listing everything explicitly. -->
-    <issue id="AaptCrash" severity="error" />
-    <issue id="Accessibility" severity="error" />
-    <issue id="AccidentalOctal" severity="error" />
-    <issue id="AdapterViewChildren" severity="error" />
-    <issue id="AddJavascriptInterface" severity="error" />
-    <issue id="AllowBackup" severity="error" />
-    <issue id="AlwaysShowAction" severity="error" />
-    <issue id="AndroidGradlePluginVersion" severity="error" />
-    <issue id="AppCompatMethod" severity="error" />
-    <issue id="AppIndexingError" severity="error" />
-    <issue id="AppIndexingWarning" severity="error" />
-    <issue id="Assert" severity="error" />
-    <issue id="ButtonCase" severity="error" />
-    <issue id="ButtonOrder" severity="error" />
-    <issue id="ByteOrderMark" severity="error" />
-    <issue id="CheckResult" severity="error" />
-    <issue id="Correctness" severity="error" />
-    <issue id="CutPasteId" severity="error" />
-    <issue id="DalvikOverride" severity="error" />
-    <issue id="DeviceAdmin" severity="error" />
-    <issue id="DisableBaselineAlignment" severity="error" />
-    <issue id="DrawAllocation" severity="error" />
-    <issue id="DuplicateActivity" severity="error" />
-    <issue id="DuplicateDefinition" severity="error" />
-    <issue id="DuplicateIds" severity="error" />
-    <issue id="DuplicateIncludedIds" severity="error" />
-    <issue id="DuplicateUsesFeature" severity="error" />
-    <issue id="ExportedContentProvider" severity="error" />
-    <issue id="ExportedPreferenceActivity" severity="error" />
-    <issue id="ExtraText" severity="error" />
-    <issue id="ExtraTranslation" severity="error" />
-    <issue id="FloatMath" severity="error" />
-    <issue id="FullBackupContent" severity="error" />
-    <issue id="GetInstance" severity="error" />
-    <issue id="GifUsage" severity="error" />
-    <issue id="GradleCompatible" severity="error" />
-    <issue id="GradleDependency" severity="error" />
-    <issue id="GradleDeprecated" severity="error" />
-    <issue id="GradleDynamicVersion" severity="error" />
-    <issue id="GradleGetter" severity="error" />
-    <issue id="GradleIdeError" severity="error" />
-    <issue id="GradlePath" severity="error" />
-    <issue id="GrantAllUris" severity="error" />
-    <issue id="GridLayout" severity="error" />
-    <issue id="HandlerLeak" severity="error" />
-    <issue id="HardcodedText" severity="error" />
-    <issue id="IconExtension" severity="error" />
-    <issue id="IconLauncherShape" severity="error" />
-    <issue id="IconMixedNinePatch" severity="error" />
-    <issue id="IconNoDpi" severity="error" />
-    <issue id="IllegalResourceRef" severity="error" />
-    <issue id="ImpliedQuantity" severity="error" />
-    <issue id="InOrMmUsage" severity="error" />
-    <issue id="IncludeLayoutParam" severity="error" />
-    <issue id="InconsistentArrays" severity="error" />
-    <issue id="InefficientWeight" severity="error" />
-    <issue id="InnerclassSeparator" severity="error" />
-    <issue id="Internationalization" severity="error" />
-    <issue id="InvalidId" severity="error" />
-    <issue id="InvalidPackage" severity="error" />
-    <issue id="InvalidResourceFolder" severity="error" />
-    <issue id="JavascriptInterface" severity="error" />
-    <issue id="LabelFor" severity="error" />
-    <issue id="LibraryCustomView" severity="error" />
-    <issue id="LocalSuppress" severity="error" />
-    <issue id="LocaleFolder" severity="error" />
-    <issue id="LogTagMismatch" severity="error" />
-    <issue id="MangledCRLF" severity="error" />
-    <issue id="ManifestOrder" severity="error" />
-    <issue id="ManifestTypo" severity="error" />
-    <issue id="MenuTitle" severity="error" />
-    <issue id="MergeRootFrame" severity="error" />
-    <issue id="MipmapIcons" severity="error" />
-    <issue id="MissingApplicationIcon" severity="error" />
-    <issue id="MissingId" severity="error" />
-    <issue id="MissingPrefix" severity="error" />
-    <issue id="MissingQuantity" severity="error" />
-    <issue id="MissingRegistered" severity="error" />
-    <issue id="MissingSuperCall" severity="error" />
-    <issue id="MissingTranslation" severity="error" />
-    <issue id="MissingVersion" severity="error" />
-    <issue id="MockLocation" severity="error" />
-    <issue id="MultipleUsesSdk" severity="error" />
-    <issue id="NamespaceTypo" severity="error" />
-    <issue id="NestedScrolling" severity="error" />
-    <issue id="NfcTechWhitespace" severity="error" />
-    <issue id="NotSibling" severity="error" />
-    <issue id="ObsoleteLayoutParam" severity="error" />
-    <issue id="OnClick" severity="error" />
-    <issue id="Orientation" severity="error" />
-    <issue id="Override" severity="error" />
-    <issue id="OverrideAbstract" severity="error" />
-    <issue id="PackagedPrivateKey" severity="error" />
-    <issue id="ParcelCreator" severity="error" />
-    <issue id="Performance" severity="error" />
-    <issue id="Proguard" severity="error" />
-    <issue id="ProguardSplit" severity="error" />
-    <issue id="PropertyEscape" severity="error" />
-    <issue id="ProtectedPermissions" severity="error" />
-    <issue id="PxUsage" severity="error" />
-    <issue id="Range" severity="error" />
-    <issue id="RelativeOverlap" severity="error" />
-    <issue id="RequiredSize" severity="error" />
-    <issue id="ResAuto" severity="error" />
-    <issue id="ResourceCycle" severity="error" />
-    <issue id="ResourceName" severity="error" />
-    <issue id="ResourceType" severity="error" />
-    <issue id="RtlCompat" severity="error" />
-    <issue id="RtlEnabled" severity="error" />
-    <issue id="ScrollViewCount" severity="error" />
-    <issue id="ScrollViewSize" severity="error" />
-    <issue id="SecureRandom" severity="error" />
-    <issue id="Security" severity="error" />
-    <issue id="ServiceCast" severity="error" />
-    <issue id="SetJavaScriptEnabled" severity="error" />
-    <issue id="ShiftFlags" severity="error" />
-    <issue id="ShortAlarm" severity="error" />
-    <issue id="ShowToast" severity="error" />
-    <issue id="SignatureOrSystemPermissions" severity="error" />
-    <issue id="StringFormatCount" severity="error" />
-    <issue id="StringFormatInvalid" severity="error" />
-    <issue id="StringFormatMatches" severity="error" />
-    <issue id="StringShouldBeInt" severity="error" />
-    <issue id="SuspiciousImport" severity="error" />
-    <issue id="TextFields" severity="error" />
-    <issue id="TextViewEdits" severity="error" />
-    <issue id="TooDeepLayout" severity="error" />
-    <issue id="TooManyViews" severity="error" />
-    <issue id="TrulyRandom" severity="error" />
-    <issue id="TypographyDashes" severity="error" />
-    <issue id="TypographyFractions" severity="error" />
-    <issue id="TypographyOther" severity="error" />
-    <issue id="Typos" severity="error" />
-    <issue id="UniqueConstants" severity="error" />
-    <issue id="UniquePermission" severity="error" />
-    <issue id="UnknownId" severity="error" />
-    <issue id="UnknownIdInLayout" severity="error" />
-    <issue id="UnlocalizedSms" severity="error" />
-    <issue id="UnusedNamespace" severity="error" />
-    <issue id="UnusedQuantity" severity="error" />
     <issue id="UnusedResources" severity="error">
         <!-- The moz.build based build system leaves a .mkdir.done file lying around in the
              preprocessed_resources res/raw folder. Lint reports it as unused. We should get
              rid of the file eventually. See bug 1268948. -->
         <ignore path="**/raw/.mkdir.done" />
     </issue>
-    <issue id="Usability" severity="error" />
-    <issue id="UseCheckPermission" severity="error" />
-    <issue id="UseCompoundDrawables" severity="error" />
-    <issue id="UselessLeaf" severity="error" />
-    <issue id="UsesMinSdkAttributes" severity="error" />
-    <issue id="UsingHttp" severity="error" />
-    <issue id="ViewHolder" severity="error" />
-    <issue id="ViewTag" severity="error" />
-    <issue id="Wakelock" severity="error" />
-    <issue id="WebViewLayout" severity="error" />
-    <issue id="WorldReadableFiles" severity="error" />
-    <issue id="WorldWriteableFiles" severity="error" />
-    <issue id="WrongCall" severity="error" />
-    <issue id="WrongCase" severity="error" />
-    <issue id="WrongConstant" severity="error" />
-    <issue id="WrongFolder" severity="error" />
-    <issue id="WrongManifestParent" severity="error" />
-    <issue id="WrongRegion" severity="error" />
-    <issue id="WrongThread" severity="error" />
-    <issue id="WrongViewCast" severity="error" />
 
 </lint>