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=" <integer name="search_assist_launch_res">@drawable/search_launcher</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 && 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 = "Send data: " + String.format("%.2f", data.length / 1024.0) + " kB";"
+ 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 += " Session Total:" + String.format("%.2f", sBytesSentTotal / 1024.0) + " kB";"
+ 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("content://" + AppConstants.ANDROID_PACKAGE_NAME + ".db.browser/" + 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("[%s,%s] %s (%d bytes) %s", 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("(%3d,%3d,%3d) ", (agbr & 0xFF), (agbr & 0xFF00) >> 8, (agbr & 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("gps")) {"
+ 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("%s Coord: %.4f,%.4f, Acc: %.0f, Speed: %.0f, Alt: %.0f, Bearing: %.1f", 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 && album.toLowerCase().contains("screenshot")) {"
+ 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("Tab at index %d is not null", 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("existence: %b, can write: %b, size: %d.","
+ 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("browser_db_upgrade" + File.separator + String.format("v%d.db", 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("%2f"), "Path characters aren't escaped.", 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("Should have %d results", 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 "back" in layout "browser_toolbar" is missing from the following layout configurations: layout (present in layout-large-v11)"
+ errorLine1=" android:id="@+id/back""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+ line="25"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="InconsistentLayout"
+ message="The id "url_bar_translating_edge" in layout "browser_toolbar" is missing from the following layout configurations: layout-large-v11 (present in layout)"
+ errorLine1=" android:id="@+id/url_bar_translating_edge""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/photon/res/layout/browser_toolbar.xml"
+ line="31"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="InconsistentLayout"
+ message="The id "forward" in layout "browser_toolbar" is missing from the following layout configurations: layout (present in layout-large-v11)"
+ errorLine1=" android:id="@+id/forward""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+ line="38"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="InconsistentLayout"
+ message="The id "menu_items" in layout "browser_toolbar" is missing from the following layout configurations: layout (present in layout-large-v11)"
+ errorLine1=" android:id="@+id/menu_items""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/photon/res/layout-large-v11/browser_toolbar.xml"
+ line="61"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="InconsistentLayout"
+ message="The id "menu_margin" in layout "browser_toolbar" is missing from the following layout configurations: layout (present in layout-large-v11)"
+ errorLine1=" android:id="@id/menu_margin""
+ 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("Should not happen: Can't build telemetry extra JSON", 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("Should not happen: Can't build telemetry extra JSON", 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("Should not happen: Can't build telemetry extra JSON", 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("Should not happen: Can't build telemetry extra JSON", 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, "can't create MediaSession and MediaController!");"
+ 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=" <item name="android:paddingStart">12dip</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=" <item name="android:paddingEnd">7dip</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=" <item name="android:paddingStart">@dimen/dialog_switchpreferenceview_padding</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=" <item name="android:paddingEnd">@dimen/dialog_switchpreferenceview_padding</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=" <item name="android:paddingStart">15dip</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=" <item name="android:paddingEnd">10dip</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=" <item name="android:paddingStart">16dp</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=" <item name="android:paddingEnd">16dp</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=" <item name="android:paddingStart">10dip</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=" <item name="android:paddingEnd">10dip</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=" <item name="android:paddingStart">3dip</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=" <item name="android:paddingEnd">3dip</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=" <item name="android:layout_marginStart">5dip</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=" <item name="android:layout_marginEnd">5dip</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=" <item name="android:layout_marginStart">16dp</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=" <item name="android:layout_marginEnd">16dp</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=" <item name="android:paddingStart">12dp</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=" <item name="android:paddingEnd">12dp</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=" <item name="android:paddingStart">15dp</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=" <item name="android:paddingEnd">15dp</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=" <item name="android:paddingStart">15dp</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=" <item name="android:paddingEnd">15dp</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=" <item name="android:paddingStart">32dp</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=" <item name="android:paddingEnd">32dp</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=" <item name="android:layout_marginStart">8dp</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=" <item name="android:layout_marginEnd">8dp</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=" <item name="android:paddingStart">8dp</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=" <item name="android:paddingEnd">8dp</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="23"/>"
+ 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 "/sdcard/"; use `Environment.getExternalStorageDirectory().getPath()` instead"
+ errorLine1=" public static final String DEFAULT_ROOT_PATH = "/mnt/sdcard/tests";"
+ 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 "`/data/`"; use `Context.getFilesDir().getPath()` instead"
+ errorLine1=" System.load("/data/data/" + AppConstants.ANDROID_PACKAGE_NAME + "/lib/libmozglue.so");"
+ 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 "/sdcard/"; use `Environment.getExternalStorageDirectory().getPath()` instead"
+ errorLine1=" private static final String TEST_FILENAME = "/mnt/sdcard/my-favorite-martian.png";"
+ 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("HH:mm:ss");"
+ 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("yyyy-MM-dd").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("HH:mm").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="true""
+ 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="4dp""
+ 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="15dp">"
+ 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="home_screen""
+ 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 < 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="ifRoom"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="ifRoom"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="ifRoom"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="ifRoom"/>"
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always""
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="always""
+ 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="http://schemas.android.com/apk/res-auto"`"
+ errorLine1=" android:showAsAction="never""
+ 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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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'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, "Error writing file", 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, "Initialized using offset (" + mSurfaceOffsetX + "," + mSurfaceOffsetY + ")");"
+ 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, "Triggering down at (" + x + "," + y + ")");"
+ 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, "Triggering move to (" + x + "," + y + ")");"
+ 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, "Triggering up at (" + x + "," + y + ")");"
+ 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, "Initialized using offset (" + mSurfaceOffsetX + "," + mSurfaceOffsetY + ")");"
+ 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, "Injecting " + 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, "Err", 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, "handleNotificationEvent: empty data");"
+ 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, "enabledOnClickListener is null.");"
+ 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, "Unable to show presentation, display was removed.", 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, "Found default engine name in SharedPreferences: " + 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, "Found default searchplugin locale in distribution Preferences.");"
+ 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, "Found default engine name in distribution LocalizablePreferences override.");"
+ 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, "Found default engine name in distribution LocalizablePreferences.");"
+ 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, "Error getting search engine name from preferences.json", 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, "Error parsing preferences.json", 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, "Error closing InputStream", 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, "Country code fetch failed");"
+ 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, "Country code fetch failed", 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, "Found region-specific default engine name in browsersearch.json.");"
+ 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, "Found default engine name in browsersearch.json.");"
+ 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, "Error getting search engine name from browsersearch.json", 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, "Error parsing browsersearch.json", 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, "Could not create search engine from name: " + 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, "Could not find search plugin files in distribution directory");"
+ 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, "Error reading list.json", 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, "Error parsing list.json", 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, "Error creating shipped search engine from name: " + 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, "Could not find search plugin files in profile directory");"
+ 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, "Error creating search engine from name: " + 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, "Exception creating search engine", 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, "Error reading fallback locale from chrome registry", 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, "Error clearing search history.");"
+ 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("ALTER TABLE " + 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=" <item android:state_focused="true""
+ 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=" <uses-sdk android:minSdkVersion="16""
+ 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="23"/>"
+ 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, "translationY", 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, "alpha", 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="@drawable/abc_ic_clear_mtrl_alpha""
+ 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="@drawable/abc_ic_clear_mtrl_alpha""
+ 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="@drawable/abc_ic_ab_back_mtrl_am_alpha""
+ 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=" <item name="android:textSize">@dimen/design_snackbar_text_size</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 "`sp`" instead of "`dp`""
+ errorLine1=" <dimen name="preference_panel_text_size">15dp</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 "`sp`" instead of "`dp`" for text sizes"
+ errorLine1=" android:textSize="12dp""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/home_remote_tabs_hidden_devices.xml"
+ line="16"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="SpUsage"
+ message="Should use "`sp`" instead of "`dp`" for text sizes"
+ errorLine1=" <item name="android:textSize">16dp</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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true"/>"
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="false"/>"
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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="false""
+ 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="1"` instead"
+ errorLine1=" android:singleLine="true""
+ 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's onReceive method does not appear to call getAction to ensure that the received Intent'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=" <receiver android:name="org.mozilla.gecko.GeckoUpdateReceiver">"
+ 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=" <receiver android:name="org.mozilla.gecko.distribution.ReferrerReceiver""
+ 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=" <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=" <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("/data/app-lib/" + AppConstants.ANDROID_PACKAGE_NAME + "/libmozglue.so");"
+ 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("/data/data/" + AppConstants.ANDROID_PACKAGE_NAME + "/lib/libmozglue.so");"
+ 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 < 16"
+ errorLine1=" if (Build.VERSION.SDK_INT < 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<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<Long, Long> otherVisits = new HashMap<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<Long, String> map = new HashMap<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<Tab>(...)` instead for better performance"
+ errorLine1=" private final HashMap<Integer, Tab> mTabs = new HashMap<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="#FAFAFA"/>"
+ 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="@drawable/dropshadow""
+ 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="@android:color/white">"
+ 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="@android:color/white""
+ 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="@android:color/white">"
+ 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="@drawable/color_picker_row_bg""
+ 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="@color/dark_transparent_overlay">"
+ 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="@color/fxaccount_error_preference_backgroundcolor""
+ 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="@android:color/white">"
+ 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="@drawable/action_bar_button""
+ 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="@color/photon_notification_bg""
+ 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="@color/toolbar_menu_dark_grey"/>"
+ 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="@color/dark_transparent_overlay""
+ 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="@color/dark_transparent_overlay""
+ 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="@color/pressed_about_page_header_grey">"
+ 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="@color/toolbar_grey">"
+ 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="@color/toolbar_grey""
+ 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="@drawable/widget_bg">"
+ 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="@drawable/url_bar_bg""
+ 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="@color/photon_tab_strip_bg"/>"
+ 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="@color/text_and_tabs_tray_grey""
+ 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=" <ScrollView android:layout_width="match_parent""
+ 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=" <LinearLayout android:layout_width="match_parent""
+ errorLine2=" ^">
+ <location
+ file="src/main/res/layout/customtabs_site_identity.xml"
+ line="11"
+ column="5"/>
+ </issue>
+
+ <issue
+ id="TypographyEllipsis"
+ message="Replace "..." with ellipsis character (…, &#8230;) ?"
+ errorLine1=" <string name="bookmarkhistory_import_wait">Please wait...</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=" <application android:label="@string/moz_app_displayname""
+ 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="-2dp""
+ 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=" <item name="android:layout_marginEnd">-3dp</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=" <item name="android:layout_marginEnd">-3dp</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=" <item name="android:layout_marginRight">-3dp</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=" <item name="android:layout_marginEnd">-3dp</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=" <item name="android:layout_marginRight">-3dp</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=" <item name="android:layout_marginRight">-3dp</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=" <item name="android:layout_marginRight">-3dp</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=" <item name="android:layout_marginRight">-3dp</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="10sp""
+ 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=" <ImageButton android:id="@+id/actionbar_menu""
+ 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=" <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=" <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=" <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=" <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=" <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=" <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=" <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=" <ImageView android:id="@+id/site_identity_icon""
+ 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=" <ImageView android:id="@+id/doorhanger_icon""
+ 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=" <ImageView android:id="@+id/firstrun_image""
+ 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=" <ImageView android:id="@+id/firstrun_image""
+ 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=" <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=" <ImageView android:id="@+id/icon""
+ 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=" <ImageView android:id="@+id/home_empty_image""
+ 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=" <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=" <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=" <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=" <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=" <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=" <ImageView android:id="@+id/icon""
+ 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=" <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=" <ImageView android:id="@+id/image""
+ 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=" <ImageView android:id="@+id/image""
+ 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=" <ImageView android:id="@+id/image""
+ 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=" <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=" <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=" <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=" <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=" <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=" <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=" <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=" <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=" <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=" <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=" <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=" <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=" <ImageView android:id="@+id/logo_button""
+ 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=" <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=" <ImageView android:id="@+id/site_identity_icon""
+ 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=" <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=" <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=" <ImageView android:id="@+id/tab_history_timeline_top""
+ 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=" <ImageView android:id="@+id/tab_history_timeline_bottom""
+ 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=" <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=" <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=" <ImageView android:layout_width="wrap_content""
+ 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=" <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=" <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=" <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=" <ImageView android:id="@+id/validation_message_arrow""
+ 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=" <ImageView android:id="@+id/validation_message_arrow_inverted""
+ 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="@dimen/activity_stream_base_margin""
+ 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="@dimen/activity_stream_base_margin""
+ 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="@dimen/activity_stream_base_margin""
+ 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="@dimen/activity_stream_base_margin""
+ 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="5dp""
+ 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="5dp">"
+ 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="?android:attr/scrollbarSize">"
+ 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="24dp""
+ 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="24dp""
+ 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="5dip""
+ 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="5dip""
+ 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="?android:attr/scrollbarSize""
+ 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="?android:attr/scrollbarSize""
+ 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="6dip""
+ 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="6dip""
+ 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="16dp""
+ 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="16dp" />"
+ 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="30dp""
+ 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="30dp""
+ 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="10dp""
+ 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="10dp""
+ 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="@dimen/search_row_padding""
+ 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="@dimen/search_row_padding""
+ 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="12dip""
+ 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="12dip""
+ 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="@dimen/tab_history_title_margin_end""
+ 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="@dimen/tab_history_title_margin_end""
+ 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="@dimen/page_row_edge_padding""
+ 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="@dimen/page_row_edge_padding">"
+ 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="10dp""
+ 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="10dp">"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/photon/res/layout/two_line_page_row.xml"
+ line="32"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`Gravity.START`" instead of "`Gravity.LEFT`" 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 "`Gravity.START`" instead of "`Gravity.LEFT`" 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 "`Gravity.END`" instead of "`Gravity.RIGHT`" 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 "`Gravity.END`" instead of "`Gravity.RIGHT`" 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 "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:layout_gravity="right|end|top""
+ 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="@dimen/doorhanger_section_padding_small"` to better support right-to-left layouts"
+ errorLine1=" android:layout_marginRight="@dimen/doorhanger_section_padding_small"/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/customtabs_site_identity.xml"
+ line="24"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:gravity="right|end""
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="src/main/res/layout/default_doorhanger.xml"
+ line="22"
+ column="32"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:layout_marginEnd="@dimen/doorhanger_section_padding_small"` to better support right-to-left layouts"
+ errorLine1=" android:layout_marginRight="@dimen/doorhanger_section_padding_small""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/doorhanger.xml"
+ line="21"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:gravity="center_vertical|left|start""
+ 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="?android:attr/scrollbarSize"` to better support right-to-left layouts"
+ errorLine1=" android:paddingRight="?android:attr/scrollbarSize">"
+ 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="10dp"` to better support right-to-left layouts"
+ errorLine1=" android:layout_marginLeft="10dp""
+ 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="10dp"` to better support right-to-left layouts"
+ errorLine1=" android:layout_marginLeft="10dp""
+ 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="true"` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentLeft="true""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/media_casting.xml"
+ line="27"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:layout_toStartOf="@id/media_controls"` to better support right-to-left layouts"
+ errorLine1=" android:layout_toLeftOf="@id/media_controls""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/media_casting.xml"
+ line="28"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:layout_alignParentEnd="true"` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentRight="true""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/media_casting.xml"
+ line="38"
+ column="18"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:layout_alignParentEnd="true"` to better support right-to-left layouts"
+ errorLine1=" android:layout_alignParentRight="true""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/menu_popup.xml"
+ line="11"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:gravity="center_vertical|left|start"/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/pin_site_dialog.xml"
+ line="34"
+ column="36"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:paddingEnd="?android:attr/scrollbarSize"` to better support right-to-left layouts"
+ errorLine1=" android:paddingRight="?android:attr/scrollbarSize">"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/preference_panels.xml"
+ line="14"
+ column="15"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:gravity="right|end""
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="src/main/res/layout/preference_rightalign_icon.xml"
+ line="20"
+ column="26"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:layout_gravity="right|end""
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="src/main/res/layout/preference_rightalign_icon.xml"
+ line="32"
+ column="37"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:paddingEnd="?android:attr/scrollbarSize"` to better support right-to-left layouts"
+ errorLine1=" android:paddingRight="?android:attr/scrollbarSize">"
+ 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="15dip"` to better support right-to-left layouts"
+ errorLine1=" android:layout_marginLeft="15dip""
+ 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="6dip"` to better support right-to-left layouts"
+ errorLine1=" android:layout_marginRight="6dip""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/preference_search_engine.xml"
+ line="28"
+ column="9"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:layout_gravity="bottom|right|end""
+ errorLine2=" ~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/search_activity_main.xml"
+ line="53"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:layout_gravity="right|end|center_vertical""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/search_bar.xml"
+ line="34"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:layout_gravity="right|end|center_vertical""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/search_bar.xml"
+ line="44"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`end`" instead of "`right`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:layout_gravity="right|end|center_vertical""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/search_suggestions_row.xml"
+ line="25"
+ column="33"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:drawableStart="@drawable/ic_widget_search"` to better support right-to-left layouts"
+ errorLine1=" android:drawableLeft="@drawable/ic_widget_search""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/search_widget.xml"
+ line="35"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:drawableStart="@drawable/ic_widget_new_tab"` to better support right-to-left layouts"
+ errorLine1=" android:drawableLeft="@drawable/ic_widget_new_tab""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/search_widget.xml"
+ line="57"
+ column="13"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:layout_marginEnd="@dimen/doorhanger_section_padding_small"` to better support right-to-left layouts"
+ errorLine1=" android:layout_marginRight="@dimen/doorhanger_section_padding_small"/>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/site_identity.xml"
+ line="24"
+ column="20"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:gravity="center_vertical|left|start""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/site_setting_item.xml"
+ line="30"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Use "`start`" instead of "`left`" to ensure correct behavior in right-to-left locales"
+ errorLine1=" android:gravity="center_vertical|left|start""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/site_setting_item.xml"
+ line="40"
+ column="30"/>
+ </issue>
+
+ <issue
+ id="RtlHardcoded"
+ message="Consider adding `android:drawableStart="@drawable/switch_button_icon"` to better support right-to-left layouts"
+ errorLine1=" android:drawableLeft="@drawable/switch_button_icon""
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/main/res/layout/tab_queue_toast.xml"
+ line="33"
+ column="13"/>
+ </issue>
+
+</issues>