Lint Report: 7 errors and 212 warnings
Issue Types

Overview

Correctness
1warning ScopedStorage: Affected by scoped storage
6warning DefaultLocale: Implied default locale in case conversion
1warning ExifInterface: Using android.media.ExifInterface
1warning OldTargetApi: Target SDK attribute is not targeting latest version
1error WrongConstant: Incorrect constant
26warning NonConstantResourceId: Checks use of resource IDs in places requiring constants.
8warning GradleDependency: Obsolete Gradle Dependency
1warning DataBindingWithoutKapt: Data Binding without Annotation Processing
2warning UseCompatTextViewDrawableXml: Compat compound drawable attributes should be used on TextView
Correctness:Messages
2error TimberArgCount: Formatting argument types incomplete or inconsistent
4error MissingTranslation: Incomplete translation
24warning LogNotTimber: Logging call to Log instead of Timber
1warning PluralsCandidate: Potential Plurals
Security
2warning TrustAllX509TrustManager: Insecure TLS/SSL trust manager
Performance
1warning ObsoleteSdkInt: Obsolete SDK_INT Version Check
2warning StaticFieldLeak: Static Field Leaks
1warning UseCompoundDrawables: Node can be replaced by a TextView with compound drawables
77warning UnusedResources: Unused resources
Usability:Icons
10warning IconDuplicates: Duplicated icons under different names
Usability
2warning TextFields: Missing inputType
1warning SmallSp: Text size is too small
2warning Autofill: Use Autofill
Productivity
1warning KtxExtensionAvailable: KTX Extension Available
Accessibility
22warning ContentDescription: Image without contentDescription
Internationalization
8warning SetTextI18n: TextView Internationalization
11warning HardcodedText: Hardcoded text
Internationalization:Bidirectional Text
2warning RtlHardcoded: Using left/right instead of start/end attributes
Disabled Checks (38)

Affected by scoped storage

../../app/src/main/AndroidManifest.xml:34: WRITE_EXTERNAL_STORAGE no longer provides write access when targeting Android 11+, even when using requestLegacyExternalStorage
 31         tools:ignore="ProtectedPermissions" />
 32     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
 33     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 34     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
                   
 35     <uses-permission
 36         android:name="android.permission.REQUEST_INSTALL_PACKAGES"
 37         tools:ignore="ProtectedPermissions" />
ScopedStorage Correctness Warning Priority 8/10

Implied default locale in case conversion

../../app/src/main/java/com/w3engineers/unicef/util/helper/ContentUtil.java:595: 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().
 592     }
 593 
 594     public boolean isTypeImage(String path) {
 595         path = path.toLowerCase();                                                                  
 596         return path.endsWith(".jpg") || path.endsWith(".jpeg") || path.endsWith(".png")
 597                 || path.endsWith(".pjpeg") || path.endsWith(".rgb") || path.endsWith(".webp")
 598                 || path.endsWith(".gif") || path.endsWith(".bmp") || path.endsWith(".ico");
../../app/src/main/java/com/w3engineers/unicef/util/helper/ContentUtil.java:602: 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().
 599     }
 600 
 601     public boolean isTypeVideo(String path) {
 602         path = path.toLowerCase();                                                                  
 603         return path.endsWith(".3gp") || path.endsWith(".mpg") || path.endsWith(".mpeg")
 604                 || path.endsWith(".mpe") || path.endsWith(".mp4") || path.endsWith(".avi")
 605                 || path.endsWith(".wmv") || path.endsWith(".ogv") || path.endsWith(".flv")
../../app/src/main/java/com/w3engineers/unicef/util/helper/ContentUtil.java:619: 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().
 616     }
 617 
 618     public boolean isTypeAudio(String path) {
 619         path = path.toLowerCase();                                                                  
 620         return path.endsWith(".m4p") || path.endsWith(".3gpp") || path.endsWith(".mp3")
 621                 || path.endsWith(".wma") || path.endsWith(".wav") || path.endsWith(".ogg")
 622                 || path.endsWith(".m4a") || path.endsWith(".aac") || path.endsWith(".ota")
../../app/src/main/java/com/w3engineers/unicef/util/helper/ContentUtil.java:629: 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().
 626     }
 627 
 628     public boolean isTypeMisc(String path) {
 629         path = path.toLowerCase();                                                                  
 630         return path.endsWith(".doc") || path.endsWith(".docx") || path.endsWith(".rtf")
 631                 || path.endsWith(".pdf") || path.endsWith(".ppt") || path.endsWith(".pptx")
 632                 || path.endsWith(".xls") || path.endsWith(".xlsx") || path.endsWith(".txt");
../../app/src/main/java/com/w3engineers/unicef/util/helper/ContentUtil.java:636: 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().
 633     }
 634 
 635     public boolean isTypeCompress(String path) {
 636         path = path.toLowerCase();                                                                  
 637         return path.endsWith(".zip") || path.endsWith(".rar");
 638     }
