Lint Report: 12 errors and 99 warnings
Issue Types

Overview

Correctness
1warning CheckResult: Ignoring results
12error NewApi: Calling new methods on older versions
1warning OldTargetApi: Target SDK attribute is not targeting latest version
13warning SdCardPath: Hardcoded reference to /sdcard
1warning PictureInPictureIssue: Picture In Picture best practices not followed
2warning SelectedPhotoAccess: Behavior change when requesting photo library access
2warning ConfigurationScreenWidthHeight: Using Configuration.screenWidthDp/screenHeightDp instead of LocalWindowInfo.current.containerSize
Security
1warning AcceptsUserCertificates: Allowing User Certificates
1warning CustomX509TrustManager: Implements custom TLS trust manager
2warning ExportedService: Exported service does not require permission
1warning InsecureBaseConfiguration: Insecure Base Configuration
1warning DataExtractionRules: Missing data extraction rules
Performance
2warning NotifyDataSetChanged: Invalidating All RecyclerView Data
1warning ObsoleteSdkInt: Obsolete SDK_INT Version Check
2warning StaticFieldLeak: Static Field Leaks
1warning ViewHolder: View Holder Candidates
1warning DisableBaselineAlignment: Missing baselineAligned attribute
1warning Overdraw: Overdraw: Painting regions more than once
62warning UnusedResources: Unused resources
1warning UselessParent: Unnecessary parent layout
1warning TooManyViews: Layout has too many views
Accessibility
1warning ClickableViewAccessibility: Accessibility in Custom Views
Included Additional Checks (97)
Disabled Checks (47)

Ignoring results

../../src/main/java/com/nextcloud/talk/activities/CallActivity.kt:2391: The result of subscribe is not used
 2388 
 2389   // Fire DELETE best-effort; do not block the UI waiting for the server response.
 2390   // The subscription runs entirely on the IO thread — no observeOn(mainThread) needed.
 2391   ncApi!!.leaveCall(credentials, ApiUtils.getUrlForCall(apiVersion, baseUrl, roomToken!!), endCall)
 2392       .subscribeOn(Schedulers.io())
 2393       .subscribe(
 2394           { /* successfully left call */ },
CheckResult Correctness Warning Priority 6/10

Calling new methods on older versions

../../src/main/java/com/nextcloud/talk/activities/CallActivity.kt:2434: Field requires API level 29 (current min is 26): android.app.TaskInfo#taskId
 2431             val taskInfo = appTask.taskInfo
 2432             val baseActivityName = taskInfo?.baseActivity?.className
 2433             taskInfo != null &&
 2434                 taskInfo.taskId != taskId &&                                                        
 2435                 baseActivityName == MainActivity::class.java.name
 2436         } ?: appTasks.firstOrNull { appTask ->
 2437             val taskInfo = appTask.taskInfo
../../src/main/java/com/nextcloud/talk/activities/CallActivity.kt:2440: Field requires API level 29 (current min is 26): android.app.TaskInfo#taskId
 2437             val taskInfo = appTask.taskInfo
 2438             val baseActivityName = taskInfo?.baseActivity?.className
 2439             taskInfo != null &&
 2440                 taskInfo.taskId != taskId &&                                                        
 2441                 baseActivityName != CallActivity::class.java.name &&
 2442                 baseActivityName != CallNotificationActivity::class.java.name
 2443         }
