Lint Report: 30 warnings
Issue Types

Overview

Lint
1warning ObsoleteLintCustomCheck: Obsolete custom lint check
Correctness
6warning GradleDependency: Obsolete Gradle Dependency
5warning NewerVersionAvailable: Newer Library Versions Available
4warning ModifierParameter: Guidelines for Modifier parameters in a Composable function
Performance
7warning UnusedResources: Unused resources
Productivity
7warning UseKtx: Use KTX extension function
Included Additional Checks (70)
Disabled Checks (47)

Obsolete custom lint check

../../../../../.cache/bhdp/gradle-home/caches/9.9.1/transforms/26ace50a5136c6dadfc94dcb98a4525f/transformed/lifecycle-runtime-release/jars/lint.jar: Library lint checks reference invalid APIs; these checks will be skipped!

Lint found an issue registry (androidx.lifecycle.lint.LifecycleRuntimeIssueRegistry)
which contains some references to invalid API:
org.jetbrains.kotlin.asJava.elements.KtLightModifierList#getKotlinOrigin(): org.jetbrains.kotlin.psi.KtModifierList
(Referenced from androidx/lifecycle/lint/LifecycleWhenChecksKt.class)

Therefore, this lint check library is not included
in analysis. This affects the following lint checks:
UnsafeLifecycleWhenUsage,RepeatOnLifecycleWrongUsage

To use this lint check, upgrade to a more recent version
of the library.

ObsoleteLintCustomCheck Warning Priority 10/10

Obsolete Gradle Dependency

