Lint Report: 172 warnings
Issue Types

Overview

Correctness
8warning DefaultLocale: Implied default locale in case conversion
1warning OldTargetApi: Target SDK attribute is not targeting latest version
1warning AndroidGradlePluginVersion: Obsolete Android Gradle Plugin Version
15warning GradleDependency: Obsolete Gradle Dependency
1warning GradleDynamicVersion: Gradle Dynamic Version
6warning NewerVersionAvailable: Newer Library Versions Available
Performance
3warning NotifyDataSetChanged: Invalidating All RecyclerView Data
1warning DisableBaselineAlignment: Missing baselineAligned attribute
6warning Overdraw: Overdraw: Painting regions more than once
26warning UnusedResources: Unused resources
Usability:Icons
3warning IconLocation: Image defined in density-independent drawable folder
5warning IconDuplicates: Duplicated icons under different names
Accessibility
5warning ContentDescription: Image without contentDescription
2warning KeyboardInaccessibleWidget: Keyboard inaccessible widget
2warning LabelFor: Missing accessibility label
Internationalization
27warning SetTextI18n: TextView Internationalization
60warning HardcodedText: Hardcoded text
Included Additional Checks (31)
Disabled Checks (40)

Implied default locale in case conversion

../../src/main/java/com/example/medcuida/pro/MainActivity.java:331: 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().
 328       db.collection("consultas").document(consultaId)
 329               .update("status", newStatus)
 330               .addOnSuccessListener(
 331                       aVoid -> Toast.makeText(this, "Consulta " + newStatus.toLowerCase(), Toast.LENGTH_SHORT).show())
 332               .addOnFailureListener(
 333                       e -> Toast.makeText(this, "Erro ao atualizar consulta", Toast.LENGTH_SHORT).show());
 334   }
