Lint Report: 310 warnings
Issue Types

Overview

Lint
1warning ObsoleteLintCustomCheck: Obsolete custom lint check
1warning IidCompatibilityCheckFailure: Firebase IID Compatibility Check Unable To Run
Correctness
14warning InlinedApi: Using inlined constants on older versions
1warning SimpleDateFormat: Implied locale in date format
2warning UnusedAttribute: Attribute unused on older versions
9warning InflateParams: Layout Inflation without a Parent
232warning NonConstantResourceId: Checks use of resource IDs in places requiring constants.
1warning SQLiteString: Using STRING instead of TEXT
1warning UseSwitchCompatOrMaterialCode: Replace usage of Switch widget
3warning VectorRaster: Vector Image Generation
1warning SourceLockedOrientationActivity: Incompatible setRequestedOrientation value
Security
1warning AcceptsUserCertificates: Allowing User Certificates
4warning ExportedService: Exported service does not require permission
1warning InsecureBaseConfiguration: Insecure Base Configuration
Performance
18warning StaticFieldLeak: Static Field Leaks
1warning HandlerLeak: Handler reference leaks
2warning MergeRootFrame: FrameLayout can be replaced with <merge> tag
2warning NestedWeights: Nested layout weights
5warning Overdraw: Overdraw: Painting regions more than once
1warning UsableSpace: Using getUsableSpace()
Accessibility
3warning ClickableViewAccessibility: Accessibility in Custom Views
6warning KeyboardInaccessibleWidget: Keyboard inaccessible widget
Internationalization
1warning RelativeOverlap: Overlapping items in RelativeLayout
Disabled Checks (43)

Obsolete custom lint check

../../../../../root/.gradle/caches/transforms-2/files-2.1/c0ab38c2f5aed4f1186ed0c0289328e5/appcompat-1.2.0/jars/lint.jar: Lint found an issue registry (androidx.appcompat.AppCompatIssueRegistry) which is older than the current API level; these checks may not work correctly.

Recompile the checks against the latest version. Custom check API version is 7 (4.0), current lint API level is 8 (4.1+)

Applies to variants: qaDebug
Does not apply to variants: genericDebug, genericRelease, gplayDebug, gplayRelease, qaRelease, versionDevDebug, versionDevRelease
ObsoleteLintCustomCheck Warning Priority 10/10

Firebase IID Compatibility Check Unable To Run

../../../../src: Check failed with exception: java.lang.NoSuchMethodException: com.android.tools.lint.detector.api.LintModelModuleProject.getGradleProjectModel()
IidCompatibilityCheckFailure Information Priority 1/10

Using inlined constants on older versions