../../build.gradle.kts:53: A newer version of androidx.compose:compose-bom than 2025.08.01 is available: 2026.09.00
 50 }
 51 dependencies {
 52     // Mature, mutually compatible stable Compose/Kotlin line; no alpha dependencies.
 53     implementation(platform("androidx.compose:compose-bom:2025.08.01"))                             
 54     implementation("androidx.compose.ui:ui")
 55     implementation("androidx.compose.ui:ui-tooling-preview")
 56     implementation("androidx.compose.foundation:foundation")
../../build.gradle.kts:59: A newer version of androidx.lifecycle:lifecycle-runtime-compose than 2.9.4 is available: 2.11.0
 56     implementation("androidx.compose.foundation:foundation")
 57     implementation("androidx.compose.material3:material3")
 58     implementation("androidx.activity:activity-compose:1.13.0")
 59     implementation("androidx.lifecycle:lifecycle-runtime-compose:2.9.4")                            
 60     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.4")
 61     implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.4")
 62     implementation("androidx.navigation:navigation-compose:2.9.6")
../../build.gradle.kts:60: A newer version of androidx.lifecycle:lifecycle-viewmodel-compose than 2.9.4 is available: 2.11.0
 57     implementation("androidx.compose.material3:material3")
 58     implementation("androidx.activity:activity-compose:1.13.0")
 59     implementation("androidx.lifecycle:lifecycle-runtime-compose:2.9.4")
 60     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.4")                          
 61     implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.4")
 62     implementation("androidx.navigation:navigation-compose:2.9.6")
 63     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2")
../../build.gradle.kts:61: A newer version of androidx.lifecycle:lifecycle-viewmodel-savedstate than 2.9.4 is available: 2.11.0
 58     implementation("androidx.activity:activity-compose:1.13.0")
 59     implementation("androidx.lifecycle:lifecycle-runtime-compose:2.9.4")
 60     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.4")
 61     implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.4")                       
 62     implementation("androidx.navigation:navigation-compose:2.9.6")
 63     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2")
 64     implementation("com.squareup.okhttp3:okhttp:4.12.0")
../../build.gradle.kts:62: A newer version of androidx.navigation:navigation-compose than 2.9.6 is available: 2.10.2
 59     implementation("androidx.lifecycle:lifecycle-runtime-compose:2.9.4")
 60     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.4")
 61     implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.4")
 62     implementation("androidx.navigation:navigation-compose:2.9.6")                                  
 63     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2")
 64     implementation("com.squareup.okhttp3:okhttp:4.12.0")
 65     implementation("org.jsoup:jsoup:1.24.1")
../../build.gradle.kts:70: A newer version of androidx.compose:compose-bom than 2025.08.01 is available: 2026.09.00
 67     testImplementation("org.json:json:20250517")
 68     testImplementation("com.squareup.okhttp3:mockwebserver:4.12.0")
 69     testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2")
 70     androidTestImplementation(platform("androidx.compose:compose-bom:2025.08.01"))                  
 71     androidTestImplementation("androidx.compose.ui:ui-test-junit4")
 72     androidTestImplementation("androidx.test:core:1.7.0")
 73     androidTestImplementation("androidx.test:runner:1.7.0")
GradleDependency Correctness Warning Priority 4/10

Newer Library Versions Available

../../build.gradle.kts:63: A newer version of org.jetbrains.kotlinx:kotlinx-coroutines-android than 1.10.2 is available: 1.11.0
 60     implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.9.4")
 61     implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.4")
 62     implementation("androidx.navigation:navigation-compose:2.9.6")
 63     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2")                       
 64     implementation("com.squareup.okhttp3:okhttp:4.12.0")
 65     implementation("org.jsoup:jsoup:1.24.1")
 66     testImplementation("junit:junit:4.13.2")
../../build.gradle.kts:64: A newer version of com.squareup.okhttp3:okhttp than 4.12.0 is available: 5.5.1
 61     implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.4")
 62     implementation("androidx.navigation:navigation-compose:2.9.6")
 63     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2")
 64     implementation("com.squareup.okhttp3:okhttp:4.12.0")                                            
 65     implementation("org.jsoup:jsoup:1.24.1")
 66     testImplementation("junit:junit:4.13.2")
 67     testImplementation("org.json:json:20250517")
../../build.gradle.kts:67: A newer version of org.json:json than 20250517 is available: 20260814
 64     implementation("com.squareup.okhttp3:okhttp:4.12.0")
 65     implementation("org.jsoup:jsoup:1.24.1")
 66     testImplementation("junit:junit:4.13.2")
 67     testImplementation("org.json:json:20250517")                                                    
 68     testImplementation("com.squareup.okhttp3:mockwebserver:4.12.0")
 69     testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2")
 70     androidTestImplementation(platform("androidx.compose:compose-bom:2025.08.01"))
../../build.gradle.kts:68: A newer version of com.squareup.okhttp3:mockwebserver than 4.12.0 is available: 5.5.1
 65     implementation("org.jsoup:jsoup:1.24.1")
 66     testImplementation("junit:junit:4.13.2")
 67     testImplementation("org.json:json:20250517")
 68     testImplementation("com.squareup.okhttp3:mockwebserver:4.12.0")                                 
 69     testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2")
 70     androidTestImplementation(platform("androidx.compose:compose-bom:2025.08.01"))
 71     androidTestImplementation("androidx.compose.ui:ui-test-junit4")
../../build.gradle.kts:69: A newer version of org.jetbrains.kotlinx:kotlinx-coroutines-test than 1.10.2 is available: 1.11.0
 66     testImplementation("junit:junit:4.13.2")
 67     testImplementation("org.json:json:20250517")
 68     testImplementation("com.squareup.okhttp3:mockwebserver:4.12.0")
 69     testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2")                      
 70     androidTestImplementation(platform("androidx.compose:compose-bom:2025.08.01"))
 71     androidTestImplementation("androidx.compose.ui:ui-test-junit4")
 72     androidTestImplementation("androidx.test:core:1.7.0")
NewerVersionAvailable Correctness Warning Priority 4/10

Guidelines for Modifier parameters in a Composable function

../../src/main/java/com/bharatiessentials/deliverypartner/ui/DesignSystem.kt:110: Modifier parameter should be the first optional parameter
 107         Column(Modifier.padding(Space.Lg),verticalArrangement=Arrangement.spacedBy(Space.Md),content=content)
 108     }
 109 }
 110 @Composable fun PrimaryButton(text:String,onClick:()->Unit,enabled:Boolean=true,busy:Boolean=false,glyph:Glyph?=null,modifier:Modifier=Modifier){
 111     Button(onClick,modifier.fillMaxWidth().heightIn(min=UiSize.Button),enabled=enabled&&!busy,shape=ControlShape,
 112         contentPadding=PaddingValues(horizontal=Space.Lg,vertical=Space.Md),elevation=ButtonDefaults.buttonElevation(defaultElevation=Space.None,pressedElevation=Space.None)){
 113         if(busy){CircularProgressIndicator(Modifier.size(UiSize.Spinner),strokeWidth=UiSize.ProgressStroke,color=LocalContentColor.current);Spacer(Modifier.width(Space.Sm))}
../../src/main/java/com/bharatiessentials/deliverypartner/ui/DesignSystem.kt:118: Modifier parameter should be the first optional parameter
 115         Text(text,textAlign=TextAlign.Center,style=MaterialTheme.typography.labelLarge)
 116     }
 117 }
 118 @Composable fun SecondaryButton(text:String,onClick:()->Unit,glyph:Glyph?=null,enabled:Boolean=true,modifier:Modifier=Modifier){
 119     OutlinedButton(onClick,modifier.heightIn(min=UiSize.Touch),enabled=enabled,shape=ControlShape,border=BorderStroke(Space.Hairline,if(enabled)Line else Line.copy(alpha=.6f)),contentPadding=PaddingValues(horizontal=Space.Md,vertical=Space.Md)){
 120         glyph?.let{BIcon(it,Modifier.size(UiSize.IconSmall));Spacer(Modifier.width(Space.Sm))};Text(text,style=MaterialTheme.typography.labelLarge,textAlign=TextAlign.Center)
 121     }
../../src/main/java/com/bharatiessentials/deliverypartner/ui/DesignSystem.kt:140: Modifier parameter should be the first optional parameter
 137         Text(text,Modifier.padding(horizontal=Space.Sm,vertical=Space.Xs),style=MaterialTheme.typography.labelSmall,color=fg)
 138     }
 139 }
 140 @Composable fun InfoStrip(text:String,warning:Boolean=false,error:Boolean=false,modifier:Modifier=Modifier){
 141     val bg=if(error)DangerBg else if(warning)WarningBg else PaleGreen
 142     val fg=if(error)Danger else if(warning)WarningInk else DeepGreen
 143     Surface(modifier.fillMaxWidth(),color=bg,shape=ControlShape){
../../src/main/java/com/bharatiessentials/deliverypartner/ui/DesignSystem.kt:197: Optional Modifier parameter should have a default value of Modifier
 194 }
 195 
 196 enum class Glyph { Jobs, History, Cash, Alerts, Support, Arrow, Pin, Phone, More, Refresh, Back, Check, Close, Warning, Eye, EyeOff, Person, Logout, Chevron, Package, Shield, Chat, Location }
 197 @Composable fun BIcon(glyph: Glyph, modifier: Modifier = Modifier.size(UiSize.Icon), color: Color = LocalContentColor.current) {
 198     Canvas(modifier.clearAndSetSemantics { }) {
 199         scale(size.minDimension / 24f, pivot = Offset.Zero) {
 200             val stroke = Stroke(width = IconStroke, cap = StrokeCap.Round)
Vendor: Jetpack Compose
Identifier: androidx.compose.ui
Feedback: https://issuetracker.google.com/issues/new?component=612128
ModifierParameter Correctness Warning Priority 3/10

Unused resources

../../src/main/res/values/colors.xml:2: The resource R.color.brand_green_dark appears to be unused
 1 <resources>
 2     <color name="brand_green">#1A6B4F</color><color name="brand_green_dark">#156158</color>         
 3     <color name="paper">#FFFFFF</color><color name="soft_bg">#F4F7F5</color>
 4     <color name="ink">#1A2623</color><color name="ink_muted">#55665F</color>
 5     <color name="warning_bg">#FFF3DC</color><color name="warning_ink">#62450C</color>
../../src/main/res/values/colors.xml:3: The resource R.color.soft_bg appears to be unused
 1 <resources>
 2     <color name="brand_green">#1A6B4F</color><color name="brand_green_dark">#156158</color>
 3     <color name="paper">#FFFFFF</color><color name="soft_bg">#F4F7F5</color>                        
 4     <color name="ink">#1A2623</color><color name="ink_muted">#55665F</color>
 5     <color name="warning_bg">#FFF3DC</color><color name="warning_ink">#62450C</color>
 6 <color name="background_shell">#F5F7F2</color></resources>
../../src/main/res/values/colors.xml:4: The resource R.color.ink_muted appears to be unused
 1 <resources>
 2     <color name="brand_green">#1A6B4F</color><color name="brand_green_dark">#156158</color>
 3     <color name="paper">#FFFFFF</color><color name="soft_bg">#F4F7F5</color>
 4     <color name="ink">#1A2623</color><color name="ink_muted">#55665F</color>                        
 5     <color name="warning_bg">#FFF3DC</color><color name="warning_ink">#62450C</color>
 6 <color name="background_shell">#F5F7F2</color></resources>
../../src/main/res/values/colors.xml:4: The resource R.color.ink appears to be unused
 1 <resources>
 2     <color name="brand_green">#1A6B4F</color><color name="brand_green_dark">#156158</color>
 3     <color name="paper">#FFFFFF</color><color name="soft_bg">#F4F7F5</color>
 4     <color name="ink">#1A2623</color><color name="ink_muted">#55665F</color>                        
 5     <color name="warning_bg">#FFF3DC</color><color name="warning_ink">#62450C</color>
 6 <color name="background_shell">#F5F7F2</color></resources>
../../src/main/res/values/colors.xml:5: The resource R.color.warning_bg appears to be unused
 2     <color name="brand_green">#1A6B4F</color><color name="brand_green_dark">#156158</color>
 3     <color name="paper">#FFFFFF</color><color name="soft_bg">#F4F7F5</color>
 4     <color name="ink">#1A2623</color><color name="ink_muted">#55665F</color>
 5     <color name="warning_bg">#FFF3DC</color><color name="warning_ink">#62450C</color>               
 6 <color name="background_shell">#F5F7F2</color></resources>
../../src/main/res/values/colors.xml:5: The resource R.color.warning_ink appears to be unused
 2     <color name="brand_green">#1A6B4F</color><color name="brand_green_dark">#156158</color>
 3     <color name="paper">#FFFFFF</color><color name="soft_bg">#F4F7F5</color>
 4     <color name="ink">#1A2623</color><color name="ink_muted">#55665F</color>
 5     <color name="warning_bg">#FFF3DC</color><color name="warning_ink">#62450C</color>               
 6 <color name="background_shell">#F5F7F2</color></resources>
../../src/main/res/values/strings.xml:1: The resource R.string.app_name appears to be unused
 1 <resources><string name="app_name">Bharati Delivery Partner</string></resources>                    
UnusedResources Performance Warning Priority 3/10

Use KTX extension function

../../src/main/java/com/bharatiessentials/deliverypartner/alerts/AssignmentAlertRuntime.kt:24: Use the KTX extension function SharedPreferences.edit instead?
 21   @Synchronized override fun save(state: AssignmentAlertLedgerState): Boolean {
 22       val riders = JSONArray().apply { state.baselinedRiders.filter { it > 0 }.sorted().forEach(::put) }
 23       val identities = JSONArray().apply { state.handledIdentityKeys.takeLast(MAX_KEYS).forEach(::put) }
 24       return prefs.edit().putString("baselined_riders", riders.toString())                        
 25           .putString("handled_identities", identities.toString()).commit()
 26   }
../../src/main/java/com/bharatiessentials/deliverypartner/ui/NativeApp.kt:200: Use the KTX extension function String.toUri instead?
 197 }
 198 fun openExternal(context:Context,uri:String?){
 199     if(uri==null||!ExternalLinks.safeExternal(uri)){Toast.makeText(context,"Verified destination unavailable. Contact dispatch.",Toast.LENGTH_LONG).show();return}
 200     try{context.startActivity(Intent(if(uri.startsWith("tel:"))Intent.ACTION_DIAL else Intent.ACTION_VIEW,Uri.parse(uri)))}
 201     catch(_:ActivityNotFoundException){Toast.makeText(context,"No compatible app is installed for this action.",Toast.LENGTH_LONG).show()}
 202     catch(_:SecurityException){Toast.makeText(context,"Android blocked this external action.",Toast.LENGTH_LONG).show()}
 203 }
../../src/main/java/com/bharatiessentials/deliverypartner/alerts/NewOrderAlerts.kt:113: Use the KTX extension function String.toUri instead?
 110       .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
 111       .build()
 112 
 113   fun ownerSoundUri(context: Context): Uri = Uri.parse("android.resource://${context.packageName}/${R.raw.new_order_alert}")
 114 
 115   fun createChannels(context: Context) {
 116       // minSdk 29 guarantees notification-channel APIs are available.
../../src/main/java/com/bharatiessentials/deliverypartner/data/SecureStore.kt:44: Use the KTX extension function SharedPreferences.edit instead?
  41           cipher.init(Cipher.DECRYPT_MODE, secret(), GCMParameterSpec(128, bytes.copyOfRange(0, 12)))
  42           cipher.updateAAD(key.toByteArray(Charsets.UTF_8))
  43           cipher.doFinal(bytes.copyOfRange(12, bytes.size)).toString(Charsets.UTF_8)
  44       } catch (_: Exception) { prefs.edit().clear().commit(); null }                              
  45   }
  46   @Synchronized override fun put(key: String, value: String) {
  47       val cipher = Cipher.getInstance("AES/GCM/NoPadding")
../../src/main/java/com/bharatiessentials/deliverypartner/data/SecureStore.kt:50: Use the KTX extension function SharedPreferences.edit instead?
  47       val cipher = Cipher.getInstance("AES/GCM/NoPadding")
  48       cipher.init(Cipher.ENCRYPT_MODE, secret()); cipher.updateAAD(key.toByteArray(Charsets.UTF_8))
  49       val payload = cipher.iv + cipher.doFinal(value.toByteArray(Charsets.UTF_8))
  50       check(prefs.edit().putString(key, Base64.encodeToString(payload, Base64.NO_WRAP)).commit()) { "Secure session storage unavailable" }
  51   }
  52   @Synchronized override fun remove(key: String) { prefs.edit().remove(key).commit() }
  53   @Synchronized override fun clear() { prefs.edit().clear().commit() }
../../src/main/java/com/bharatiessentials/deliverypartner/data/SecureStore.kt:52: Use the KTX extension function SharedPreferences.edit instead?
  49         val payload = cipher.iv + cipher.doFinal(value.toByteArray(Charsets.UTF_8))
  50         check(prefs.edit().putString(key, Base64.encodeToString(payload, Base64.NO_WRAP)).commit()) { "Secure session storage unavailable" }
  51     }
  52     @Synchronized override fun remove(key: String) { prefs.edit().remove(key).commit() }            
  53     @Synchronized override fun clear() { prefs.edit().clear().commit() }
  54 }
../../src/main/java/com/bharatiessentials/deliverypartner/data/SecureStore.kt:53: Use the KTX extension function SharedPreferences.edit instead?
  50         check(prefs.edit().putString(key, Base64.encodeToString(payload, Base64.NO_WRAP)).commit()) { "Secure session storage unavailable" }
  51     }
  52     @Synchronized override fun remove(key: String) { prefs.edit().remove(key).commit() }
  53     @Synchronized override fun clear() { prefs.edit().clear().commit() }                            
  54 }
  55 
  56 /** Native persistence of WP session cookies never extends their server expiry; local upper bound is 48 hours. */
UseKtx Productivity 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