Overview
Correctness | |
1 | warning ScopedStorage: Affected by scoped storage |
6 | warning DefaultLocale: Implied default locale in case conversion |
1 | warning
ExifInterface: Using android.media.ExifInterface |
1 | warning OldTargetApi: Target SDK attribute is not targeting latest version |
1 | error WrongConstant: Incorrect constant |
26 | warning NonConstantResourceId: Checks use of resource IDs in places requiring constants. |
8 | warning GradleDependency: Obsolete Gradle Dependency |
1 | warning DataBindingWithoutKapt: Data Binding without Annotation Processing |
2 | warning
UseCompatTextViewDrawableXml: Compat compound drawable attributes should be used on TextView |
Correctness:Messages | |
2 | error TimberArgCount: Formatting argument types incomplete or inconsistent |
4 | error MissingTranslation: Incomplete translation |
24 | warning LogNotTimber: Logging call to Log instead of Timber |
1 | warning PluralsCandidate: Potential Plurals |
Security | |
2 | warning TrustAllX509TrustManager: Insecure TLS/SSL trust manager |
Performance | |
1 | warning ObsoleteSdkInt: Obsolete SDK_INT Version Check |
2 | warning StaticFieldLeak: Static Field Leaks |
1 | warning
UseCompoundDrawables: Node can be replaced by a TextView with compound drawables |
77 | warning UnusedResources: Unused resources |
Usability:Icons | |
10 | warning IconDuplicates: Duplicated icons under different names |
Usability | |
2 | warning
TextFields: Missing inputType |
1 | warning SmallSp: Text size is too small |
2 | warning Autofill: Use Autofill |
Productivity | |
1 | warning KtxExtensionAvailable: KTX Extension Available |
Accessibility | |
22 | warning
ContentDescription: Image without contentDescription |
Internationalization | |
8 | warning SetTextI18n: TextView Internationalization |
11 | warning HardcodedText: Hardcoded text |
Internationalization:Bidirectional Text | |
2 | warning RtlHardcoded: Using left/right instead of start/end attributes |
Disabled Checks (38) |
Affected by scoped storage
../../app/src/main/AndroidManifest.xml:34:
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:
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:
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:
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:
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:
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:
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:
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:
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:
Does not apply to variants: release
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:
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:
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:
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:
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:
75 public void onClick(View view) { 76 super.onClick(view); 77 switch (view.getId()) { 78 case R.id.op_back: 79 finish(); 80 break;+ 21 More Occurrences...
NonConstantResourceId
Correctness
Warning
Priority 5/10
Obsolete Gradle Dependency
../../app/build.gradle:131:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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 }+ 19 More Occurrences...
LogNotTimber
Messages
Correctness
Warning
Priority 5/10
Potential Plurals
../../app/src/main/res/values/strings.xml:211:
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
TrustAllX509TrustManager
Security
Warning
Priority 6/10
Obsolete SDK_INT Version Check
../../app/src/main/java/com/w3engineers/unicef/util/helper/StorageUtil.java:30:
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:
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:
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:
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:
+ 72 More Occurrences...
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:
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:
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:
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:
+ 72 More Occurrences...
UnusedResources
Performance
Warning
Priority 3/10
Duplicated icons under different names
../../app/src/main/res/mipmap-hdpi/ic_baseline_chat.png:
../../app/src/main/res/mipmap-mdpi/ic_baseline_chat.png:
../../app/src/main/res/mipmap-xhdpi/ic_baseline_chat.png:
../../app/src/main/res/mipmap-xxhdpi/ic_baseline_chat.png:
../../app/src/main/res/mipmap-xxxhdpi/ic_baseline_chat.png:
+ 5 More Occurrences...
IconDuplicates
Icons
Usability
Warning
Priority 3/10
Missing inputType
../../app/src/main/res/layout/activity_feedback.xml:19:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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"+ 17 More Occurrences...
ContentDescription
Accessibility
Warning
Priority 3/10
TextView Internationalization
../../app/src/main/java/com/w3engineers/unicef/telemesh/ui/chat/ChatPagedAdapterRevised.java:266:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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"+ 6 More Occurrences...
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:
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:
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
2. With a
3. With a //noinspection comment in the source code
4. With ignore flags specified in the
5. With a
6. With a
7. With the --ignore flag passed to lint.
To suppress a lint warning with an annotation, add a
To suppress a lint warning with a comment, add a
To suppress a lint warning in an XML file, add a
To suppress a lint warning in a
Here we specify a comma separated list of issue id's after the disable command. You can also use
To suppress lint warnings with a configuration XML file, create a file named
The format of the
To suppress lint checks from the command line, pass the --ignore flag with a comma separated list of ids to be suppressed, such as:
For more information, see https://developer.android.com/studio/write/lint.html#config
1. With a
@SuppressLint
annotation in the Java code2. With a
tools:ignore
attribute in the XML file3. With a //noinspection comment in the source code
4. With ignore flags specified in the
build.gradle
file, as explained below5. With a
lint.xml
configuration file in the project6. With a
lint.xml
configuration file passed to lint via the --config flag7. 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