../../../src/main/java/com/owncloud/android/datamodel/MediaProvider.java:55: Field requires API level 29 (current min is 19): android.provider.MediaStore.MediaColumns#BUCKET_ID
  52   // fixed query parameters
  53   private static final Uri IMAGES_MEDIA_URI = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  54   private static final String[] FILE_PROJECTION = new String[]{MediaStore.MediaColumns.DATA};
  55   private static final String IMAGES_FILE_SELECTION = MediaStore.Images.Media.BUCKET_ID + "=";    
  56   private static final String[] IMAGES_FOLDER_PROJECTION = {MediaStore.Images.Media.BUCKET_ID,
  57           MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
  58   private static final String IMAGES_FOLDER_SORT_ORDER = MediaStore.Images.Media.BUCKET_DISPLAY_NAME + " ASC";
../../../src/main/java/com/owncloud/android/datamodel/MediaProvider.java:56: Field requires API level 29 (current min is 19): android.provider.MediaStore.MediaColumns#BUCKET_ID
  53   private static final Uri IMAGES_MEDIA_URI = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  54   private static final String[] FILE_PROJECTION = new String[]{MediaStore.MediaColumns.DATA};
  55   private static final String IMAGES_FILE_SELECTION = MediaStore.Images.Media.BUCKET_ID + "=";
  56   private static final String[] IMAGES_FOLDER_PROJECTION = {MediaStore.Images.Media.BUCKET_ID,    
  57           MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
  58   private static final String IMAGES_FOLDER_SORT_ORDER = MediaStore.Images.Media.BUCKET_DISPLAY_NAME + " ASC";
../../../src/main/java/com/owncloud/android/datamodel/MediaProvider.java:57: Field requires API level 29 (current min is 19): android.provider.MediaStore.MediaColumns#BUCKET_DISPLAY_NAME
  54   private static final String[] FILE_PROJECTION = new String[]{MediaStore.MediaColumns.DATA};
  55   private static final String IMAGES_FILE_SELECTION = MediaStore.Images.Media.BUCKET_ID + "=";
  56   private static final String[] IMAGES_FOLDER_PROJECTION = {MediaStore.Images.Media.BUCKET_ID,
  57           MediaStore.Images.Media.BUCKET_DISPLAY_NAME};                                           
  58   private static final String IMAGES_FOLDER_SORT_ORDER = MediaStore.Images.Media.BUCKET_DISPLAY_NAME + " ASC";
  59 
  60   private static final String[] VIDEOS_FOLDER_PROJECTION = {MediaStore.Video.Media.BUCKET_ID,
../../../src/main/java/com/owncloud/android/datamodel/MediaProvider.java:58: Field requires API level 29 (current min is 19): android.provider.MediaStore.MediaColumns#BUCKET_DISPLAY_NAME
  55   private static final String IMAGES_FILE_SELECTION = MediaStore.Images.Media.BUCKET_ID + "=";
  56   private static final String[] IMAGES_FOLDER_PROJECTION = {MediaStore.Images.Media.BUCKET_ID,
  57           MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
  58   private static final String IMAGES_FOLDER_SORT_ORDER = MediaStore.Images.Media.BUCKET_DISPLAY_NAME + " ASC";
  59 
  60   private static final String[] VIDEOS_FOLDER_PROJECTION = {MediaStore.Video.Media.BUCKET_ID,
  61           MediaStore.Video.Media.BUCKET_DISPLAY_NAME};
../../../src/main/java/com/owncloud/android/datamodel/MediaProvider.java:60: Field requires API level 29 (current min is 19): android.provider.MediaStore.MediaColumns#BUCKET_ID
  57           MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
  58   private static final String IMAGES_FOLDER_SORT_ORDER = MediaStore.Images.Media.BUCKET_DISPLAY_NAME + " ASC";
  59 
  60   private static final String[] VIDEOS_FOLDER_PROJECTION = {MediaStore.Video.Media.BUCKET_ID,     
  61           MediaStore.Video.Media.BUCKET_DISPLAY_NAME};
  62 
  63   private MediaProvider() {
InlinedApi Correctness Warning Priority 6/10

Implied locale in date format

../../../src/main/java/third_parties/ezvcard_android/ContactOperations.java:477: 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.
 474     }
 475 
 476     private void convertBirthdays(List<NonEmptyContentValues> contentValues, VCard vcard) {
 477         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");                                         
 478         for (Birthday birthday : vcard.getBirthdays()) {
 479             Date date = birthday.getDate();
 480             if (date == null) {
SimpleDateFormat Correctness Warning Priority 6/10

Attribute unused on older versions

../../../src/main/res/layout/files_picker.xml:63: Attribute stateListAnimator is only used in API level 21 and higher (current min is 19)
 60             android:layout_height="wrap_content"
 61             android:layout_marginEnd="@dimen/standard_half_margin"
 62             android:layout_weight="1"
 63             android:stateListAnimator="@null"                                                       
 64             app:cornerRadius="@dimen/button_corner_radius"
 65             android:text="@string/common_cancel" />
 66     </LinearLayout>
../../../src/main/res/layout/list_item.xml:26: Attribute android:foreground has no effect on API levels lower than 23 (current min is 19)
  23     android:layout_height="@dimen/standard_list_item_size"
  24     android:baselineAligned="false"
  25     android:descendantFocusability="blocksDescendants"
  26     android:foreground="?android:attr/selectableItemBackground"                                     
  27     android:orientation="horizontal">
  28 
  29     <androidx.constraintlayout.widget.ConstraintLayout
UnusedAttribute Correctness Warning Priority 6/10

Layout Inflation without a Parent

../../../src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java:125: Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)
 122         if (ThemeUtils.themingEnabled(getContext())) {
 123             getContext().getTheme().applyStyle(R.style.FallbackThemingTheme, true);
 124         }
 125         View view = inflater.inflate(R.layout.contacts_backup_fragment, null);                      
 126         ButterKnife.bind(this, view);
 127 
 128         setHasOptionsMenu(true);
../../../src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java:360: Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)
 357   public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 358       Log_OC.d(TAG, "onCreateView");
 359 
 360       View v = inflater.inflate(R.layout.list_fragment, null);                                    
 361       setupEmptyList(v);
 362 
 363       mRecyclerView = v.findViewById(R.id.list_root);
../../../src/main/java/com/owncloud/android/media/MediaControlView.java:78: Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)
  75           ViewGroup.LayoutParams.MATCH_PARENT
  76   );
  77   LayoutInflater inflate = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  78   root = inflate.inflate(R.layout.media_control, null);                                       
  79   initControllerView(root);
  80   addView(root, frameParams);
../../../src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.java:109: Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)
 106   @Override
 107   protected void onCreate(Bundle savedInstanceState) {
 108       super.onCreate(savedInstanceState);
 109       final View view = getLayoutInflater().inflate(R.layout.file_list_actions_bottom_sheet_fragment, null);
 110       setContentView(view);
 111 
 112       if (getWindow() != null) {
../../../src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.java:150: Avoid passing null as the view root (needed to resolve layout parameters on the inflated layout's root element)
 147   LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 148 
 149   for (Creator creator : directEditing.getCreators().values()) {
 150       View creatorView = vi.inflate(R.layout.file_list_actions_bottom_sheet_creator, null);
 151       ((TextView) creatorView.findViewById(R.id.creator_name)).setText(
 152           String.format(fileActivity.getString(R.string.editor_placeholder),
 153                         fileActivity.getString(R.string.create_new),
InflateParams Correctness Warning Priority 5/10

Checks use of resource IDs in places requiring constants.

../../../src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java:70: Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes
  67     private static final String TAG = ActivitiesActivity.class.getSimpleName();
  68     private static final int UNDEFINED = -1;
  69 
  70     @BindView(R.id.empty_list_view)                                                                 
  71     public LinearLayout emptyContentContainer;
  72 
  73     @BindView(R.id.swipe_containing_list)
../../../src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java:73: Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes
  70     @BindView(R.id.empty_list_view)
  71     public LinearLayout emptyContentContainer;
  72 
  73     @BindView(R.id.swipe_containing_list)                                                           
  74     public SwipeRefreshLayout swipeListRefreshLayout;
  75 
  76     @BindView(R.id.empty_list_view_text)
../../../src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java:76: Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes
  73     @BindView(R.id.swipe_containing_list)
  74     public SwipeRefreshLayout swipeListRefreshLayout;
  75 
  76     @BindView(R.id.empty_list_view_text)                                                            
  77     public TextView emptyContentMessage;
  78 
  79     @BindView(R.id.empty_list_view_headline)
../../../src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java:79: Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes
  76     @BindView(R.id.empty_list_view_text)
  77     public TextView emptyContentMessage;
  78 
  79     @BindView(R.id.empty_list_view_headline)                                                        
  80     public TextView emptyContentHeadline;
  81 
  82     @BindView(R.id.empty_list_icon)
../../../src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java:82: Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation attributes
  79     @BindView(R.id.empty_list_view_headline)
  80     public TextView emptyContentHeadline;
  81 
  82     @BindView(R.id.empty_list_icon)                                                                 
  83     public ImageView emptyContentIcon;
  84 
  85     @BindView(R.id.empty_list_progress)
NonConstantResourceId Correctness Warning Priority 5/10

Using STRING instead of TEXT

../../../src/main/java/com/owncloud/android/providers/FileContentProvider.java:880: 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.)
  877   }
  878 
  879   private void createFileSystemTable(SQLiteDatabase db) {
  880       db.execSQL("CREATE TABLE IF NOT EXISTS " + ProviderTableMeta.FILESYSTEM_TABLE_NAME + "("    
  881                      + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "      // id
  882                      + ProviderTableMeta.FILESYSTEM_FILE_LOCAL_PATH + " TEXT, "
  883                      + ProviderTableMeta.FILESYSTEM_FILE_IS_FOLDER + " INTEGER, "
SQLiteString Correctness Warning Priority 5/10

Replace usage of Switch widget

../../../src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java:74: Use SwitchCompat from AppCompat or SwitchMaterial from Material library
  71             View child = viewGroup.getChildAt(i);
  72 
  73             if (child instanceof Switch) {
  74                 Switch switchView = (Switch) child;                                                 
  75 
  76                 if(thumbColorStateList == null && trackColorStateList == null) {
  77                     int thumbColor = ThemeUtils.primaryAccentColor(getContext());
UseSwitchCompatOrMaterialCode Correctness Warning Priority 5/10

Vector Image Generation

../../../src/main/res/drawable/ic_circles.xml:1: This attribute is not supported in images generated from this vector icon for API < 21; check generated icon to make sure it looks acceptable
  1 <vector android:autoMirrored="true"                                                                 
  2     android:height="64dp"
  3     android:viewportHeight="57"
  4     android:viewportWidth="57"
../../../src/main/res/drawable/ic_edit.xml:23: This attribute is not supported in images generated from this vector icon for API < 21; check generated icon to make sure it looks acceptable
 20   ~ along with this program. If not, see <https://www.gnu.org/licenses/>.
 21   -->
 22 
 23 <vector android:autoMirrored="true"                                                                 
 24     android:height="24dp"
 25     android:viewportHeight="24"
 26     android:viewportWidth="24"
../../../src/main/res/drawable/ic_post_add.xml:23: This attribute is not supported in images generated from this vector icon for API < 21; check generated icon to make sure it looks acceptable
 20   ~ along with this program. If not, see <https://www.gnu.org/licenses/>.
 21   -->
 22 
 23 <vector android:autoMirrored="true"                                                                 
 24     android:height="24dp"
 25     android:viewportHeight="24"
 26     android:viewportWidth="24"
VectorRaster Correctness Warning Priority 5/10

Incompatible setRequestedOrientation value

../../../src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java:310: You should not lock orientation of your activities, so that you can support a good user experience for any device or orientation
  307 
  308         /// load user interface
  309         if (webViewLoginMethod) {
  310             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);                      
  311             setContentView(R.layout.account_setup_webview);
  312             mLoginWebView = findViewById(R.id.login_webview);
  313             initWebViewLogin(webloginUrl, false);
SourceLockedOrientationActivity Correctness Warning Priority 4/10

Allowing User Certificates

../../../src/main/res/xml/network_security_config.xml:9: The Network Security Configuration allows the use of user certificates in the release version of your app
  6             <!-- Trust preinstalled CAs -->
  7             <certificates src="system"/>
  8             <!-- Additionally trust user added CAs -->
  9             <certificates src="user"/>                                                              
 10         </trust-anchors>
 11     </base-config>
 12 </network-security-config>
AcceptsUserCertificates Security Warning Priority 5/10

Exported service does not require permission

../../../src/gplay/AndroidManifest.xml:65: Exported service does not require permission
 62             tools:replace="android:targetActivity"/>
 63 
 64 
 65         <service                                                                                    
 66             android:name=".services.firebase.NCFirebaseMessagingService">
 67             <intent-filter>
 68                 <action android:name="com.google.firebase.MESSAGING_EVENT"/>
Applies to variants: gplayDebug, gplayRelease
Does not apply to variants: genericDebug, genericRelease, qaDebug, qaRelease, versionDevDebug, versionDevRelease
../../../src/main/AndroidManifest.xml:180: Exported service does not require permission
 177             android:label="@string/app_name"
 178             android:theme="@style/Theme.ownCloud.Fullscreen" />
 179 
 180         <service                                                                                    
 181             android:name=".authentication.AccountAuthenticatorService"
 182             android:exported="true" >
 183             <intent-filter android:priority="100" >
../../../src/main/AndroidManifest.xml:192: Exported service does not require permission
 189                 android:resource="@xml/authenticator" />
 190         </service>
 191 
 192         <service                                                                                    
 193             android:name=".syncadapter.FileSyncService"
 194             android:exported="true" >
 195             <intent-filter>
../../../src/main/AndroidManifest.xml:398: Exported service does not require permission
 395                   android:theme="@style/Theme.ownCloud" />
 396 
 397 
 398         <service                                                                                    
 399             android:name=".services.AccountManagerService"
 400             android:enabled="true"
 401             android:exported="true" >
ExportedService Security Warning Priority 5/10

Insecure Base Configuration

../../../src/main/res/xml/network_security_config.xml:4: Insecure Base Configuration
  1 <?xml version="1.0" encoding="utf-8"?>
  2 
  3 <network-security-config>
  4     <base-config cleartextTrafficPermitted="true">                                                  
  5         <trust-anchors>
  6             <!-- Trust preinstalled CAs -->
  7             <certificates src="system"/>
InsecureBaseConfiguration Security Warning Priority 5/10

Static Field Leaks

../../../src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java:527: This AsyncTask class should be static or leaks might occur (anonymous android.os.AsyncTask)
 524 
 525   }
 526 
 527   private AsyncTask<Void, Void, Boolean> loadContactsTask = new AsyncTask<Void, Void, Boolean>() {
 528 
 529       @Override
 530       protected void onPreExecute() {
../../../src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java:218: This AsyncTask class should be static or leaks might occur (anonymous android.os.AsyncTask)
 215 
 216   private void refreshBackupFolder(final String backupFolderPath,
 217                                    final ContactsPreferenceActivity contactsPreferenceActivity) {
 218       AsyncTask<String, Integer, Boolean> task = new AsyncTask<String, Integer, Boolean>() {      
 219           @Override
 220           protected Boolean doInBackground(String... path) {
 221               FileDataStorageManager storageManager = new FileDataStorageManager(account,
../../../src/main/java/com/owncloud/android/ui/asynctasks/CopyAndUploadContentUrisTask.java:58: This field leaks a context object
  55    */
  56   private WeakReference<OnCopyTmpFilesTaskListener> mListener;
  57 
  58   /**                                                                                             
  59    * Reference to application context, used to access app resources. Holding it should not be a problem,
  60    * since it needs to exist until the end of the AsyncTask although the caller Activity were finished
  61    * before.
../../../src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java:209: This AsyncTask class should be static or leaks might occur (com.owncloud.android.ui.activity.ErrorsWhileCopyingHandlerActivity.MoveFilesTask)
 206     /**
 207      * Asynchronous task performing the move of all the local files to the ownCloud folder.
 208      */
 209     private class MoveFilesTask extends AsyncTask<Void, Void, Boolean> {                            
 210 
 211         /**
 212          * Updates the UI before trying the movement
../../../src/main/java/com/owncloud/android/ui/asynctasks/FetchRemoteFileTask.java:49: This field leaks a context object
  46     private Account account;
  47     private String fileId;
  48     private FileDataStorageManager storageManager;
  49     private FileDisplayActivity fileDisplayActivity;                                                
  50 
  51     public FetchRemoteFileTask(Account account,
  52                                String fileId,
StaticFieldLeak Performance Warning Priority 6/10

Handler reference leaks

../../../src/main/java/com/owncloud/android/media/MediaControlView.java:165: This Handler class should be static or leaks might occur (anonymous android.os.Handler)
 162     }
 163 
 164 
 165     private Handler handler = new Handler() {                                                       
 166         @Override
 167         public void handleMessage(Message msg) {
 168             int pos;
HandlerLeak Performance Warning Priority 4/10

FrameLayout can be replaced with <merge> tag

../../../src/main/res/layout/account_setup_webview.xml:2: This <FrameLayout> can be replaced with a <merge> tag
  1 <?xml version="1.0" encoding="utf-8"?>
  2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"                             
  3              android:orientation="vertical"
  4              android:layout_width="match_parent"
  5              android:layout_height="match_parent">
../../../src/main/res/layout/video_layout.xml:19: This <FrameLayout> can be replaced with a <merge> tag
 16   You should have received a copy of the GNU General Public License
 17   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 18 -->
 19 <FrameLayout    xmlns:android="http://schemas.android.com/apk/res/android"                             
 20                 android:layout_width="match_parent"
 21                 android:layout_height="match_parent" >
MergeRootFrame Performance Warning Priority 4/10

Nested layout weights

../../../src/main/res/layout/first_run_activity.xml:40: Nested weights are bad for performance
  37             android:id="@+id/contentPanel"
  38             android:layout_width="match_parent"
  39             android:layout_height="0dp"
  40             android:layout_weight="1"/>                                                             
  41 
  42         <com.owncloud.android.ui.whatsnew.ProgressIndicator
  43             android:id="@+id/progressIndicator"
../../../src/main/res/layout/whats_new_activity.xml:63: Nested weights are bad for performance
 60             android:layout_width="0dp"
 61             android:layout_height="match_parent"
 62             android:layout_gravity="center_vertical|center_horizontal"
 63             android:layout_weight="1"                                                               
 64             android:gravity="center"
 65             android:paddingLeft="0dp"
 66             android:paddingRight="0dp"
NestedWeights Performance Warning Priority 3/10

Overdraw: Painting regions more than once

../../../src/main/res/layout/activity_row.xml:23: Possible overdraw: Root element paints background ?android:attr/activatedBackgroundIndicator with a theme that also paints a background (inferred theme is @style/Theme.ownCloud.Toolbar)
 20     android:id="@+id/list_item"
 21     android:layout_width="match_parent"
 22     android:layout_height="@dimen/activity_row_layout_height"
 23     android:background="?android:attr/activatedBackgroundIndicator"                                    
 24     android:minWidth="@dimen/activity_row_layout_min_width_independent"
 25     android:orientation="horizontal"
 26     android:paddingEnd="@dimen/standard_padding"
../../../src/main/res/layout/generic_explanation.xml:22: Possible overdraw: Root element paints background @color/bg_default with a theme that also paints a background (inferred theme is @style/Theme.ownCloud.Toolbar)
 19 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 20     android:layout_width="match_parent"
 21     android:layout_height="match_parent"
 22     android:background="@color/bg_default"                                                          
 23     android:id="@+id/explanation"
 24     android:orientation="vertical">
../../../src/main/res/layout/info_box.xml:27: Possible overdraw: Root element paints background @color/filelist_icon_background with a theme that also paints a background (inferred theme is @style/Theme.ownCloud.Toolbar)
 24     android:layout_width="match_parent"
 25     android:layout_height="wrap_content"
 26     android:layout_gravity="center_horizontal|bottom"
 27     android:background="@color/filelist_icon_background"                                            
 28     android:gravity="center"
 29     android:padding="@dimen/standard_half_padding"
 30     android:visibility="gone">
../../../src/main/res/layout/toolbar_standard.xml:27: Possible overdraw: Root element paints background @color/bg_default with a theme that also paints a background (inferred theme is @style/Theme.ownCloud.Toolbar)
  24     android:id="@+id/appbar"
  25     android:layout_width="match_parent"
  26     android:layout_height="wrap_content"
  27     android:background="@color/bg_default"                                                          
  28     tools:viewBindingIgnore="true">
  29 
  30     <FrameLayout
../../../src/main/res/layout/user_info_layout.xml:25: Possible overdraw: Root element paints background @color/bg_default with a theme that also paints a background (inferred theme is @style/Theme.ownCloud.Toolbar)
  22     xmlns:tools="http://schemas.android.com/tools"
  23     android:layout_width="match_parent"
  24     android:layout_height="match_parent"
  25     android:background="@color/bg_default"                                                          
  26     android:orientation="vertical">
  27 
  28     <include layout="@layout/toolbar_standard" />
Overdraw Performance Warning Priority 3/10

Using getUsableSpace()

../../../src/main/java/com/owncloud/android/utils/FileStorageUtils.java:140: Consider also using StorageManager#getAllocatableBytes and allocateBytes which will consider clearable cached data
 137      */
 138     public static long getUsableSpace() {
 139         File savePath = new File(MainApp.getStoragePath());
 140         return savePath.getUsableSpace();                                                           
 141     }
 142 
 143     /**
UsableSpace Performance Warning Priority 3/10

Accessibility in Custom Views

../../../src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java:374: Custom view `RecyclerView` has setOnTouchListener called on it but does not override performClick
 371 
 372   mScaleGestureDetector = new ScaleGestureDetector(MainApp.getAppContext(), new ScaleListener());
 373 
 374   getRecyclerView().setOnTouchListener((view, motionEvent) -> {                               
 375       mScaleGestureDetector.onTouchEvent(motionEvent);
 376 
 377       if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
../../../src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.java:196: Custom view `VideoView` has setOnTouchListener called on it but does not override performClick
 193         mPreviewContainer = view.findViewById(R.id.file_preview_container);
 194         mImagePreview = view.findViewById(R.id.image_preview);
 195         mVideoPreview = view.findViewById(R.id.video_preview);
 196         mVideoPreview.setOnTouchListener(this);                                                     
 197 
 198         mMediaController = view.findViewById(R.id.media_controller);
../../../src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.java:622: PreviewMediaFragment#onTouch should call View#performClick when a click is detected
 619   }
 620 
 621   @Override
 622   public boolean onTouch(View v, MotionEvent event) {                                             
 623       if (event.getAction() == MotionEvent.ACTION_DOWN && v.equals(mVideoPreview)) {
 624           // added a margin on the left to avoid interfering with gesture to open navigation drawer
 625           if (event.getX() / Resources.getSystem().getDisplayMetrics().density > MIN_DENSITY_RATIO) {
ClickableViewAccessibility Accessibility Warning Priority 6/10

Keyboard inaccessible widget

../../../src/main/res/layout/activity_list_layout.xml:25: 'clickable' attribute found, please also add 'focusable'
 22     android:id="@+id/drawer_layout"
 23     android:layout_width="match_parent"
 24     android:layout_height="match_parent"
 25     android:clickable="true"                                                                        
 26     android:fitsSystemWindows="true">
 27 
 28     <androidx.coordinatorlayout.widget.CoordinatorLayout
../../../src/main/res/layout/community_layout.xml:26: 'clickable' attribute found, please also add 'focusable'
  23     xmlns:app="http://schemas.android.com/apk/res-auto"
  24     android:layout_width="match_parent"
  25     android:layout_height="match_parent"
  26     android:clickable="true"                                                                        
  27     android:fitsSystemWindows="true">
  28 
  29     <!-- The main content view -->
../../../src/main/res/layout/contacts_preference.xml:25: 'clickable' attribute found, please also add 'focusable'
 22     android:id="@+id/drawer_layout"
 23     android:layout_width="match_parent"
 24     android:layout_height="match_parent"
 25     android:clickable="true"                                                                        
 26     android:fitsSystemWindows="true">
 27 
 28     <!-- The main content view -->
../../../src/main/res/layout/files.xml:24: 'clickable' attribute found, please also add 'focusable'
 21     android:id="@+id/drawer_layout"
 22     android:layout_width="match_parent"
 23     android:layout_height="match_parent"
 24     android:clickable="true"
                                                                       
 25     android:fitsSystemWindows="true">
 26 
 27     <androidx.coordinatorlayout.widget.CoordinatorLayout
../../../src/main/res/layout/notifications_layout.xml:27: 'clickable' attribute found, please also add 'focusable'
 24     android:id="@+id/drawer_layout"
 25     android:layout_width="match_parent"
 26     android:layout_height="match_parent"
 27     android:clickable="true"                                                                        
 28     android:fitsSystemWindows="true">
 29 
 30     <androidx.coordinatorlayout.widget.CoordinatorLayout
../../../src/main/res/layout/preview_image_activity.xml:24: 'clickable' attribute found, please also add 'focusable'
 21     android:id="@+id/drawer_layout"
 22     android:layout_width="match_parent"
 23     android:layout_height="match_parent"
 24     android:clickable="true" >                                                                      
 25 
 26     <com.owncloud.android.ui.components.CustomViewPager
 27         android:id="@+id/fragmentPager"
KeyboardInaccessibleWidget Accessibility Warning Priority 3/10

Overlapping items in RelativeLayout

../../../src/main/res/layout/synced_folders_settings_layout.xml:382: LinearLayout-3 can overlap @id/delete if @string/common_delete, LinearLayout-3 grow due to localized text expansion
 379             android:layout_alignParentStart="true"
 380             android:text="@string/common_delete" />
 381 
 382         <LinearLayout                                                                               
 383             android:layout_width="wrap_content"
 384             android:layout_height="wrap_content"
 385             android:layout_alignParentEnd="true">
RelativeOverlap Internationalization Warning Priority 3/10

Disabled Checks

One or more issues were not run by lint, either because the check is not enabled by default, or because it was disabled with a command line flag or via one or more lint.xml configuration files in the project directories.

Suppressing Warnings and Errors

Lint errors can be suppressed in a variety of ways:

1. With a @SuppressLint annotation in the Java code
2. With a tools:ignore attribute in the XML file
3. With a //noinspection comment in the source code
4. With ignore flags specified in the build.gradle file, as explained below
5. With a lint.xml configuration file in the project
6. With a lint.xml configuration file passed to lint via the --config flag
7. With the --ignore flag passed to lint.

To suppress a lint warning with an annotation, add a @SuppressLint("id") annotation on the class, method or variable declaration closest to the warning instance you want to disable. The id can be one or more issue id's, such as "UnusedResources" or {"UnusedResources","UnusedIds"}, or it can be "all" to suppress all lint warnings in the given scope.

To suppress a lint warning with a comment, add a //noinspection id comment on the line before the statement with the error.

To suppress a lint warning in an XML file, add a tools:ignore="id" attribute on the element containing the error, or one of its surrounding elements. You also need to define the namespace for the tools prefix on the root element in your document, next to the xmlns:android declaration:
xmlns:tools="http://schemas.android.com/tools"

To suppress a lint warning in a build.gradle file, add a section like this:
android {
    lintOptions {
        disable 'TypographyFractions','TypographyQuotes'
    }
}

Here we specify a comma separated list of issue id's after the disable command. You can also use warning or error instead of disable to change the severity of issues.

To suppress lint warnings with a configuration XML file, create a file named lint.xml and place it at the root directory of the module in which it applies.

The format of the lint.xml file is something like the following:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
    <!-- Ignore everything in the test source set -->
    <issue id="all">
        <ignore path="\*/test/\*" />
    </issue>

    <!-- Disable this given check in this project -->
    <issue id="IconMissingDensityFolder" severity="ignore" />

    <!-- Ignore the ObsoleteLayoutParam issue in the given files -->
    <issue id="ObsoleteLayoutParam">
        <ignore path="res/layout/activation.xml" />
        <ignore path="res/layout-xlarge/activation.xml" />
        <ignore regexp="(foo|bar)\.java" />
    </issue>

    <!-- Ignore the UselessLeaf issue in the given file -->
    <issue id="UselessLeaf">
        <ignore path="res/layout/main.xml" />
    </issue>

    <!-- Change the severity of hardcoded strings to "error" -->
    <issue id="HardcodedText" severity="error" />
</lint>

To suppress lint checks from the command line, pass the --ignore flag with a comma separated list of ids to be suppressed, such as:
$ lint --ignore UnusedResources,UselessLeaf /my/project/path

For more information, see https://developer.android.com/studio/write/lint.html#config