../../src/main/java/com/nextcloud/talk/activities/CallActivity.kt:2452: Field requires API level 29 (current min is 26): android.app.TaskInfo#taskId
 2449             }
 2450             primaryTask.startActivity(context, intent, null)
 2451             primaryTask.moveToFront()
 2452             val primaryTaskId = primaryTask.taskInfo?.taskId                                        
 2453             appTasks
 2454                 .filter { appTask ->
 2455                     val taskInfo = appTask.taskInfo
../../src/main/java/com/nextcloud/talk/activities/CallActivity.kt:2459: Field requires API level 29 (current min is 26): android.app.TaskInfo#taskId
 2456               val baseActivityName = taskInfo?.baseActivity?.className
 2457               val isCallTask = baseActivityName == CallActivity::class.java.name ||
 2458                   baseActivityName == CallNotificationActivity::class.java.name
 2459               taskInfo != null && !isCallTask && taskInfo.taskId != primaryTaskId && taskInfo.taskId != taskId
 2460           }
 2461           .forEach { it.finishAndRemoveTask() }
 2462   } else {
../../src/main/java/com/nextcloud/talk/activities/CallActivity.kt:2459: Field requires API level 29 (current min is 26): android.app.TaskInfo#taskId
 2456               val baseActivityName = taskInfo?.baseActivity?.className
 2457               val isCallTask = baseActivityName == CallActivity::class.java.name ||
 2458                   baseActivityName == CallNotificationActivity::class.java.name
 2459               taskInfo != null && !isCallTask && taskInfo.taskId != primaryTaskId && taskInfo.taskId != taskId
 2460           }
 2461           .forEach { it.finishAndRemoveTask() }
 2462   } else {
NewApi Correctness Error Priority 6/10

Target SDK attribute is not targeting latest version

../../build.gradle.kts:59: 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.
  56         providers.gradleProperty("NC_TEST_SERVER_PASSWORD").getOrElse("")
  57 
  58     minSdk = 26
  59     targetSdk = 36                                                                              
  60     testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  61 
  62     // mayor.minor.hotfix.increment (for increment: 01-50=Alpha / 51-89=RC / 90-99=stable)
OldTargetApi Correctness Warning Priority 6/10

Hardcoded reference to /sdcard

../../src/main/java/com/nextcloud/talk/attachmentpreview/FileAttachmentPreviewScreen.kt:384: Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead
 381         FileAttachmentPreviewContent(
 382             viewModel = rememberPreviewViewModel(
 383                 listOf(
 384                     "file:///sdcard/DCIM/photo.jpg",                                                
 385                     "file:///sdcard/DCIM/video.mp4",
 386                     "file:///sdcard/Documents/report.pdf",
 387                     "file:///sdcard/DCIM/photo2.jpg"
../../src/main/java/com/nextcloud/talk/attachmentpreview/FileAttachmentPreviewScreen.kt:385: Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead
 382             viewModel = rememberPreviewViewModel(
 383                 listOf(
 384                     "file:///sdcard/DCIM/photo.jpg",
 385                     "file:///sdcard/DCIM/video.mp4",                                                
 386                     "file:///sdcard/Documents/report.pdf",
 387                     "file:///sdcard/DCIM/photo2.jpg"
 388                 )
../../src/main/java/com/nextcloud/talk/attachmentpreview/FileAttachmentPreviewScreen.kt:386: Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead
 383                 listOf(
 384                     "file:///sdcard/DCIM/photo.jpg",
 385                     "file:///sdcard/DCIM/video.mp4",
 386                     "file:///sdcard/Documents/report.pdf",                                          
 387                     "file:///sdcard/DCIM/photo2.jpg"
 388                 )
 389             ),
../../src/main/java/com/nextcloud/talk/attachmentpreview/FileAttachmentPreviewScreen.kt:387: Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead
 384                     "file:///sdcard/DCIM/photo.jpg",
 385                     "file:///sdcard/DCIM/video.mp4",
 386                     "file:///sdcard/Documents/report.pdf",
 387                     "file:///sdcard/DCIM/photo2.jpg"                                                
 388                 )
 389             ),
 390             conversationName = "Team Chat",
../../src/main/java/com/nextcloud/talk/attachmentpreview/FileAttachmentPreviewScreen.kt:403: Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead
 400 private fun FileAttachmentPreviewContentSingleFilePreview() {
 401     MaterialTheme(colorScheme = lightColorScheme()) {
 402         FileAttachmentPreviewContent(
 403             viewModel = rememberPreviewViewModel(listOf("file:///sdcard/DCIM/photo.jpg")),          
 404             conversationName = "Team Chat",
 405             initialCompressImages = true,
 406             onDismiss = {},
SdCardPath Correctness Warning Priority 6/10

Picture In Picture best practices not followed

../../src/main/AndroidManifest.xml:86: An activity in this app supports picture-in-picture and the targetSdkVersion is 31 or above; it is therefore strongly recommended to call both setAutoEnterEnabled(true) and setSourceRectHint(...)
  83         android:protectionLevel="signature" />
  84     <uses-permission android:name="${applicationId}.${broadcastPermission}" />
  85 
  86     <application                                                                                    
  87         android:name=".application.NextcloudTalkApplication"
  88         android:allowBackup="true"
  89         android:fullBackupContent="@xml/backup_config"
PictureInPictureIssue Correctness Warning Priority 5/10

Behavior change when requesting photo library access

../../src/main/AndroidManifest.xml:66: Your app is currently not handling Selected Photos Access introduced in Android 14+
  63     <uses-permission
  64         android:name="android.permission.READ_EXTERNAL_STORAGE"
  65         android:maxSdkVersion="32" />
  66     <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />                         
  67     <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
  68     <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
../../src/main/AndroidManifest.xml:67: Your app is currently not handling Selected Photos Access introduced in Android 14+
  64         android:name="android.permission.READ_EXTERNAL_STORAGE"
  65         android:maxSdkVersion="32" />
  66     <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
  67     <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />                          
  68     <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
  69 
  70     <uses-permission android:name="android.permission.WAKE_LOCK" />
SelectedPhotoAccess Correctness Warning Priority 5/10

Using Configuration.screenWidthDp/screenHeightDp instead of LocalWindowInfo.current.containerSize

../../src/main/java/com/nextcloud/talk/conversationinfo/ui/LobbyTimerPickerDialog.kt:150: Using Configuration.screenHeightDp instead of LocalWindowInfo.current.containerSize
 147   )
 148   // The clock dial does not fit on short screens, e.g. phones in landscape
 149   val fitsClockDial =
 150       LocalConfiguration.current.screenHeightDp >= TimePickerDialogDefaults.MinHeightForTimePicker.value
 151   var displayMode by rememberSaveable(stateSaver = TimePickerDisplayModeSaver) {
 152       mutableStateOf(if (fitsClockDial) TimePickerDisplayMode.Picker else TimePickerDisplayMode.Input)
 153   }
../../src/main/java/com/nextcloud/talk/ui/chat/MediaMessage.kt:131: Using Configuration.screenHeightDp instead of LocalWindowInfo.current.containerSize
 128 private const val MAX_HEIGHT_FRACTION = 0.4f
 129 
 130 @Composable
 131 private fun screenMediaMaxHeight(): Dp = LocalConfiguration.current.screenHeightDp.dp * MAX_HEIGHT_FRACTION
 132 
 133 private val minMediaPreviewHeight = 48.dp
 134 private val minMediaPreviewWidth = 88.dp
Vendor: Jetpack Compose
Identifier: androidx.compose.ui
Feedback: https://issuetracker.google.com/issues/new?component=612128
ConfigurationScreenWidthHeight Correctness Warning Priority 3/10

Allowing User Certificates

../../src/main/res/xml/network_security_config.xml:14: The Network Security Configuration allows the use of user certificates in the release version of your app
 11         <trust-anchors>
 12             <certificates src="system"/>
 13             <!-- We allow user-certificates so managed device can make use of self-signed/client certificates -->
 14             <certificates src="user"/>                                                              
 15         </trust-anchors>
 16     </base-config>
 17 </network-security-config>
AcceptsUserCertificates Security Warning Priority 5/10

Implements custom TLS trust manager

../../src/main/java/com/nextcloud/talk/utils/ssl/TrustManager.java:50: Implementing a custom X509TrustManager is error-prone and likely to be insecure. It is likely to disable certificate validation altogether, and is non-trivial to implement correctly without calling Android's default implementation.
  47  * User-accepted certificates are stored under the alias {@code <host>|<sha256 of the certificate>}, so each one is
  48  * only trusted for the host it was accepted for. Entries stored under any other alias are not honoured.
  49  */
  50 public class TrustManager extends X509ExtendedTrustManager {                                        
  51     private static final String TAG = "TrustManager";
  52     private static final String ALIAS_SEPARATOR = "|";
CustomX509TrustManager Security Warning Priority 5/10

Exported service does not require permission

../../src/main/AndroidManifest.xml:331: Exported service does not require permission
 328             android:name=".receivers.EndCallReceiver"
 329             android:exported="false" />
 330 
 331         <service                                                                                    
 332             android:name=".utils.SyncService"
 333             android:exported="true">
 334             <intent-filter>
../../src/main/AndroidManifest.xml:346: Exported service does not require permission
 343                 android:resource="@xml/contacts" />
 344         </service>
 345 
 346         <service                                                                                    
 347             android:name=".chat.data.io.VoiceMessageMediaService"
 348             android:foregroundServiceType="mediaPlayback"
 349             android:exported="true">
ExportedService Security Warning Priority 5/10

Insecure Base Configuration

../../src/main/res/xml/network_security_config.xml:10: Insecure Base Configuration
  7 -->
  8 <network-security-config>
  9     <!-- Allowing cleartextTrafficPermitted - we don't control the server yet strongly suggesting TLS/SSL -->
 10     <base-config cleartextTrafficPermitted="true">                                                  
 11         <trust-anchors>
 12             <certificates src="system"/>
 13             <!-- We allow user-certificates so managed device can make use of self-signed/client certificates -->
InsecureBaseConfiguration Security Warning Priority 5/10

Missing data extraction rules

../../src/main/AndroidManifest.xml:89: The attribute android:fullBackupContent is deprecated from Android 12 and higher and may be removed in future versions. Consider adding the attribute android:dataExtractionRules specifying an @xml resource which configures cloud backups and device transfers on Android 12 and higher.
  86     <application
  87         android:name=".application.NextcloudTalkApplication"
  88         android:allowBackup="true"
  89         android:fullBackupContent="@xml/backup_config"                                              
  90         android:icon="@mipmap/ic_launcher"
  91         android:label="@string/nc_app_name"
  92         android:largeHeap="true"
DataExtractionRules Security Warning Priority 3/10

Invalidating All RecyclerView Data

../../src/main/java/com/nextcloud/talk/conversationinfo/ParticipantItemAdapter.kt:53: It will always be more efficient to use more specific change events if you can. Rely on notifyDataSetChanged as a last resort.
  50     var filterQuery: String? = null
  51         set(value) {
  52             field = value
  53             notifyDataSetChanged()                                                                  
  54         }
  55 
  56     inner class ViewHolder(val binding: RvItemConversationInfoParticipantBinding) :
../../src/main/java/com/nextcloud/talk/polls/adapters/PollCreateOptionsAdapter.kt:43: It will always be more efficient to use more specific change events if you can. Rely on notifyDataSetChanged as a last resort.
 40 
 41     fun updateOptionsList(optionsList: ArrayList<PollCreateOptionItem>) {
 42         list = optionsList
 43         notifyDataSetChanged()                                                                      
 44     }
 45 }
NotifyDataSetChanged Performance Warning Priority 8/10

Obsolete SDK_INT Version Check

../../src/main/res/mipmap-anydpi-v26: This folder configuration (v26) is unnecessary; minSdkVersion is 26. Merge all the resources in this folder into mipmap-anydpi.
ObsoleteSdkInt Performance Warning Priority 6/10

Static Field Leaks

../../src/main/java/com/nextcloud/talk/attachmentpreview/FileAttachmentPreviewViewModel.kt:30: This field leaks a context object
  27  * position, HQ toggle animation state — is ephemeral UI state and stays in Compose's `remember`.
  28  */
  29 internal class FileAttachmentPreviewViewModel(
  30     private val context: Context,                                                                   
  31     private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO,
  32     private val mainDispatcher: CoroutineDispatcher = Dispatchers.Main.immediate,
  33     private val describer: (Context, String, Boolean) -> FileDescription = ::describeFile,
../../src/main/java/com/nextcloud/talk/logger/ui/LogsViewModel.kt:21: This field leaks a context object
 18 import androidx.core.content.edit
 19 import com.nextcloud.talk.logger.Logger
 20 
 21 class LogsViewModel @Inject constructor(private val logsRepository: LogsRepository, private val context: Context) :
 22     ViewModel() {
 23 
 24     @Inject
StaticFieldLeak Performance Warning Priority 6/10

View Holder Candidates

../../src/main/java/com/nextcloud/talk/ui/dialog/DialogBanListFragment.kt:66: Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrolling
  63        override fun getItemId(position: Int): Long = bans[position].bannedTime!!.toLong()
  64 
  65        override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
  66            val binding = BanItemListBinding.inflate(LayoutInflater.from(context))                  
  67            binding.banActorName.text = bans[position].bannedDisplayName
  68            val time = bans[position].bannedTime!!.toLong() * ONE_SEC
  69            binding.banTime.text = DateUtils.formatDateTime(
ViewHolder Performance Warning Priority 5/10

Missing baselineAligned attribute

../../src/main/res/layout/activity_settings.xml:278: Set android:baselineAligned="false" on this element for better performance
  275                         android:clickable="false"/>
  276                 </LinearLayout>
  277 
  278                 <LinearLayout                                                                       
  279                     android:id="@+id/settings_unifiedpush_service"
  280                     android:layout_width="match_parent"
  281                     android:layout_height="wrap_content"
DisableBaselineAlignment Performance Warning Priority 3/10

Overdraw: Painting regions more than once

../../src/main/res/layout/activity_account_verification.xml:12: Possible overdraw: Root element paints background @color/bg_default with a theme that also paints a background (inferred theme is @style/AppTheme.Launcher)
  9     xmlns:tools="http://schemas.android.com/tools"
 10     android:layout_width="match_parent"
 11     android:layout_height="match_parent"
 12     android:background="@color/bg_default"                                                          
 13     android:keepScreenOn="true">
 14 
 15     <ProgressBar
Overdraw Performance Warning Priority 3/10

Unused resources

../../src/main/res/drawable/all_inclusive_24px.xml:7: The resource R.drawable.all_inclusive_24px appears to be unused
  4   ~ SPDX-FileCopyrightText: 2025 Google LLC
  5   ~ SPDX-License-Identifier: Apache-2.0
  6 -->
  7 <vector xmlns:android="http://schemas.android.com/apk/res/android"                                  
  8     android:width="24dp"
  9     android:height="24dp"
 10     android:viewportWidth="960"
../../src/main/res/drawable/baseline_calendar_month_24.xml:7: The resource R.drawable.baseline_calendar_month_24 appears to be unused
  4   ~ SPDX-FileCopyrightText: 2018-2024 Google LLC
  5   ~ SPDX-License-Identifier: Apache-2.0
  6 -->
  7 <vector xmlns:android="http://schemas.android.com/apk/res/android"                                  
  8     android:width="24dp"
  9     android:height="24dp"
 10     android:tint="#000000"
../../src/main/res/drawable/baseline_report_problem_24.xml:7: The resource R.drawable.baseline_report_problem_24 appears to be unused
  4   ~ SPDX-FileCopyrightText: 2021-2025 Google LLC
  5   ~ SPDX-License-Identifier: Apache-2.0
  6 -->
  7 <vector xmlns:android="http://schemas.android.com/apk/res/android"                                  
  8     android:width="24dp"
  9     android:height="24dp"
 10     android:tint="#000000"
../../src/main/res/drawable/baseline_tag_faces_24.xml:7: The resource R.drawable.baseline_tag_faces_24 appears to be unused
  4   ~ SPDX-FileCopyrightText: 2023-2024 Google LLC
  5   ~ SPDX-License-Identifier: Apache-2.0
  6 -->
  7 <vector xmlns:android="http://schemas.android.com/apk/res/android"                                  
  8     android:height="24dp"
  9     android:tint="#000000"
 10     android:viewportHeight="24"
../../src/main/res/values/bool.xml:10: The resource R.bool.value_false appears to be unused
  7 -->
  8 <resources>
  9     <bool name="value_true">true</bool>
 10     <bool name="value_false">false</bool>                                                           
 11 </resources>
UnusedResources Performance Warning Priority 3/10

Unnecessary parent layout

../../src/main/res/layout/activity_settings.xml:286: This LinearLayout layout or its LinearLayout parent is unnecessary; transfer the background attribute to the other view
  283                   android:padding="@dimen/standard_padding"
  284                   android:background="?android:attr/selectableItemBackground">
  285 
  286                   <LinearLayout                                                                   
  287                       android:layout_width="0dp"
  288                       android:layout_height="wrap_content"
  289                       android:layout_weight="1"
UselessParent Performance Warning Priority 2/10

Layout has too many views

../../src/main/res/layout/activity_settings.xml:621: activity_settings.xml has more than 80 views, bad for performance
  618                         android:gravity="center_vertical" />
  619                 </LinearLayout>
  620 
  621                 <LinearLayout                                                                       
  622                     android:id="@+id/settings_incognito_keyboard"
  623                     android:layout_width="match_parent"
  624                     android:layout_height="wrap_content"
TooManyViews Performance Warning Priority 1/10

Accessibility in Custom Views

../../src/main/java/com/nextcloud/talk/ui/SwipeToCloseLayout.kt:47: Custom view SwipeToCloseLayout overrides onTouchEvent but not performClick
 44         return dragHelper.shouldInterceptTouchEvent(ev)
 45     }
 46 
 47     override fun onTouchEvent(ev: MotionEvent): Boolean {                                           
 48         dragHelper.processTouchEvent(ev)
 49         return true
 50     }
ClickableViewAccessibility Accessibility Warning Priority 6/10

Included Additional Checks

This card lists all the extra checks run by lint, provided from libraries, build configuration and extra flags. This is included to help you verify whether a particular check is included in analysis when configuring builds. (Note that the list does not include the hundreds of built-in checks into lint, only additional ones.)

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