../../src/main/java/com/example/medcuida/pro/MainActivity.java:433: 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().
 430   boolean belongsToDoctor = false;
 431 
 432   if (c.getType() != null && !doctorName.isEmpty()
 433           && c.getType().toLowerCase().contains(doctorName.toLowerCase().split(" ")[0])) {
 434       belongsToDoctor = true;
 435   } else if (c.getMedicoId() != null && c.getMedicoId().equals(currentMedicoId)) {
 436       belongsToDoctor = true;
../../src/main/java/com/example/medcuida/pro/MainActivity.java:433: 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().
 430   boolean belongsToDoctor = false;
 431 
 432   if (c.getType() != null && !doctorName.isEmpty()
 433           && c.getType().toLowerCase().contains(doctorName.toLowerCase().split(" ")[0])) {
 434       belongsToDoctor = true;
 435   } else if (c.getMedicoId() != null && c.getMedicoId().equals(currentMedicoId)) {
 436       belongsToDoctor = true;
../../src/main/java/com/example/medcuida/pro/MainActivity.java:508: 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().
 505   boolean belongsToDoctor = false;
 506 
 507   if (c.getType() != null && !doctorName.isEmpty()
 508           && c.getType().toLowerCase().contains(doctorName.toLowerCase().split(" ")[0])) {
 509       belongsToDoctor = true;
 510   } else if (c.getMedicoId() != null && c.getMedicoId().equals(currentMedicoId)) {
 511       belongsToDoctor = true;
../../src/main/java/com/example/medcuida/pro/MainActivity.java:508: 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().
 505   boolean belongsToDoctor = false;
 506 
 507   if (c.getType() != null && !doctorName.isEmpty()
 508           && c.getType().toLowerCase().contains(doctorName.toLowerCase().split(" ")[0])) {
 509       belongsToDoctor = true;
 510   } else if (c.getMedicoId() != null && c.getMedicoId().equals(currentMedicoId)) {
 511       belongsToDoctor = true;
../../src/main/java/com/example/medcuida/pro/ui/adapters/PacienteAdapter.java:42: 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().
 39   if (text.isEmpty()) {
 40       pacientesList.addAll(pacientesListFull);
 41   } else {
 42       text = text.toLowerCase().trim();                                                       
 43       for (Paciente item : pacientesListFull) {
 44           if ((item.getNome() != null && item.getNome().toLowerCase().contains(text)) ||
 45               (item.getEmail() != null && item.getEmail().toLowerCase().contains(text))) {
../../src/main/java/com/example/medcuida/pro/ui/adapters/PacienteAdapter.java:44: 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().
 41   } else {
 42       text = text.toLowerCase().trim();
 43       for (Paciente item : pacientesListFull) {
 44           if ((item.getNome() != null && item.getNome().toLowerCase().contains(text)) ||      
 45               (item.getEmail() != null && item.getEmail().toLowerCase().contains(text))) {
 46               pacientesList.add(item);
 47           }
../../src/main/java/com/example/medcuida/pro/ui/adapters/PacienteAdapter.java:45: 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().
 42   text = text.toLowerCase().trim();
 43   for (Paciente item : pacientesListFull) {
 44       if ((item.getNome() != null && item.getNome().toLowerCase().contains(text)) ||
 45           (item.getEmail() != null && item.getEmail().toLowerCase().contains(text))) {    
 46           pacientesList.add(item);
 47       }
 48   }
DefaultLocale Correctness Warning Priority 6/10

Target SDK attribute is not targeting latest version

../../build.gradle:13: 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.
 10     defaultConfig {
 11         applicationId "com.example.medcuida.pro"
 12         minSdk 24
 13         targetSdk 35                                                                                
 14         versionCode 1
 15         versionName "1.0"
OldTargetApi Correctness Warning Priority 6/10

Obsolete Android Gradle Plugin Version

../../../gradle/wrapper/gradle-wrapper.properties:3: A newer version of Gradle than 9.4.1 is available: 9.5.0
 1 distributionBase=GRADLE_USER_HOME
 2 distributionPath=wrapper/dists
 3 distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip                     
 4 networkTimeout=10000
 5 validateDistributionUrl=true
 6 zipStoreBase=GRADLE_USER_HOME
AndroidGradlePluginVersion Correctness Warning Priority 4/10

Obsolete Gradle Dependency

../../build.gradle:8: A newer version of compileSdk than 35 is available: 37
  5 
  6 android {
  7     namespace 'com.example.medcuida.pro'
  8     compileSdk 35                                                                                   
  9 
 10     defaultConfig {
 11         applicationId "com.example.medcuida.pro"
../../build.gradle:39: A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.1
 36 }
 37 
 38 dependencies {
 39     implementation 'androidx.appcompat:appcompat:1.6.1'                                             
 40     implementation 'com.google.android.material:material:1.11.0'
 41     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
 42     implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.7.0'
../../build.gradle:40: A newer version of com.google.android.material:material than 1.11.0 is available: 1.13.0
 37 
 38 dependencies {
 39     implementation 'androidx.appcompat:appcompat:1.6.1'
 40     implementation 'com.google.android.material:material:1.11.0'                                    
 41     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
 42     implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.7.0'
 43     implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0'
../../build.gradle:41: A newer version of androidx.constraintlayout:constraintlayout than 2.1.4 is available: 2.2.1
 38 dependencies {
 39     implementation 'androidx.appcompat:appcompat:1.6.1'
 40     implementation 'com.google.android.material:material:1.11.0'
 41     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'                               
 42     implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.7.0'
 43     implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0'
 44     implementation 'androidx.navigation:navigation-fragment:2.7.7'
../../build.gradle:42: A newer version of androidx.lifecycle:lifecycle-livedata-ktx than 2.7.0 is available: 2.10.0
 39     implementation 'androidx.appcompat:appcompat:1.6.1'
 40     implementation 'com.google.android.material:material:1.11.0'
 41     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
 42     implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.7.0'                                
 43     implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0'
 44     implementation 'androidx.navigation:navigation-fragment:2.7.7'
 45     implementation 'androidx.navigation:navigation-ui:2.7.7'
GradleDependency Correctness Warning Priority 4/10

Gradle Dynamic Version

../../build.gradle:62: Avoid using + in version numbers; can lead to unpredictable and unrepeatable builds (com.google.ai.client.generativeai:generativeai:+)
 59     implementation 'com.google.android.gms:play-services-location:21.0.1'
 60 
 61     // Biblioteca oficial do Google AI para Java/Android
 62     implementation 'com.google.ai.client.generativeai:generativeai:+'                               
 63     
 64     // Necessário para lidar com operações assíncronas (Guava)
 65     implementation 'com.google.guava:guava:31.1-android'
GradleDynamicVersion Correctness Warning Priority 4/10

Newer Library Versions Available

../../build.gradle:65: A newer version of com.google.guava:guava than 31.1-android is available: 33.6.0-android
 62     implementation 'com.google.ai.client.generativeai:generativeai:+'
 63     
 64     // Necessário para lidar com operações assíncronas (Guava)
 65     implementation 'com.google.guava:guava:31.1-android'                                            
 66 
 67     // Para chamadas de rede e JSON
 68     implementation 'com.squareup.retrofit2:retrofit:2.9.0'
../../build.gradle:68: A newer version of com.squareup.retrofit2:retrofit than 2.9.0 is available: 3.0.0
 65     implementation 'com.google.guava:guava:31.1-android'
 66 
 67     // Para chamadas de rede e JSON
 68     implementation 'com.squareup.retrofit2:retrofit:2.9.0'                                          
 69     implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
 70     implementation 'com.squareup.okhttp3:okhttp:4.10.0'
../../build.gradle:69: A newer version of com.squareup.retrofit2:converter-gson than 2.9.0 is available: 3.0.0
 66 
 67     // Para chamadas de rede e JSON
 68     implementation 'com.squareup.retrofit2:retrofit:2.9.0'
 69     implementation 'com.squareup.retrofit2:converter-gson:2.9.0'                                    
 70     implementation 'com.squareup.okhttp3:okhttp:4.10.0'
 71 
 72     // Firebase BoM
../../build.gradle:70: A newer version of com.squareup.okhttp3:okhttp than 4.10.0 is available: 5.3.2
 67     // Para chamadas de rede e JSON
 68     implementation 'com.squareup.retrofit2:retrofit:2.9.0'
 69     implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
 70     implementation 'com.squareup.okhttp3:okhttp:4.10.0'                                             
 71 
 72     // Firebase BoM
 73     implementation platform('com.google.firebase:firebase-bom:32.7.2')
../../build.gradle:81: A newer version of com.github.bumptech.glide:glide than 4.16.0 is available: 5.0.7
 78     implementation 'com.google.firebase:firebase-storage'
 79 
 80     // Glide for image loading
 81     implementation 'com.github.bumptech.glide:glide:4.16.0'                                         
 82     annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
 83 }
../../build.gradle:82: A newer version of com.github.bumptech.glide:compiler than 4.16.0 is available: 5.0.7
 79 
 80     // Glide for image loading
 81     implementation 'com.github.bumptech.glide:glide:4.16.0'
 82     annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'                                 
 83 }
NewerVersionAvailable Correctness Warning Priority 4/10

Invalidating All RecyclerView Data

../../src/main/java/com/example/medcuida/pro/ui/adapters/ConsultaAdapter.java:40: It will always be more efficient to use more specific change events if you can. Rely on notifyDataSetChanged as a last resort.
  37 
  38     public void setConsultas(List<Consulta> consultas) {
  39         this.consultasList = consultas;
  40         notifyDataSetChanged();                                                                     
  41     }
  42 
  43     @NonNull
../../src/main/java/com/example/medcuida/pro/ui/adapters/PacienteAdapter.java:34: It will always be more efficient to use more specific change events if you can. Rely on notifyDataSetChanged as a last resort.
 31     public void setPacientes(List<Paciente> pacientes) {
 32         this.pacientesList = new ArrayList<>(pacientes);
 33         this.pacientesListFull = new ArrayList<>(pacientes);
 34         notifyDataSetChanged();                                                                     
 35     }
 36 
 37     public void filter(String text) {
../../src/main/java/com/example/medcuida/pro/ui/adapters/PacienteAdapter.java:50: It will always be more efficient to use more specific change events if you can. Rely on notifyDataSetChanged as a last resort.
 47                 }
 48             }
 49         }
 50         notifyDataSetChanged();                                                                     
 51     }
 52 
 53     @NonNull
NotifyDataSetChanged Performance Warning Priority 8/10

Missing baselineAligned attribute

../../src/main/res/layout/activity_editar_perfil.xml:107: Set android:baselineAligned="false" on this element for better performance
 104                 android:inputType="none" />
 105         </com.google.android.material.textfield.TextInputLayout>
 106 
 107         <LinearLayout                                                                               
 108             android:layout_width="match_parent"
 109             android:layout_height="wrap_content"
 110             android:orientation="horizontal"
DisableBaselineAlignment Performance Warning Priority 3/10

Overdraw: Painting regions more than once

../../src/main/res/layout/activity_detalhe_paciente.xml:7: Possible overdraw: Root element paints background @color/background_color with a theme that also paints a background (inferred theme is @style/Theme.Cuida)
   4     xmlns:tools="http://schemas.android.com/tools"
   5     android:layout_width="match_parent"
   6     android:layout_height="match_parent"
   7     android:background="@color/background_color"                                                    
   8     tools:context=".DetalhePacienteActivity">
   9 
../../src/main/res/layout/activity_editar_perfil.xml:7: Possible overdraw: Root element paints background #FAFAFA with a theme that also paints a background (inferred theme is @style/Theme.Cuida)
   4     android:layout_width="match_parent"
   5     android:layout_height="match_parent"
   6     android:fillViewport="true"
   7     android:background="#FAFAFA">                                                                   
   8 
   9     <LinearLayout
  10         android:layout_width="match_parent"
../../src/main/res/layout/activity_forgot_password.xml:8: Possible overdraw: Root element paints background @color/background_color with a theme that also paints a background (inferred theme is @style/Theme.Cuida)
  5     android:orientation="vertical"
  6     android:gravity="center"
  7     android:padding="24dp"
  8     android:background="@color/background_color">                                                   
  9 
 10     <ImageView
 11         android:layout_width="187dp"
../../src/main/res/layout/activity_login.xml:7: Possible overdraw: Root element paints background @color/background_color with a theme that also paints a background (inferred theme is @style/Theme.Cuida)
   4     android:layout_width="match_parent"
   5     android:layout_height="match_parent"
   6     android:fillViewport="true"
   7     android:background="@color/background_color">                                                   
   8 
   9     <LinearLayout
  10         android:layout_width="match_parent"
../../src/main/res/layout/activity_main.xml:6: Possible overdraw: Root element paints background @color/background_color with a theme that also paints a background (inferred theme is @style/Theme.Cuida)
   3     xmlns:app="http://schemas.android.com/apk/res-auto"
   4     android:layout_width="match_parent"
   5     android:layout_height="match_parent"
   6     android:background="@color/background_color">                                                   
   7 
   8 
   9     <LinearLayout
../../src/main/res/layout/activity_register.xml:7: Possible overdraw: Root element paints background @color/background_color with a theme that also paints a background (inferred theme is @style/Theme.Cuida)
   4     android:layout_width="match_parent"
   5     android:layout_height="match_parent"
   6     android:fillViewport="true"
   7     android:background="@color/background_color">                                                   
   8 
   9     <LinearLayout
  10         android:layout_width="match_parent"
Overdraw Performance Warning Priority 3/10

Unused resources

../../src/main/res/menu/bottom_nav_menu.xml:2: The resource R.menu.bottom_nav_menu appears to be unused
  1 <?xml version="1.0" encoding="utf-8"?>
  2 <menu xmlns:android="http://schemas.android.com/apk/res/android">                                   
  3 
  4     <item
  5         android:id="@+id/navigation_home"
../../src/main/res/drawable/btn_outline_error.xml:2: The resource R.drawable.btn_outline_error appears to be unused
  1 <?xml version="1.0" encoding="utf-8"?>
  2 <ripple xmlns:android="http://schemas.android.com/apk/res/android"                                  
  3     android:color="#40B00020">
  4     <item>
  5         <shape android:shape="rectangle">
../../src/main/res/drawable/btn_outline_primary.xml:2: The resource R.drawable.btn_outline_primary appears to be unused
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android">                                  
 3     <stroke android:width="1dp" android:color="?attr/colorPrimary" />
 4     <corners android:radius="28dp" />
 5     <solid android:color="@android:color/transparent" />
../../src/main/res/drawable/circle_bg_large.xml:2: The resource R.drawable.circle_bg_large appears to be unused
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"                                   
 3     android:shape="oval">
 4     <solid android:color="@color/primary_light_color" />
 5 </shape>
../../src/main/res/values/colors.xml:18: The resource R.color.purple_200 appears to be unused
 15     <color name="error_color">#EF4444</color> <!-- Red 500 -->
 16 
 17     <!-- Standard overrides -->
 18     <color name="purple_200">#93C5FD</color>                                                        
 19     <color name="purple_500">#3B82F6</color>
 20     <color name="purple_700">#1D4ED8</color>
 21     <color name="teal_200">#60A5FA</color>
UnusedResources Performance Warning Priority 3/10

Image defined in density-independent drawable folder

../../src/main/res/drawable/.%212449%21ic_logo.png: Found bitmap drawable res/drawable/.!2449!ic_logo.png in densityless folder
../../src/main/res/drawable/ic_logo.png: Found bitmap drawable res/drawable/ic_logo.png in densityless folder
../../src/main/res/drawable/logo_app.png: Found bitmap drawable res/drawable/logo_app.png in densityless folder
IconLocation Icons Usability Warning Priority 5/10

Duplicated icons under different names

../../src/main/res/mipmap-hdpi/ic_launcher_round.png: The following unrelated icon files have identical contents: ic_launcher.png, ic_launcher_round.png


    ../../src/main/res/mipmap-mdpi/ic_launcher_round.png: The following unrelated icon files have identical contents: ic_launcher.png, ic_launcher_round.png


      ../../src/main/res/mipmap-xhdpi/ic_launcher_round.png: The following unrelated icon files have identical contents: ic_launcher.png, ic_launcher_round.png


        ../../src/main/res/mipmap-xxhdpi/ic_launcher_round.png: The following unrelated icon files have identical contents: ic_launcher.png, ic_launcher_round.png


          ../../src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: The following unrelated icon files have identical contents: ic_launcher.png, ic_launcher_round.png


            IconDuplicates Icons Usability Warning Priority 3/10

            Image without contentDescription

            ../../src/main/res/layout/activity_editar_perfil.xml:15: Missing contentDescription attribute on image
              12         android:orientation="vertical"
              13         android:padding="24dp">
              14 
              15         <ImageButton                                                                                
              16             android:id="@+id/btn_voltar"
              17             android:layout_width="48dp"
              18             android:layout_height="48dp"
            ../../src/main/res/layout/activity_forgot_password.xml:10: Missing contentDescription attribute on image
              7     android:padding="24dp"
              8     android:background="@color/background_color">
              9 
             10     <ImageView                                                                                      
             11         android:layout_width="187dp"
             12         android:layout_height="177dp"
             13         android:layout_marginBottom="24dp"
            ../../src/main/res/layout/activity_main.xml:189: Missing contentDescription attribute on image
             186                     android:padding="12dp"
             187                     android:gravity="center_vertical">
             188 
             189                     <ImageButton                                                                    
             190                         android:id="@+id/btn_prev_day_hist"
             191                         android:layout_width="48dp"
             192                         android:layout_height="48dp"
            ../../src/main/res/layout/activity_main.xml:225: Missing contentDescription attribute on image
             222                             android:textColor="@color/text_secondary"/>
             223                     </LinearLayout>
             224 
             225                     <ImageButton                                                                    
             226                         android:id="@+id/btn_next_day_hist"
             227                         android:layout_width="48dp"
             228                         android:layout_height="48dp"
            ../../src/main/res/layout/activity_main.xml:234: Missing contentDescription attribute on image
             231                  android:background="?attr/selectableItemBackgroundBorderless"
             232                  app:tint="?attr/colorPrimary" />
             233 
             234              <ImageButton                                                                    
             235                  android:id="@+id/btn_go_today_icon_hist"
             236                  android:layout_width="48dp"
             237                  android:layout_height="48dp"
            ContentDescription Accessibility Warning Priority 3/10

            Keyboard inaccessible widget

            ../../src/main/res/layout/activity_editar_perfil.xml:126: 'clickable' attribute found, please also add 'focusable'
             123                     android:layout_height="wrap_content"
             124                     android:hint="Início"
             125                     android:focusable="false"
             126                     android:clickable="true"                                                        
             127                     android:inputType="none" />
             128             </com.google.android.material.textfield.TextInputLayout>
            
            ../../src/main/res/layout/activity_editar_perfil.xml:143: 'clickable' attribute found, please also add 'focusable'
             140                     android:layout_height="wrap_content"
             141                     android:hint="Fim"
             142                     android:focusable="false"
             143                     android:clickable="true"                                                        
             144                     android:inputType="none" />
             145             </com.google.android.material.textfield.TextInputLayout>
             146         </LinearLayout>
            KeyboardInaccessibleWidget Accessibility Warning Priority 3/10

            Missing accessibility label

            ../../src/main/res/layout/activity_editar_perfil.xml:100: Missing accessibility label: provide either a view with an android:labelFor that references this view or provide an android:hint
              97             android:layout_marginBottom="16dp"
              98             android:hint="Sexo">
              99 
             100             <AutoCompleteTextView                                                                   
             101                 android:id="@+id/edit_gender"
             102                 android:layout_width="match_parent"
             103                 android:layout_height="wrap_content"
            ../../src/main/res/layout/activity_register.xml:84: Missing accessibility label: provide either a view with an android:labelFor that references this view or provide an android:hint
              81                     android:layout_marginBottom="16dp"
              82                     android:hint="Sexo">
              83 
              84                     <AutoCompleteTextView                                                           
              85                         android:id="@+id/gender_auto_complete"
              86                         android:layout_width="match_parent"
              87                         android:layout_height="wrap_content"
            LabelFor Accessibility Warning Priority 2/10

            TextView Internationalization

            ../../src/main/java/com/example/medcuida/pro/ui/adapters/ConsultaAdapter.java:90: String literal in setText can not be translated. Use Android resources instead.
              87   ((com.google.android.material.card.MaterialCardView)itemView).setStrokeWidth(1);
              88   String nome = consulta.getPacienteNome();
              89   if (nome == null && consulta.getPacienteId() != null && !consulta.getPacienteId().isEmpty()) {
              90       textPacienteNome.setText("A carregar nome...");                                     
              91       com.google.firebase.firestore.FirebaseFirestore.getInstance()
              92           .collection("utilizadores").document(consulta.getPacienteId())
              93           .get()
            
            ../../src/main/java/com/example/medcuida/pro/ui/adapters/ConsultaAdapter.java:102: String literal in setText can not be translated. Use Android resources instead.
              99                              consulta.setPacienteNome(n);
             100                              textPacienteNome.setText(n);
             101                          } else {
             102                              textPacienteNome.setText("Paciente s/ Nome");                       
             103                          }
             104                      } else {
             105                          textPacienteNome.setText("Paciente Apagado");
            
            ../../src/main/java/com/example/medcuida/pro/ui/adapters/ConsultaAdapter.java:105: String literal in setText can not be translated. Use Android resources instead.
             102                                 textPacienteNome.setText("Paciente s/ Nome");
             103                             }
             104                         } else {
             105                             textPacienteNome.setText("Paciente Apagado");                           
             106                         }
             107                     });
             108             } else {
            
            ../../src/main/java/com/example/medcuida/pro/DetalhePacienteActivity.java:76: Do not concatenate text displayed with setText. Use resource string with placeholders.
              73   String email = getStringFromDoc(document, "email");
              74 
              75   nomePaciente = nome;
              76   tvNome.setText("Nome: " + (nome != null ? nome : "N/D"));               
              77   tvIdade.setText("Idade: " + (idade != null ? idade : "N/D"));
              78   tvNumeroUtente.setText("Nº Utente: " + (numUtente != null ? numUtente : "N/D"));
              79   tvSexo.setText("Sexo: " + (sexo != null ? sexo : "N/D"));
            
            ../../src/main/java/com/example/medcuida/pro/DetalhePacienteActivity.java:76: String literal in setText can not be translated. Use Android resources instead.
              73   String email = getStringFromDoc(document, "email");
              74 
              75   nomePaciente = nome;
              76   tvNome.setText("Nome: " + (nome != null ? nome : "N/D"));               
              77   tvIdade.setText("Idade: " + (idade != null ? idade : "N/D"));
              78   tvNumeroUtente.setText("Nº Utente: " + (numUtente != null ? numUtente : "N/D"));
              79   tvSexo.setText("Sexo: " + (sexo != null ? sexo : "N/D"));
            
            SetTextI18n Internationalization Warning Priority 6/10

            Hardcoded text

            ../../src/main/res/layout/activity_detalhe_paciente.xml:22: Hardcoded string "Sair", should use @string resource
              19         app:tint="@color/text_primary"
              20         app:layout_constraintTop_toTopOf="parent"
              21         app:layout_constraintStart_toStartOf="parent"
              22         android:contentDescription="Sair"                                                           
              23         android:elevation="4dp" />
              24 
              25     <ScrollView
            ../../src/main/res/layout/activity_detalhe_paciente.xml:57: Hardcoded string "Informação Pessoal", should use @string resource
              54                     <TextView
              55                         android:layout_width="wrap_content"
              56                         android:layout_height="wrap_content"
              57                         android:text="Informação Pessoal"                                           
              58                         android:textStyle="bold"
              59                         android:textSize="20sp"
              60                         android:textColor="@color/text_primary"
            ../../src/main/res/layout/activity_detalhe_paciente.xml:67: Hardcoded string "Nome: A carregar...", should use @string resource
              64                         android:id="@+id/tv_nome_paciente"
              65                         android:layout_width="wrap_content"
              66                         android:layout_height="wrap_content"
              67                         android:text="Nome: A carregar..."                                          
              68                         android:textSize="16sp"
              69                         android:layout_marginBottom="8dp"/>
            
            ../../src/main/res/layout/activity_detalhe_paciente.xml:75: Hardcoded string "Idade: A carregar...", should use @string resource
              72                         android:id="@+id/tv_idade_paciente"
              73                         android:layout_width="wrap_content"
              74                         android:layout_height="wrap_content"
              75                         android:text="Idade: A carregar..."                                         
              76                         android:textSize="16sp"
              77                         android:layout_marginBottom="8dp"/>
            
            ../../src/main/res/layout/activity_detalhe_paciente.xml:83: Hardcoded string "Nº Utente: A carregar...", should use @string resource
              80                         android:id="@+id/tv_numero_utente"
              81                         android:layout_width="wrap_content"
              82                         android:layout_height="wrap_content"
              83                         android:text="Nº Utente: A carregar..."                                     
              84                         android:textSize="16sp"
              85                         android:layout_marginBottom="8dp"/>
            
            HardcodedText Internationalization Warning Priority 5/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