../../app/src/main/java/com/w3engineers/unicef/util/helper/ContentUtil.java:641: 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().
 638     }
 639 
 640     public boolean isTypeApp(String url) {
 641         return url.toLowerCase().endsWith(".apk");                                                  
 642     }
 643 }
DefaultLocale Correctness Warning Priority 6/10

Using android.media.ExifInterface

../../app/src/main/java/com/w3engineers/unicef/util/helper/ContentUtil.java:11: Avoid using android.media.ExifInterface; use android.support.media.ExifInterface from the support library instead
   8 import android.graphics.Bitmap;
   9 import android.graphics.BitmapFactory;
  10 import android.graphics.Matrix;
  11 import android.media.ExifInterface;                                                                 
  12 import android.media.MediaPlayer;
  13 import android.media.ThumbnailUtils;
  14 import android.net.Uri;
ExifInterface Correctness Warning Priority 6/10

Target SDK attribute is not targeting latest version

../../app/build.gradle:18: 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.
  15     defaultConfig {
  16         applicationId "com.w3engineers.unicef.telemesh"
  17         minSdkVersion 21
  18         targetSdkVersion 30
                                                                        
  19         versionCode 13
  20         versionName "0.1.2-beta"
  21         testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
OldTargetApi Correctness Warning Priority 6/10

Incorrect constant

../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/main/MainActivity.java:644: Must be one of: BaseTransientBottomBar.LENGTH_INDEFINITE, BaseTransientBottomBar.LENGTH_SHORT, BaseTransientBottomBar.LENGTH_LONG or value must be ≥ 1 (was -2)
 641                 Snackbar.make(
 642                         findViewById(R.id.main_view),
 643                         "An update has just been downloaded.",
 644                         Snackbar.LENGTH_INDEFINITE);                                                
 645 
 646         snackbar.setAction("Install", view -> {
 647             if (mAppUpdateManager != null) {
Applies to variants: debug
Does not apply to variants: release
WrongConstant Correctness Error Priority 6/10

Checks use of resource IDs in places requiring constants.

../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/editprofile/EditProfileActivity.java:82: Resource IDs will be non-final in Android Gradle Plugin version 7.0, avoid using them in switch case statements
  79 
  80         int id = view.getId();
  81         switch (id) {
  82             case R.id.button_update:                                                                
  83                 goNext();
  84                 break;
  85             case R.id.image_view_back:
../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/editprofile/EditProfileActivity.java:85: Resource IDs will be non-final in Android Gradle Plugin version 7.0, avoid using them in switch case statements
  82             case R.id.button_update:
  83                 goNext();
  84                 break;
  85             case R.id.image_view_back:                                                              
  86                 finish();
  87                 break;
../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/groupcreate/GroupCreateActivity.java:95: Resource IDs will be non-final in Android Gradle Plugin version 7.0, avoid using them in switch case statements
  92     public void onClick(View view) {
  93         super.onClick(view);
  94         switch (view.getId()) {
  95             case R.id.image_view_create_group:                                                      
  96             case R.id.text_view_create_group:
  97                 if (mGroupCreateAdapter != null) {
  98                     showOrHideGroupCreateView(true);
../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/groupcreate/GroupCreateActivity.java:101: Resource IDs will be non-final in Android Gradle Plugin version 7.0, avoid using them in switch case statements
  98                 showOrHideGroupCreateView(true);
  99             }
 100             break;
 101         case R.id.button_go:                                                                    
 102             List<UserEntity> userEntities = mGroupCreateAdapter.getSelectedUserList();
 103             if (userEntities.size() == 1) {
 104                 openUserMessage(mGroupCreateAdapter.getSelectedUserList().get(0));
../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/groupdetails/GroupDetailsActivity.java:78: Resource IDs will be non-final in Android Gradle Plugin version 7.0, avoid using them in switch case statements
  75     public void onClick(View view) {
  76         super.onClick(view);
  77         switch (view.getId()) {
  78             case R.id.op_back:                                                                      
  79                 finish();
  80                 break;
NonConstantResourceId Correctness Warning Priority 5/10

Obsolete Gradle Dependency

../../app/build.gradle:131: A newer version of androidx.constraintlayout:constraintlayout than 2.0.4 is available: 2.1.1
 128     //Support

 129 
 130     implementation 'androidx.appcompat:appcompat:1.3.1'
 131     implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
                              
 132 
 133     /*implementation deps.support.app_compat
 134     implementation deps.support.design
../../app/build.gradle:145: A newer version of com.jakewharton.timber:timber than 4.7.1 is available: 5.0.1
 142     //lifecycle

 143     implementation deps.lifecycle.runtime
 144     implementation deps.lifecycle.extensions
 145     implementation 'com.jakewharton.timber:timber:4.7.1'
                                           
 146     implementation 'androidx.test.ext:junit:1.1.3'
 147     implementation 'com.google.android.material:material:1.4.0'
 148     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
../../app/build.gradle:226: A newer version of com.google.android.gms:play-services-location than 16.0.0 is available: 18.0.0
 223     implementation 'io.supercharge:shimmerlayout:2.1.0'
 224     implementation 'com.github.jakob-grabner:Circle-Progress-View:1.4'
 225     implementation 'com.iceteck.silicompressorr:silicompressor:2.2.3'
 226     implementation 'com.google.android.gms:play-services-location:16.0.0'
                          
 227 
 228     api deps.app_share
 229     api deps.local_server
../../app/build.gradle:240: A newer version of com.google.dagger:dagger than 2.32 is available: 2.39.1
 237     //implementation 'com.github.w3-engineers:Viper-V2:v2.2.5'

 238 
 239     def dagger_version = "2.32"
 240     implementation "com.google.dagger:dagger:$dagger_version"
                                      
 241     annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
 242     implementation "androidx.core:core-ktx:1.6.0"
 243     implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0"
../../app/build.gradle:242: A newer version of androidx.core:core-ktx than 1.6.0 is available: 1.7.0
 239     def dagger_version = "2.32"
 240     implementation "com.google.dagger:dagger:$dagger_version"
 241     annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
 242     implementation "androidx.core:core-ktx:1.6.0"
                                                  
 243     implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0"
 244     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
 245 
../../app/build.gradle:243: A newer version of androidx.lifecycle:lifecycle-viewmodel-ktx than 2.0.0 is available: 2.4.0
 240     implementation "com.google.dagger:dagger:$dagger_version"
 241     annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
 242     implementation "androidx.core:core-ktx:1.6.0"
 243     implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0"
                              
 244     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
 245 
 246     // crashlytics
../../app/build.gradle:244: A newer version of org.jetbrains.kotlin:kotlin-stdlib-jdk7 than 1.4.31 is available: 1.5.31
 241     annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
 242     implementation "androidx.core:core-ktx:1.6.0"
 243     implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0"
 244     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
                       
 245 
 246     // crashlytics

 247     implementation platform('com.google.firebase:firebase-bom:28.4.2')
../../app/build.gradle:247: A newer version of com.google.firebase:firebase-bom than 28.4.2 is available: 29.0.0
 244     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
 245 
 246     // crashlytics

 247     implementation platform('com.google.firebase:firebase-bom:28.4.2')
                             
 248     implementation 'com.google.firebase:firebase-crashlytics'
 249     implementation 'com.google.firebase:firebase-analytics'
 250 
GradleDependency Correctness Warning Priority 4/10

Data Binding without Annotation Processing

../../app/build.gradle:87: If you plan to use data binding in a Kotlin project, you should apply the kotlin-kapt plugin.
  84     }*/
  85 
  86     buildFeatures {
  87         dataBinding true
                                                                           
  88     }
  89 
  90     packagingOptions {
DataBindingWithoutKapt Correctness Warning Priority 1/10

Compat compound drawable attributes should be used on TextView

../../app/src/main/res/layout/activity_group_details.xml:229: Use app:drawableStartCompat instead of android:drawableStart
 226                     android:layout_height="wrap_content"
 227                     android:layout_marginTop="@dimen/margin_10"
 228                     android:layout_marginBottom="@dimen/margin_20"
 229                     android:drawableStart="@mipmap/leave"
                                          
 230                     android:drawablePadding="@dimen/padding_10"
 231                     android:gravity="start|center"
 232                     android:paddingTop="@dimen/padding_10"
../../app/src/main/res/layout/activity_main.xml:127: Use app:drawableEndCompat instead of android:drawableEnd
 124                 android:layout_width="wrap_content"
 125                 android:layout_height="wrap_content"
 126                 android:layout_marginEnd="@dimen/margin_8"
 127                 android:drawableEnd="@mipmap/ic_arrow_forward"
                                     
 128                 android:gravity="center"
 129                 android:padding="@dimen/padding_5"
 130                 android:text="@string/search_background"
UseCompatTextViewDrawableXml Correctness Warning Priority 1/10

Formatting argument types incomplete or inconsistent

../../app/src/main/java/com/w3engineers/unicef/telemesh/data/broadcast/BroadcastManager.java:134: Wrong argument count, format string Group Message Test requires 0 but format call supplies 2
 131 
 132            String result = (String) future.get();
 133            if (broadcastSendCallback != null) {
 134                Timber.v("Group Message Test", "content sent from library %s", result);             
 135 
 136                ViperData viperData = sendDataTask.getViperData();
 137                ViperContentData viperContentData = sendDataTask.getViperContentData();
../../app/src/main/java/com/w3engineers/unicef/telemesh/data/helper/GroupDataHelper.java:209: Wrong argument count, format string Group Message Test requires 0 but format call supplies 2
 206                         .setContentInfo(entity.getContentInfo());
 207 
 208 
 209                 Timber.v("Group Message Test", "content start %s", item.getMeshId());               
 210                 contentModel.setUserId(item.getMeshId());
 211                 contentMessageSend(contentModel);
 212             }
TimberArgCount Messages Correctness Error Priority 9/10

Incomplete translation

../../app/src/main/res/values/strings.xml:190: "create_a_new_group" is not translated in "bn" (Bengali)
 187                         \nAllow all the permissions from TeleService screen which are not marked as green.
 188                         \n\nAlternatively, you can also go “Other Permissions” screen by Manage apps > TeleService > Other permissions. </string>
 189   <string name="got_it">Got It</string>
 190   <string name="create_a_new_group">Create a new group</string>                                   
 191   <string name="want_to_join_this_group">Want to join this group?</string>
 192   <string name="deny">Deny</string>
 193   <string name="accept">Accept</string>
../../app/src/main/res/values/strings.xml:212: "favourit_button_image" is not translated in "bn" (Bengali)
 209     <string name="only_admin_can_change_group_name">Only admin can change group name</string>
 210 
 211     <string name="broadcast_notification">You have %d new broadcast message</string>
 212     <string name="favourit_button_image">favourit button image</string>                             
 213     <string name="expanded_image_holder">Expanded image holder</string>
 214     <string name="create_new_wallet">Create New Wallet</string>
 215     <string name="change_data_plan">Change Data plan</string>
../../app/src/main/res/values/strings.xml:213: "expanded_image_holder" is not translated in "bn" (Bengali)
 210 
 211     <string name="broadcast_notification">You have %d new broadcast message</string>
 212     <string name="favourit_button_image">favourit button image</string>
 213     <string name="expanded_image_holder">Expanded image holder</string>                             
 214     <string name="create_new_wallet">Create New Wallet</string>
 215     <string name="change_data_plan">Change Data plan</string>
../../app/src/main/res/values/strings.xml:214: "create_new_wallet" is not translated in "bn" (Bengali)
 211     <string name="broadcast_notification">You have %d new broadcast message</string>
 212     <string name="favourit_button_image">favourit button image</string>
 213     <string name="expanded_image_holder">Expanded image holder</string>
 214     <string name="create_new_wallet">Create New Wallet</string>                                     
 215     <string name="change_data_plan">Change Data plan</string>
 216 
 217 </resources>
MissingTranslation Messages Correctness Error Priority 8/10

Logging call to Log instead of Timber

../../app/src/main/java/com/w3engineers/unicef/telemesh/data/local/db/AppDatabase.java:276: Using 'Log' instead of 'Timber'
 273                 if (baseMigration.getQueryScript().length > 0) {
 274                     for (String query : baseMigration.getQueryScript()) {
 275                         if (!TextUtils.isEmpty(query)) {
 276                             Log.d("DatabaseMigration", "Query: " + query);                  
 277                             database.execSQL(query);
 278                         }
 279                     }
../../app/src/main/java/com/w3engineers/unicef/telemesh/data/helper/BroadcastDataHelper.java:96: Using 'Log' instead of 'Timber'
  93                     mLatitude = location.getLatitude();
  94                     mLongitude = location.getLongitude();
  95                 }else {
  96                     Log.e("location_service","Location from service is null");                      
  97                 }
  98             } else {
  99                 mLatitude = 22.8456;
../../app/src/main/java/com/w3engineers/unicef/util/helper/BulletinTimeScheduler.java:59: Using 'Log' instead of 'Timber'
 56 
 57     public void checkAppUpdate() {
 58 
 59         Log.d("FileDownload", "Downloading process start");                                         
 60         long saveTime = SharedPref.readLong(Constants.preferenceKey.APP_UPDATE_CHECK_TIME);
 61         long dif = System.currentTimeMillis() - saveTime;
 62         long days = dif / (24 * 60 * 60 * 1000);
../../app/src/main/java/com/w3engineers/unicef/util/helper/BulletinTimeScheduler.java:66: Using 'Log' instead of 'Timber'
 63   int hour = (int) ((dif - (1000 * 60 * 60 * 24 * days)) / (1000 * 60 * 60));
 64 
 65   if (saveTime == 0 || hour > 23) {
 66       Log.d("FileDownload", "Downloading process time match");                                
 67       if (DataManager.on().isNetworkOnline()) {
 68           Log.d("FileDownload", "Online ");
 69           // new UpdateAppConfigDownloadTask(context).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, downloadLink);
../../app/src/main/java/com/w3engineers/unicef/util/helper/BulletinTimeScheduler.java:68: Using 'Log' instead of 'Timber'
 65   if (saveTime == 0 || hour > 23) {
 66       Log.d("FileDownload", "Downloading process time match");
 67       if (DataManager.on().isNetworkOnline()) {
 68           Log.d("FileDownload", "Online ");                                                   
 69           // new UpdateAppConfigDownloadTask(context).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, downloadLink);
 70           InAppUpdate.getInstance(context).downloadAppUpdateConfig(DataManager.on().getNetwork());
 71       }
LogNotTimber Messages Correctness Warning Priority 5/10

Potential Plurals

../../app/src/main/res/values/strings.xml:211: Formatting %d followed by words ("new"): This should probably be a plural rather than a string
 208     <string name="no_user_available">No User Found Yet</string>
 209     <string name="only_admin_can_change_group_name">Only admin can change group name</string>
 210 
 211     <string name="broadcast_notification">You have %d new broadcast message</string>                
 212     <string name="favourit_button_image">favourit button image</string>
 213     <string name="expanded_image_holder">Expanded image holder</string>
 214     <string name="create_new_wallet">Create New Wallet</string>
PluralsCandidate Messages Correctness Warning Priority 5/10

Insecure TLS/SSL trust manager

C:\Users\USER\.gradle\daemon\6.7.1\org\jsoup\helper\HttpConnection$Response$2.class: checkClientTrusted is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers
C:\Users\USER\.gradle\daemon\6.7.1\org\jsoup\helper\HttpConnection$Response$2.class: checkServerTrusted is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers
TrustAllX509TrustManager Security Warning Priority 6/10

Obsolete SDK_INT Version Check

../../app/src/main/java/com/w3engineers/unicef/util/helper/StorageUtil.java:30: Unnecessary; SDK_INT is always >= 21
 27     public static long getFreeMemory() {
 28         StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
 29         long free = 0;
 30         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) {                           
 31             free = (statFs.getBlockCountLong() * statFs.getBlockSizeLong()) / UNIT;
 32         } else {
 33             free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / UNIT;
ObsoleteSdkInt Performance Warning Priority 6/10

Static Field Leaks

../../app/src/main/java/com/w3engineers/unicef/telemesh/data/helper/inappupdate/AppInstaller.java:61: Do not place Android context classes in static fields; this is a memory leak
  58     @SuppressLint("StaticFieldLeak")
  59     private static DialogAppInstallProgressBinding binding;
  60     private static AlertDialog dialog;
  61     private static Context mContext;                                                                
  62 
  63     public static void downloadApkFile(String baseUrl, Context context, Network network) {
../../app/src/main/java/com/w3engineers/unicef/telemesh/data/helper/RmDataHelper.java:85: Do not place Android context classes in static fields (static reference to MeshDataSource which has field context pointing to Context); this is a memory leak
   82 public class RmDataHelper implements BroadcastManager.BroadcastSendCallback {
   83 
   84     private static RmDataHelper rmDataHelper = new RmDataHelper();
   85     protected static MeshDataSource rightMeshDataSource;                                            
   86 
   87     protected DataSource dataSource;
StaticFieldLeak Performance Warning Priority 6/10

Node can be replaced by a TextView with compound drawables

../../app/src/main/res/layout/item_group_info.xml:6: This tag and its children can be replaced by one <TextView/> and a compound drawable
  3 <layout xmlns:android="http://schemas.android.com/apk/res/android"
  4     xmlns:app="http://schemas.android.com/apk/res-auto">
  5 
  6     <LinearLayout
                                                                                  
  7         android:id="@+id/group_info_block"
  8         android:layout_width="match_parent"
  9         android:layout_height="wrap_content"
UseCompoundDrawables Performance Warning Priority 6/10

Unused resources

../../app/src/main/res/layout/activity_import_profile.xml:2: The resource R.layout.activity_import_profile appears to be unused
   1 <?xml version="1.0" encoding="utf-8"?>
   2 <layout xmlns:android="http://schemas.android.com/apk/res/android"
                                 
   3     xmlns:app="http://schemas.android.com/apk/res-auto"
   4     xmlns:tools="http://schemas.android.com/tools">
   5 
../../app/src/main/res/layout/activity_profile_choice.xml:2: The resource R.layout.activity_profile_choice appears to be unused
  1 <?xml version="1.0" encoding="utf-8"?>
  2 <layout xmlns:android="http://schemas.android.com/apk/res/android"
                                 
  3     xmlns:app="http://schemas.android.com/apk/res-auto"
  4     xmlns:tools="http://schemas.android.com/tools">
  5 
../../app/src/main/res/layout/alert_change_ssid.xml:2: The resource R.layout.alert_change_ssid appears to be unused
  1 <?xml version="1.0" encoding="utf-8"?>
  2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3     xmlns:app="http://schemas.android.com/apk/res-auto"
  4     android:layout_width="match_parent"
  5     android:layout_height="wrap_content"
../../app/src/main/res/layout/alert_loading_progress.xml:2: The resource R.layout.alert_loading_progress appears to be unused
  1 <?xml version="1.0" encoding="utf-8"?>
  2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3     xmlns:app="http://schemas.android.com/apk/res-auto"
  4     android:layout_width="wrap_content"
  5     android:layout_height="wrap_content">
../../app/src/main/res/mipmap-hdpi/avatar21.webp: The resource R.mipmap.avatar21 appears to be unused
UnusedResources Performance Warning Priority 3/10

Duplicated icons under different names

../../app/src/main/res/mipmap-hdpi/ic_baseline_chat.png: The following unrelated icon files have identical contents: fab_chat.png, ic_baseline_chat.png


    ../../app/src/main/res/mipmap-mdpi/ic_baseline_chat.png: The following unrelated icon files have identical contents: fab_chat.png, ic_baseline_chat.png


      ../../app/src/main/res/mipmap-xhdpi/ic_baseline_chat.png: The following unrelated icon files have identical contents: fab_chat.png, ic_baseline_chat.png


        ../../app/src/main/res/mipmap-xxhdpi/ic_baseline_chat.png: The following unrelated icon files have identical contents: fab_chat.png, ic_baseline_chat.png


          ../../app/src/main/res/mipmap-xxxhdpi/ic_baseline_chat.png: The following unrelated icon files have identical contents: fab_chat.png, ic_baseline_chat.png


            IconDuplicates Icons Usability Warning Priority 3/10

            Missing inputType

            ../../app/src/main/res/layout/activity_feedback.xml:19: This text field does not specify an inputType
             16             app:layout_constraintRight_toRightOf="parent"
             17             app:layout_constraintTop_toTopOf="parent" />
             18 
             19         <EditText
                                                                                              
             20             android:id="@+id/edit_text_feedback"
             21             android:layout_width="0dp"
             22             android:layout_height="wrap_content"
            
            ../../app/src/main/res/layout/alert_change_ssid.xml:19: This text field does not specify an inputType
             16         app:layout_constraintStart_toStartOf="parent"
             17         app:layout_constraintTop_toTopOf="parent" />
             18 
             19     <EditText
                                                                                                  
             20         android:id="@+id/network_name"
             21         android:layout_width="match_parent"
             22         android:layout_height="wrap_content"
            
            TextFields Usability Warning Priority 5/10

            Text size is too small

            ../../app/src/main/res/layout/item_discovered.xml:145: Avoid using sizes smaller than 12sp: 9sp
             142             android:maxLines="@integer/max_line_1"
             143             android:text="@{user.hasUnreadMessage+ ``}"
             144             android:textColor="@android:color/white"
             145             android:textSize="9sp"
                                                                             
             146             android:visibility="gone"
             147             app:layout_constraintBottom_toBottomOf="parent"
             148             app:layout_constraintEnd_toStartOf="@+id/image_view_favourite"
            
            SmallSp Usability Warning Priority 4/10

            Use Autofill

            ../../app/src/main/res/layout/activity_feedback.xml:19: Missing autofillHints attribute
             16             app:layout_constraintRight_toRightOf="parent"
             17             app:layout_constraintTop_toTopOf="parent" />
             18 
             19         <EditText
                                                                                              
             20             android:id="@+id/edit_text_feedback"
             21             android:layout_width="0dp"
             22             android:layout_height="wrap_content"
            
            ../../app/src/main/res/layout/alert_change_ssid.xml:19: Missing autofillHints attribute
             16         app:layout_constraintStart_toStartOf="parent"
             17         app:layout_constraintTop_toTopOf="parent" />
             18 
             19     <EditText
                                                                                                  
             20         android:id="@+id/network_name"
             21         android:layout_width="match_parent"
             22         android:layout_height="wrap_content"
            
            Autofill Usability Warning Priority 3/10

            KTX Extension Available

            ../../app/build.gradle:170: Add suffix -ktx to enable the Kotlin extensions for this library
             167 
             168     //Paging
            
             169     //implementation deps.paging.runtime
            
             170     implementation 'androidx.paging:paging-runtime:3.0.1'
                                                      
             171     //
            
             172 
             173     //Circular Image
            
            KtxExtensionAvailable Productivity Information Priority 4/10

            Image without contentDescription

            ../../app/src/main/res/layout/activity_add_new_member.xml:47: Missing contentDescription attribute on image
              44 
              45         </androidx.cardview.widget.CardView>
              46 
              47         <com.google.android.material.floatingactionbutton.FloatingActionButton
                                 
              48             android:id="@+id/button_go"
              49             android:layout_width="wrap_content"
              50             android:layout_height="wrap_content"
            
            ../../app/src/main/res/layout/activity_bulletin_details.xml:190: Missing contentDescription attribute on image
             187             android:background="@color/black_60_opacity"
             188             android:visibility="gone" />
             189 
             190         <ImageView
                                                                                             
             191             android:id="@+id/expanded_image"
             192             android:layout_width="match_parent"
             193             android:layout_height="match_parent"
            
            ../../app/src/main/res/layout/activity_group_create.xml:65: Missing contentDescription attribute on image
             62             app:layout_constraintTop_toBottomOf="@+id/card_view_selected_item" />
             63 
             64 
             65         <com.google.android.material.floatingactionbutton.FloatingActionButton
                                 
             66             android:id="@+id/button_go"
             67             android:layout_width="wrap_content"
             68             android:layout_height="wrap_content"
            
            ../../app/src/main/res/layout/activity_profile_choice.xml:13: Missing contentDescription attribute on image
             10         android:background="@color/toolbar_color"
             11         tools:context=".ui.profilechoice.ProfileChoiceActivity">
             12 
             13         <ImageView
                                                                                             
             14             android:id="@+id/image_view_logo"
             15             android:layout_width="@dimen/width_250"
             16             android:layout_height="@dimen/height_200"
            
            ../../app/src/main/res/layout/activity_select_account.xml:13: Missing contentDescription attribute on image
             10         android:background="@color/toolbar_color"
             11         tools:context=".ui.profilechoice.ProfileChoiceActivity">
             12 
             13         <ImageView
                                                                                             
             14             android:id="@+id/image_view_logo"
             15             android:layout_width="@dimen/width_250"
             16             android:layout_height="@dimen/height_200"
            
            ContentDescription Accessibility Warning Priority 3/10

            TextView Internationalization

            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/chat/ChatPagedAdapterRevised.java:266: Do not concatenate text displayed with setText. Use resource string with placeholders.
             263                     ContextCompat.getColor(mContext, R.color.white));
             264             UserEntity entity = getUserName(item);
             265             String name = entity == null ? "" : entity.userName;
             266             binding.userName.setText("" + name);                                                    
             267 
             268             if (entity == null) {
             269                 UIHelper.updateImageNameField(binding.textViewImageName, "", "");
            
            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/chat/ChatPagedAdapterRevised.java:688: Do not concatenate text displayed with setText. Use resource string with placeholders.
             685             binding.groupInfoBlock.setVisibility(View.GONE);
             686             if (!TextUtils.isEmpty(name)) {
             687                 binding.groupInfoBlock.setVisibility(View.VISIBLE);
             688                 binding.groupInfo.setText(name + " " + item.getMessage());                          
             689 
             690                 int resourceId = -1;
             691                 switch (item.getMessageType()) {
            
            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/chat/ChatPagedAdapterRevised.java:753: Do not concatenate text displayed with setText. Use resource string with placeholders.
             750       UIHelper.updateImageNameField(binding.textViewImageName, "", "");
             751   } else {
             752       String name = entity.getUserName();
             753       binding.userName.setText("" + name);                                                
             754       UIHelper.updateImageNameField(binding.textViewImageName, entity.getUserName(), entity.getUserLastName());
             755   }
            
            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/conversations/ConversationAdapter.java:107: Do not concatenate text displayed with setText. Use resource string with placeholders.
             104   itemConversationBinding.personMessage.setVisibility(View.VISIBLE);
             105   if (isSystemMessage(groupEntity.lastMessageType)) {
             106       String personName = CommonUtil.getUserName(groupEntity, getMyUserId());
             107       itemConversationBinding.personMessage.setText(personName + " " + groupEntity.lastMessage);
             108   } else {
             109       String personName = CommonUtil.getUserName(groupEntity, getMyUserId()) + ":";
             110       itemConversationBinding.personMessage.setText(personName + " " + groupEntity.lastMessage);
            
            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/conversations/ConversationAdapter.java:110: Do not concatenate text displayed with setText. Use resource string with placeholders.
             107           itemConversationBinding.personMessage.setText(personName + " " + groupEntity.lastMessage);
             108       } else {
             109           String personName = CommonUtil.getUserName(groupEntity, getMyUserId()) + ":";
             110           itemConversationBinding.personMessage.setText(personName + " " + groupEntity.lastMessage);
             111       }
             112   }
            
            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/conversations/ConversationAdapter.java:123: Do not concatenate text displayed with setText. Use resource string with placeholders.
             120       } else {
             121           itemConversationBinding.name.setTypeface(null, Typeface.BOLD);
             122           itemConversationBinding.messageCount.setVisibility(View.VISIBLE);
             123           itemConversationBinding.messageCount.setText("" + groupEntity.hasUnreadMessage);
             124       }
             125 
             126   } else {
            
            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/meshdiscovered/DiscoverFragment.java:147: String literal in setText can not be translated. Use Android resources instead.
             144 
             145          isLoaded = true;
             146          Runnable runnable = () -> {
             147              fragmentDiscoverBinding.tvMessage.setText("No User Found");             
             148              enableEmpty();
             149              fragmentDiscoverBinding.loadingView.setVisibility(View.GONE);
            
            ../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/meshcontact/MeshContactsFragment.java:118: String literal in setText can not be translated. Use Android resources instead.
             115 
             116   isLoaded = true;
             117   Runnable runnable = () -> {
             118       fragmentMeshcontactBinding.tvMessage.setText("No User Found");          
             119       controlEmpty(true);
             120   };
             121   loaderHandler.postDelayed(runnable, Constants.AppConstant.LOADING_TIME_SHORT);
            
            SetTextI18n Internationalization Warning Priority 6/10

            Hardcoded text

            ../../app/src/main/res/layout/activity_select_account.xml:38: Hardcoded string "CREATE NEW ACCOUNT", should use @string resource
             35             android:layout_height="wrap_content"
             36             android:layout_marginBottom="@dimen/margin_16"
             37             android:background="@color/colorBlue"
             38             android:text="CREATE NEW ACCOUNT"
                                                                  
             39             android:textColor="@color/white"
             40             app:layout_constraintBottom_toTopOf="@+id/button_import_account"
             41             app:layout_constraintEnd_toEndOf="@+id/button_import_account"
            
            ../../app/src/main/res/layout/activity_select_account.xml:52: Hardcoded string "IMPORT MY ACCOUNT", should use @string resource
             49             android:layout_marginEnd="@dimen/margin_30"
             50             android:layout_marginBottom="@dimen/margin_20"
             51             android:elevation="@dimen/margin_5"
             52             android:text="IMPORT MY ACCOUNT"
                                                                   
             53             android:textColor="@color/white"
             54             android:background="@drawable/btn_rectangle_shape"
             55             app:layout_constraintBottom_toBottomOf="parent"
            
            ../../app/src/main/res/layout/activity_terms_of_use.xml:35: Hardcoded string "I agree to the terms of use", should use @string resource
             32             android:layout_height="wrap_content"
             33             android:layout_marginBottom="@dimen/margin_8"
             34             android:buttonTint="@color/colorPrimary"
             35             android:text="I agree to the terms of use"
                                                         
             36             app:layout_constraintBottom_toTopOf="@+id/button_next"
             37             app:layout_constraintEnd_toEndOf="parent"
             38             app:layout_constraintStart_toStartOf="parent" />
            
            ../../app/src/main/res/layout/dialog_app_blocker.xml:19: Hardcoded string "Update Alerts", should use @string resource
             16             android:layout_marginEnd="@dimen/margin_24"
             17             android:gravity="start"
             18             android:padding="@dimen/padding_8"
             19             android:text="Update Alerts"
                                                                       
             20             android:textColor="@color/black"
             21             android:textSize="20sp"
             22             android:textStyle="bold"
            
            ../../app/src/main/res/layout/dialog_xiaomi_permission.xml:15: Hardcoded string "Please allow permissions", should use @string resource
             12         android:layout_width="wrap_content"
             13         android:layout_height="wrap_content"
             14         android:layout_margin="@dimen/margin_16"
             15         android:text="Please allow permissions"
                                                                
             16         android:textColor="#FF7F27"
             17         android:textSize="@dimen/text_size_16sp"
             18         android:textStyle="bold"
            
            HardcodedText Internationalization Warning Priority 5/10

            Using left/right instead of start/end attributes

            ../../app/src/main/res/layout/item_group_member_for_chat.xml:23: Consider replacing android:layout_marginLeft with android:layout_marginStart="@dimen/margin_10" to better support right-to-left layouts
             20                 android:id="@+id/user_avatar_background"
             21                 android:layout_width="@dimen/width_40"
             22                 android:layout_height="@dimen/height_40"
             23                 android:layout_marginLeft="@dimen/margin_10"
                                                   
             24                 android:layout_marginTop="@dimen/margin_5"
             25                 android:background="@drawable/circle_background"
             26                 app:layout_constraintLeft_toLeftOf="parent"
            
            ../../app/src/main/res/layout/item_group_member_for_chat.xml:33: Consider replacing android:layout_marginLeft with android:layout_marginStart="@dimen/margin_10" to better support right-to-left layouts
             30                 android:id="@+id/user_avatar"
             31                 android:layout_width="@dimen/width_40"
             32                 android:layout_height="@dimen/height_40"
             33                 android:layout_marginLeft="@dimen/margin_10"
                                                   
             34                 android:layout_marginTop="@dimen/margin_5"
             35                 app:layout_constraintLeft_toLeftOf="parent"
             36                 app:layout_constraintTop_toTopOf="parent"
            
            RtlHardcoded Bidirectional Text Internationalization Warning Priority 5/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