quero agora marcar as consultas e medicamentos para os apcientes

This commit is contained in:
2026-05-05 17:13:49 +01:00
parent 026770f7da
commit 1a5c28934f
53 changed files with 2509 additions and 2343 deletions

Binary file not shown.

View File

@@ -934,6 +934,18 @@
<option name="screenX" value="720" /> <option name="screenX" value="720" />
<option name="screenY" value="1600" /> <option name="screenY" value="1600" />
</PersistentDeviceSelectionData> </PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="35" />
<option name="brand" value="motorola" />
<option name="codename" value="fogos" />
<option name="id" value="fogos" />
<option name="labId" value="google" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="moto g34 5G" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData> <PersistentDeviceSelectionData>
<option name="api" value="36" /> <option name="api" value="36" />
<option name="brand" value="google" /> <option name="brand" value="google" />
@@ -1416,6 +1428,18 @@
<option name="screenX" value="1812" /> <option name="screenX" value="1812" />
<option name="screenY" value="2176" /> <option name="screenY" value="2176" />
</PersistentDeviceSelectionData> </PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="36" />
<option name="brand" value="samsung" />
<option name="codename" value="q5qksx" />
<option name="id" value="q5qksx" />
<option name="labId" value="google" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold5" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1812" />
<option name="screenY" value="2176" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData> <PersistentDeviceSelectionData>
<option name="api" value="34" /> <option name="api" value="34" />
<option name="brand" value="samsung" /> <option name="brand" value="samsung" />

View File

@@ -4,10 +4,10 @@
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-04-30T09:32:58.553356Z"> <DropdownSelection timestamp="2026-05-05T14:54:21.744387Z">
<Target type="DEFAULT_BOOT"> <Target type="DEFAULT_BOOT">
<handle> <handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=b93659d0e5dd" /> <DeviceId pluginId="LocalEmulator" identifier="path=/Users/230405/.android/avd/Medium_Phone.avd" />
</handle> </handle>
</Target> </Target>
</DropdownSelection> </DropdownSelection>

View File

@@ -4,8 +4,9 @@ package com.example.medcuida.pro.databinding;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.ScrollView; import android.widget.ScrollView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -33,9 +34,6 @@ public final class ActivityEditarPerfilBinding implements ViewBinding {
@NonNull @NonNull
public final TextInputEditText editEmail; public final TextInputEditText editEmail;
@NonNull
public final AutoCompleteTextView editGender;
@NonNull @NonNull
public final TextInputEditText editHorarioFim; public final TextInputEditText editHorarioFim;
@@ -54,23 +52,40 @@ public final class ActivityEditarPerfilBinding implements ViewBinding {
@NonNull @NonNull
public final ShapeableImageView imgPerfilEdit; public final ShapeableImageView imgPerfilEdit;
@NonNull
public final RadioButton rbFeminino;
@NonNull
public final RadioButton rbMasculino;
@NonNull
public final RadioButton rbOutro;
@NonNull
public final RadioGroup rgGender;
private ActivityEditarPerfilBinding(@NonNull ScrollView rootView, private ActivityEditarPerfilBinding(@NonNull ScrollView rootView,
@NonNull MaterialButton btnGuardarAlteracoes, @NonNull ImageButton btnVoltar, @NonNull MaterialButton btnGuardarAlteracoes, @NonNull ImageButton btnVoltar,
@NonNull TextInputEditText editEmail, @NonNull AutoCompleteTextView editGender, @NonNull TextInputEditText editEmail, @NonNull TextInputEditText editHorarioFim,
@NonNull TextInputEditText editHorarioFim, @NonNull TextInputEditText editHorarioInicio, @NonNull TextInputEditText editHorarioInicio, @NonNull TextInputEditText editName,
@NonNull TextInputEditText editName, @NonNull TextInputEditText editSpecialty, @NonNull TextInputEditText editSpecialty, @NonNull FloatingActionButton fabEditPhoto,
@NonNull FloatingActionButton fabEditPhoto, @NonNull ShapeableImageView imgPerfilEdit) { @NonNull ShapeableImageView imgPerfilEdit, @NonNull RadioButton rbFeminino,
@NonNull RadioButton rbMasculino, @NonNull RadioButton rbOutro,
@NonNull RadioGroup rgGender) {
this.rootView = rootView; this.rootView = rootView;
this.btnGuardarAlteracoes = btnGuardarAlteracoes; this.btnGuardarAlteracoes = btnGuardarAlteracoes;
this.btnVoltar = btnVoltar; this.btnVoltar = btnVoltar;
this.editEmail = editEmail; this.editEmail = editEmail;
this.editGender = editGender;
this.editHorarioFim = editHorarioFim; this.editHorarioFim = editHorarioFim;
this.editHorarioInicio = editHorarioInicio; this.editHorarioInicio = editHorarioInicio;
this.editName = editName; this.editName = editName;
this.editSpecialty = editSpecialty; this.editSpecialty = editSpecialty;
this.fabEditPhoto = fabEditPhoto; this.fabEditPhoto = fabEditPhoto;
this.imgPerfilEdit = imgPerfilEdit; this.imgPerfilEdit = imgPerfilEdit;
this.rbFeminino = rbFeminino;
this.rbMasculino = rbMasculino;
this.rbOutro = rbOutro;
this.rgGender = rgGender;
} }
@Override @Override
@@ -118,12 +133,6 @@ public final class ActivityEditarPerfilBinding implements ViewBinding {
break missingId; break missingId;
} }
id = R.id.edit_gender;
AutoCompleteTextView editGender = ViewBindings.findChildViewById(rootView, id);
if (editGender == null) {
break missingId;
}
id = R.id.edit_horario_fim; id = R.id.edit_horario_fim;
TextInputEditText editHorarioFim = ViewBindings.findChildViewById(rootView, id); TextInputEditText editHorarioFim = ViewBindings.findChildViewById(rootView, id);
if (editHorarioFim == null) { if (editHorarioFim == null) {
@@ -160,9 +169,33 @@ public final class ActivityEditarPerfilBinding implements ViewBinding {
break missingId; break missingId;
} }
id = R.id.rb_feminino;
RadioButton rbFeminino = ViewBindings.findChildViewById(rootView, id);
if (rbFeminino == null) {
break missingId;
}
id = R.id.rb_masculino;
RadioButton rbMasculino = ViewBindings.findChildViewById(rootView, id);
if (rbMasculino == null) {
break missingId;
}
id = R.id.rb_outro;
RadioButton rbOutro = ViewBindings.findChildViewById(rootView, id);
if (rbOutro == null) {
break missingId;
}
id = R.id.rg_gender;
RadioGroup rgGender = ViewBindings.findChildViewById(rootView, id);
if (rgGender == null) {
break missingId;
}
return new ActivityEditarPerfilBinding((ScrollView) rootView, btnGuardarAlteracoes, btnVoltar, return new ActivityEditarPerfilBinding((ScrollView) rootView, btnGuardarAlteracoes, btnVoltar,
editEmail, editGender, editHorarioFim, editHorarioInicio, editName, editSpecialty, editEmail, editHorarioFim, editHorarioInicio, editName, editSpecialty, fabEditPhoto,
fabEditPhoto, imgPerfilEdit); imgPerfilEdit, rbFeminino, rbMasculino, rbOutro, rgGender);
} }
String missingId = rootView.getResources().getResourceName(id); String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId)); throw new NullPointerException("Missing required view with ID: ".concat(missingId));

View File

@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_detalhe_paciente" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_detalhe_paciente.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="androidx.constraintlayout.widget.ConstraintLayout"><Targets><Target tag="layout/activity_detalhe_paciente_0" view="androidx.constraintlayout.widget.ConstraintLayout"><Expressions/><location startLine="1" startOffset="0" endLine="195" endOffset="51"/></Target><Target id="@+id/btn_sair_detalhe" view="ImageButton"><Expressions/><location startLine="11" startOffset="4" endLine="22" endOffset="33"/></Target><Target id="@+id/tv_nome_paciente" view="TextView"><Expressions/><location startLine="62" startOffset="20" endLine="68" endOffset="58"/></Target><Target id="@+id/tv_idade_paciente" view="TextView"><Expressions/><location startLine="70" startOffset="20" endLine="76" endOffset="58"/></Target><Target id="@+id/tv_numero_utente" view="TextView"><Expressions/><location startLine="78" startOffset="20" endLine="84" endOffset="58"/></Target><Target id="@+id/tv_sexo_paciente" view="TextView"><Expressions/><location startLine="86" startOffset="20" endLine="92" endOffset="58"/></Target><Target id="@+id/tv_email_paciente" view="TextView"><Expressions/><location startLine="94" startOffset="20" endLine="99" endOffset="48"/></Target><Target id="@+id/tv_medicacao_paciente" view="TextView"><Expressions/><location startLine="130" startOffset="20" endLine="137" endOffset="55"/></Target><Target id="@+id/btn_adicionar_medicamento" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="167" startOffset="20" endLine="175" endOffset="72"/></Target><Target id="@+id/btn_agendar_consulta" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="177" startOffset="20" endLine="186" endOffset="72"/></Target></Targets></Layout> <?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_detalhe_paciente" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_detalhe_paciente.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="androidx.constraintlayout.widget.ConstraintLayout"><Targets><Target tag="layout/activity_detalhe_paciente_0" view="androidx.constraintlayout.widget.ConstraintLayout"><Expressions/><location startLine="1" startOffset="0" endLine="201" endOffset="51"/></Target><Target id="@+id/btn_sair_detalhe" view="ImageButton"><Expressions/><location startLine="11" startOffset="4" endLine="22" endOffset="33"/></Target><Target id="@+id/tv_nome_paciente" view="TextView"><Expressions/><location startLine="65" startOffset="20" endLine="71" endOffset="58"/></Target><Target id="@+id/tv_idade_paciente" view="TextView"><Expressions/><location startLine="73" startOffset="20" endLine="79" endOffset="58"/></Target><Target id="@+id/tv_numero_utente" view="TextView"><Expressions/><location startLine="81" startOffset="20" endLine="87" endOffset="58"/></Target><Target id="@+id/tv_sexo_paciente" view="TextView"><Expressions/><location startLine="89" startOffset="20" endLine="95" endOffset="58"/></Target><Target id="@+id/tv_email_paciente" view="TextView"><Expressions/><location startLine="97" startOffset="20" endLine="102" endOffset="48"/></Target><Target id="@+id/tv_medicacao_paciente" view="TextView"><Expressions/><location startLine="134" startOffset="20" endLine="141" endOffset="55"/></Target><Target id="@+id/btn_adicionar_medicamento" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="172" startOffset="20" endLine="181" endOffset="72"/></Target><Target id="@+id/btn_agendar_consulta" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="183" startOffset="20" endLine="192" endOffset="72"/></Target></Targets></Layout>

View File

@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_editar_perfil" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_editar_perfil.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_editar_perfil_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="174" endOffset="12"/></Target><Target id="@+id/btn_voltar" view="ImageButton"><Expressions/><location startLine="14" startOffset="8" endLine="20" endOffset="42"/></Target><Target id="@+id/img_perfil_edit" view="com.google.android.material.imageview.ShapeableImageView"><Expressions/><location startLine="38" startOffset="12" endLine="45" endOffset="68"/></Target><Target id="@+id/fab_edit_photo" view="com.google.android.material.floatingactionbutton.FloatingActionButton"><Expressions/><location startLine="47" startOffset="12" endLine="57" endOffset="57"/></Target><Target id="@+id/edit_name" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="66" startOffset="12" endLine="73" endOffset="38"/></Target><Target id="@+id/edit_specialty" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="82" startOffset="12" endLine="89" endOffset="38"/></Target><Target id="@+id/edit_gender" view="AutoCompleteTextView"><Expressions/><location startLine="99" startOffset="12" endLine="103" endOffset="42"/></Target><Target id="@+id/edit_horario_inicio" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="119" startOffset="16" endLine="126" endOffset="46"/></Target><Target id="@+id/edit_horario_fim" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="136" startOffset="16" endLine="143" endOffset="46"/></Target><Target id="@+id/edit_email" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="153" startOffset="12" endLine="159" endOffset="54"/></Target><Target id="@+id/btn_guardar_alteracoes" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="162" startOffset="8" endLine="171" endOffset="45"/></Target></Targets></Layout> <?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_editar_perfil" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_editar_perfil.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_editar_perfil_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="202" endOffset="12"/></Target><Target id="@+id/btn_voltar" view="ImageButton"><Expressions/><location startLine="16" startOffset="8" endLine="22" endOffset="42"/></Target><Target id="@+id/img_perfil_edit" view="com.google.android.material.imageview.ShapeableImageView"><Expressions/><location startLine="41" startOffset="12" endLine="48" endOffset="68"/></Target><Target id="@+id/fab_edit_photo" view="com.google.android.material.floatingactionbutton.FloatingActionButton"><Expressions/><location startLine="50" startOffset="12" endLine="60" endOffset="57"/></Target><Target id="@+id/edit_name" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="69" startOffset="12" endLine="76" endOffset="38"/></Target><Target id="@+id/edit_specialty" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="85" startOffset="12" endLine="92" endOffset="38"/></Target><Target id="@+id/rg_gender" view="RadioGroup"><Expressions/><location startLine="103" startOffset="8" endLine="132" endOffset="20"/></Target><Target id="@+id/rb_masculino" view="RadioButton"><Expressions/><location startLine="110" startOffset="12" endLine="116" endOffset="48"/></Target><Target id="@+id/rb_feminino" view="RadioButton"><Expressions/><location startLine="118" startOffset="12" endLine="124" endOffset="48"/></Target><Target id="@+id/rb_outro" view="RadioButton"><Expressions/><location startLine="126" startOffset="12" endLine="131" endOffset="37"/></Target><Target id="@+id/edit_horario_inicio" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="147" startOffset="16" endLine="154" endOffset="46"/></Target><Target id="@+id/edit_horario_fim" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="164" startOffset="16" endLine="171" endOffset="46"/></Target><Target id="@+id/edit_email" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="181" startOffset="12" endLine="187" endOffset="54"/></Target><Target id="@+id/btn_guardar_alteracoes" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="190" startOffset="8" endLine="199" endOffset="45"/></Target></Targets></Layout>

View File

@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_detalhe_paciente" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_detalhe_paciente.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="androidx.constraintlayout.widget.ConstraintLayout"><Targets><Target tag="layout/activity_detalhe_paciente_0" view="androidx.constraintlayout.widget.ConstraintLayout"><Expressions/><location startLine="1" startOffset="0" endLine="195" endOffset="51"/></Target><Target id="@+id/btn_sair_detalhe" view="ImageButton"><Expressions/><location startLine="11" startOffset="4" endLine="22" endOffset="33"/></Target><Target id="@+id/tv_nome_paciente" view="TextView"><Expressions/><location startLine="62" startOffset="20" endLine="68" endOffset="58"/></Target><Target id="@+id/tv_idade_paciente" view="TextView"><Expressions/><location startLine="70" startOffset="20" endLine="76" endOffset="58"/></Target><Target id="@+id/tv_numero_utente" view="TextView"><Expressions/><location startLine="78" startOffset="20" endLine="84" endOffset="58"/></Target><Target id="@+id/tv_sexo_paciente" view="TextView"><Expressions/><location startLine="86" startOffset="20" endLine="92" endOffset="58"/></Target><Target id="@+id/tv_email_paciente" view="TextView"><Expressions/><location startLine="94" startOffset="20" endLine="99" endOffset="48"/></Target><Target id="@+id/tv_medicacao_paciente" view="TextView"><Expressions/><location startLine="130" startOffset="20" endLine="137" endOffset="55"/></Target><Target id="@+id/btn_adicionar_medicamento" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="167" startOffset="20" endLine="175" endOffset="72"/></Target><Target id="@+id/btn_agendar_consulta" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="177" startOffset="20" endLine="186" endOffset="72"/></Target></Targets></Layout> <?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_detalhe_paciente" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_detalhe_paciente.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="androidx.constraintlayout.widget.ConstraintLayout"><Targets><Target tag="layout/activity_detalhe_paciente_0" view="androidx.constraintlayout.widget.ConstraintLayout"><Expressions/><location startLine="1" startOffset="0" endLine="201" endOffset="51"/></Target><Target id="@+id/btn_sair_detalhe" view="ImageButton"><Expressions/><location startLine="11" startOffset="4" endLine="22" endOffset="33"/></Target><Target id="@+id/tv_nome_paciente" view="TextView"><Expressions/><location startLine="65" startOffset="20" endLine="71" endOffset="58"/></Target><Target id="@+id/tv_idade_paciente" view="TextView"><Expressions/><location startLine="73" startOffset="20" endLine="79" endOffset="58"/></Target><Target id="@+id/tv_numero_utente" view="TextView"><Expressions/><location startLine="81" startOffset="20" endLine="87" endOffset="58"/></Target><Target id="@+id/tv_sexo_paciente" view="TextView"><Expressions/><location startLine="89" startOffset="20" endLine="95" endOffset="58"/></Target><Target id="@+id/tv_email_paciente" view="TextView"><Expressions/><location startLine="97" startOffset="20" endLine="102" endOffset="48"/></Target><Target id="@+id/tv_medicacao_paciente" view="TextView"><Expressions/><location startLine="134" startOffset="20" endLine="141" endOffset="55"/></Target><Target id="@+id/btn_adicionar_medicamento" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="172" startOffset="20" endLine="181" endOffset="72"/></Target><Target id="@+id/btn_agendar_consulta" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="183" startOffset="20" endLine="192" endOffset="72"/></Target></Targets></Layout>

View File

@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_editar_perfil" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_editar_perfil.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_editar_perfil_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="174" endOffset="12"/></Target><Target id="@+id/btn_voltar" view="ImageButton"><Expressions/><location startLine="14" startOffset="8" endLine="20" endOffset="42"/></Target><Target id="@+id/img_perfil_edit" view="com.google.android.material.imageview.ShapeableImageView"><Expressions/><location startLine="38" startOffset="12" endLine="45" endOffset="68"/></Target><Target id="@+id/fab_edit_photo" view="com.google.android.material.floatingactionbutton.FloatingActionButton"><Expressions/><location startLine="47" startOffset="12" endLine="57" endOffset="57"/></Target><Target id="@+id/edit_name" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="66" startOffset="12" endLine="73" endOffset="38"/></Target><Target id="@+id/edit_specialty" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="82" startOffset="12" endLine="89" endOffset="38"/></Target><Target id="@+id/edit_gender" view="AutoCompleteTextView"><Expressions/><location startLine="99" startOffset="12" endLine="103" endOffset="42"/></Target><Target id="@+id/edit_horario_inicio" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="119" startOffset="16" endLine="126" endOffset="46"/></Target><Target id="@+id/edit_horario_fim" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="136" startOffset="16" endLine="143" endOffset="46"/></Target><Target id="@+id/edit_email" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="153" startOffset="12" endLine="159" endOffset="54"/></Target><Target id="@+id/btn_guardar_alteracoes" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="162" startOffset="8" endLine="171" endOffset="45"/></Target></Targets></Layout> <?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_editar_perfil" modulePackage="com.example.medcuida.pro" filePath="app/src/main/res/layout/activity_editar_perfil.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_editar_perfil_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="202" endOffset="12"/></Target><Target id="@+id/btn_voltar" view="ImageButton"><Expressions/><location startLine="16" startOffset="8" endLine="22" endOffset="42"/></Target><Target id="@+id/img_perfil_edit" view="com.google.android.material.imageview.ShapeableImageView"><Expressions/><location startLine="41" startOffset="12" endLine="48" endOffset="68"/></Target><Target id="@+id/fab_edit_photo" view="com.google.android.material.floatingactionbutton.FloatingActionButton"><Expressions/><location startLine="50" startOffset="12" endLine="60" endOffset="57"/></Target><Target id="@+id/edit_name" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="69" startOffset="12" endLine="76" endOffset="38"/></Target><Target id="@+id/edit_specialty" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="85" startOffset="12" endLine="92" endOffset="38"/></Target><Target id="@+id/rg_gender" view="RadioGroup"><Expressions/><location startLine="103" startOffset="8" endLine="132" endOffset="20"/></Target><Target id="@+id/rb_masculino" view="RadioButton"><Expressions/><location startLine="110" startOffset="12" endLine="116" endOffset="48"/></Target><Target id="@+id/rb_feminino" view="RadioButton"><Expressions/><location startLine="118" startOffset="12" endLine="124" endOffset="48"/></Target><Target id="@+id/rb_outro" view="RadioButton"><Expressions/><location startLine="126" startOffset="12" endLine="131" endOffset="37"/></Target><Target id="@+id/edit_horario_inicio" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="147" startOffset="16" endLine="154" endOffset="46"/></Target><Target id="@+id/edit_horario_fim" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="164" startOffset="16" endLine="171" endOffset="46"/></Target><Target id="@+id/edit_email" view="com.google.android.material.textfield.TextInputEditText"><Expressions/><location startLine="181" startOffset="12" endLine="187" endOffset="54"/></Target><Target id="@+id/btn_guardar_alteracoes" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="190" startOffset="8" endLine="199" endOffset="45"/></Target></Targets></Layout>

View File

@@ -1,4 +1,4 @@
#Thu Apr 30 10:35:19 WEST 2026 #Tue May 05 16:07:36 WEST 2026
com.example.medcuida.pro.app-main-56\:/drawable-v26/ic_launcher_final.xml=/Users/230405/StudioProjects/cuidamais_med/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable-v26_ic_launcher_final.xml.flat com.example.medcuida.pro.app-main-56\:/drawable-v26/ic_launcher_final.xml=/Users/230405/StudioProjects/cuidamais_med/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable-v26_ic_launcher_final.xml.flat
com.example.medcuida.pro.app-main-56\:/drawable/bg_gradient_header.xml=/Users/230405/StudioProjects/cuidamais_med/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_bg_gradient_header.xml.flat com.example.medcuida.pro.app-main-56\:/drawable/bg_gradient_header.xml=/Users/230405/StudioProjects/cuidamais_med/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_bg_gradient_header.xml.flat
com.example.medcuida.pro.app-main-56\:/drawable/btn_outline_error.xml=/Users/230405/StudioProjects/cuidamais_med/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_btn_outline_error.xml.flat com.example.medcuida.pro.app-main-56\:/drawable/btn_outline_error.xml=/Users/230405/StudioProjects/cuidamais_med/app/build/intermediates/merged_res/debug/mergeDebugResources/drawable_btn_outline_error.xml.flat

View File

@@ -1,4 +1,4 @@
#Thu Apr 30 10:35:19 WEST 2026 #Tue May 05 16:07:36 WEST 2026
com.example.medcuida.pro.app-main-6\:/drawable-v26/ic_launcher_final.xml=/Users/230405/Desktop/med Cuida+/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable-v26/ic_launcher_final.xml com.example.medcuida.pro.app-main-6\:/drawable-v26/ic_launcher_final.xml=/Users/230405/Desktop/med Cuida+/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable-v26/ic_launcher_final.xml
com.example.medcuida.pro.app-main-6\:/drawable/bg_gradient_header.xml=/Users/230405/Desktop/med Cuida+/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/bg_gradient_header.xml com.example.medcuida.pro.app-main-6\:/drawable/bg_gradient_header.xml=/Users/230405/Desktop/med Cuida+/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/bg_gradient_header.xml
com.example.medcuida.pro.app-main-6\:/drawable/btn_outline_error.xml=/Users/230405/Desktop/med Cuida+/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/btn_outline_error.xml com.example.medcuida.pro.app-main-6\:/drawable/btn_outline_error.xml=/Users/230405/Desktop/med Cuida+/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/btn_outline_error.xml

View File

@@ -1,4 +1,4 @@
#Thu Apr 30 10:38:47 WEST 2026 #Tue May 05 16:07:37 WEST 2026
base.0=/Users/230405/Desktop/med Cuida+/app/build/intermediates/dex/debug/mergeExtDexDebug/classes.dex base.0=/Users/230405/Desktop/med Cuida+/app/build/intermediates/dex/debug/mergeExtDexDebug/classes.dex
base.1=/Users/230405/Desktop/med Cuida+/app/build/intermediates/dex/debug/mergeProjectDexDebug/0/classes.dex base.1=/Users/230405/Desktop/med Cuida+/app/build/intermediates/dex/debug/mergeProjectDexDebug/0/classes.dex
base.2=/Users/230405/Desktop/med Cuida+/app/build/intermediates/dex/debug/mergeProjectDexDebug/11/classes.dex base.2=/Users/230405/Desktop/med Cuida+/app/build/intermediates/dex/debug/mergeProjectDexDebug/11/classes.dex

File diff suppressed because one or more lines are too long

View File

@@ -70,7 +70,6 @@ id chip_group_times
id container id container
id edit_consulta_motivo id edit_consulta_motivo
id edit_email id edit_email
id edit_gender
id edit_horario_fim id edit_horario_fim
id edit_horario_inicio id edit_horario_inicio
id edit_med_name id edit_med_name
@@ -105,8 +104,11 @@ id navigation_schedule_appointment
id navigation_sns24 id navigation_sns24
id new_password id new_password
id password_edit_text id password_edit_text
id rb_feminino
id rb_inhalatory id rb_inhalatory
id rb_masculino
id rb_oral id rb_oral
id rb_outro
id rb_topical id rb_topical
id recycler_aceites id recycler_aceites
id recycler_agenda id recycler_agenda
@@ -117,6 +119,7 @@ id register_button
id register_link id register_link
id reset_button id reset_button
id rg_administration id rg_administration
id rg_gender
id search_layout_pacientes id search_layout_pacientes
id specialty_edit_text id specialty_edit_text
id text_aceites_empty id text_aceites_empty

View File

@@ -1,8 +1,4 @@
[ [
{
"merged": "com.example.medcuida.pro.app-mergeDebugResources-54:/layout/item_comprimido_search.xml",
"source": "com.example.medcuida.pro.app-main-57:/layout/item_comprimido_search.xml"
},
{ {
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-mergeDebugResources-54:/layout/dialog_add_medication.xml", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-mergeDebugResources-54:/layout/dialog_add_medication.xml",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/dialog_add_medication.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/dialog_add_medication.xml"
@@ -23,6 +19,10 @@
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-mergeDebugResources-54:/layout/item_consulta_medico.xml", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-mergeDebugResources-54:/layout/item_consulta_medico.xml",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/item_consulta_medico.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/item_consulta_medico.xml"
}, },
{
"merged": "com.example.medcuida.pro.app-mergeDebugResources-54:/layout/activity_main.xml",
"source": "com.example.medcuida.pro.app-main-57:/layout/activity_main.xml"
},
{ {
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-mergeDebugResources-54:/layout/activity_register.xml", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-mergeDebugResources-54:/layout/activity_register.xml",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_register.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_register.xml"

View File

@@ -3,6 +3,14 @@
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/drawable_ic_launcher.xml.flat", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/drawable_ic_launcher.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/drawable/ic_launcher.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/drawable/ic_launcher.xml"
}, },
{
"merged": "com.example.medcuida.pro.app-debug-55:/layout_activity_main.xml.flat",
"source": "com.example.medcuida.pro.app-main-57:/layout/activity_main.xml"
},
{
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/layout_activity_editar_perfil.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_editar_perfil.xml"
},
{ {
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/drawable_bg_gradient_header.xml.flat", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/drawable_bg_gradient_header.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/drawable/bg_gradient_header.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/drawable/bg_gradient_header.xml"
@@ -11,10 +19,6 @@
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/drawable_ic_nav_inicio.xml.flat", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/drawable_ic_nav_inicio.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/drawable/ic_nav_inicio.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/drawable/ic_nav_inicio.xml"
}, },
{
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/layout_activity_editar_perfil.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_editar_perfil.xml"
},
{ {
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/layout_activity_main.xml.flat", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/layout_activity_main.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_main.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_main.xml"
@@ -91,10 +95,6 @@
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/layout_activity_forgot_password.xml.flat", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/layout_activity_forgot_password.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_forgot_password.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/layout/activity_forgot_password.xml"
}, },
{
"merged": "com.example.medcuida.pro.app-debug-55:/layout_item_comprimido_search.xml.flat",
"source": "com.example.medcuida.pro.app-main-57:/layout/item_comprimido_search.xml"
},
{ {
"merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/xml_data_extraction_rules.xml.flat", "merged": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-debug-55:/xml_data_extraction_rules.xml.flat",
"source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/xml/data_extraction_rules.xml" "source": "/Users/230405/.gradle/daemon/9.4.1/com.example.medcuida.pro.app-main-57:/xml/data_extraction_rules.xml"

View File

@@ -25,6 +25,8 @@
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:clipToPadding="false"
android:paddingBottom="80dp"
app:layout_constraintTop_toBottomOf="@id/btn_sair_detalhe" app:layout_constraintTop_toBottomOf="@id/btn_sair_detalhe"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">
@@ -56,7 +58,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Informação Pessoal" android:text="Informação Pessoal"
android:textStyle="bold" android:textStyle="bold"
android:textSize="20sp" android:textSize="22sp"
android:fontFamily="sans-serif-black"
android:textColor="@color/text_primary" android:textColor="@color/text_primary"
android:layout_marginBottom="16dp"/> android:layout_marginBottom="16dp"/>
@@ -124,7 +127,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Medicação Ativa" android:text="Medicação Ativa"
android:textStyle="bold" android:textStyle="bold"
android:textSize="20sp" android:textSize="22sp"
android:fontFamily="sans-serif-black"
android:textColor="@color/text_primary" android:textColor="@color/text_primary"
android:layout_marginBottom="16dp"/> android:layout_marginBottom="16dp"/>
@@ -161,7 +165,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Ações Clínicas" android:text="Ações Clínicas"
android:textStyle="bold" android:textStyle="bold"
android:textSize="20sp" android:textSize="22sp"
android:fontFamily="sans-serif-black"
android:textColor="@color/text_primary" android:textColor="@color/text_primary"
android:layout_marginBottom="16dp"/> android:layout_marginBottom="16dp"/>
@@ -170,9 +175,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:text="Adicionar Medicamento" android:text="Adicionar Medicamento"
app:cornerRadius="12dp" app:cornerRadius="30dp"
android:layout_marginBottom="12dp" android:layout_marginBottom="16dp"
app:icon="@drawable/ic_plus" app:icon="@drawable/ic_plus"
app:backgroundTint="?attr/colorPrimary"
style="@style/Widget.MaterialComponents.Button"/> style="@style/Widget.MaterialComponents.Button"/>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
@@ -180,10 +186,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:text="Marcar Consulta" android:text="Marcar Consulta"
app:cornerRadius="12dp" app:cornerRadius="30dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
app:icon="@drawable/ic_calendar" app:icon="@drawable/ic_calendar"
android:backgroundTint="#4CAF50" app:backgroundTint="#4CAF50"
style="@style/Widget.MaterialComponents.Button"/> style="@style/Widget.MaterialComponents.Button"/>
</LinearLayout> </LinearLayout>

View File

@@ -4,13 +4,15 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="true" android:fillViewport="true"
android:background="#FAFAFA"> android:background="@color/background_color">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:padding="24dp"> android:paddingTop="32dp"
android:paddingBottom="40dp"
android:paddingHorizontal="24dp">
<ImageButton <ImageButton
android:id="@+id/btn_voltar" android:id="@+id/btn_voltar"
@@ -24,11 +26,12 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Editar Dados Pessoais" android:text="Editar Dados Pessoais"
android:textSize="24sp" android:textAlignment="center"
android:textStyle="bold" android:textSize="28sp"
android:textColor="#000000" android:fontFamily="sans-serif-black"
android:layout_marginTop="16dp" android:textColor="?attr/colorPrimary"
android:layout_marginBottom="24dp"/> android:layout_marginTop="24dp"
android:layout_marginBottom="32dp"/>
<RelativeLayout <RelativeLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
@@ -90,19 +93,44 @@
android:maxLines="1" /> android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <TextView
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu" android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="16dp" android:text="Sexo"
android:hint="Sexo"> android:textColor="@color/text_primary"
android:layout_marginBottom="8dp"
android:textStyle="bold"/>
<AutoCompleteTextView <RadioGroup
android:id="@+id/edit_gender" android:id="@+id/rg_gender"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="none" /> android:orientation="horizontal"
</com.google.android.material.textfield.TextInputLayout> android:layout_marginBottom="16dp">
<RadioButton
android:id="@+id/rb_masculino"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Masculino"
android:buttonTint="?attr/colorPrimary"
android:layout_marginEnd="16dp"/>
<RadioButton
android:id="@+id/rb_feminino"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="?attr/colorPrimary"
android:text="Feminino"
android:layout_marginEnd="16dp"/>
<RadioButton
android:id="@+id/rb_outro"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="?attr/colorPrimary"
android:text="Outro"/>
</RadioGroup>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -163,12 +191,12 @@
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_guardar_alteracoes" android:id="@+id/btn_guardar_alteracoes"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="56dp" android:layout_height="60dp"
android:text="GUARDAR ALTERAÇÕES" android:text="GUARDAR ALTERAÇÕES"
android:textSize="14sp" android:textSize="15sp"
android:textStyle="bold" android:textStyle="bold"
app:cornerRadius="28dp" app:cornerRadius="30dp"
app:backgroundTint="#000000" app:backgroundTint="?attr/colorPrimary"
android:textColor="@color/white"/> android:textColor="@color/white"/>
</LinearLayout> </LinearLayout>

View File

@@ -3426,7 +3426,6 @@ int id east 0x7f0900ce
int id edge 0x7f0900cf int id edge 0x7f0900cf
int id edit_consulta_motivo 0x7f0900d0 int id edit_consulta_motivo 0x7f0900d0
int id edit_email 0x7f0900d1 int id edit_email 0x7f0900d1
int id edit_gender 0x7f0900d2
int id edit_horario_fim 0x7f0900d3 int id edit_horario_fim 0x7f0900d3
int id edit_horario_inicio 0x7f0900d4 int id edit_horario_inicio 0x7f0900d4
int id edit_med_name 0x7f0900d5 int id edit_med_name 0x7f0900d5
@@ -3658,8 +3657,11 @@ int id progress_circular 0x7f0901b6
int id progress_horizontal 0x7f0901b7 int id progress_horizontal 0x7f0901b7
int id radio 0x7f0901b8 int id radio 0x7f0901b8
int id ratio 0x7f0901b9 int id ratio 0x7f0901b9
int id rb_feminino 0x7f090275
int id rb_inhalatory 0x7f0901ba int id rb_inhalatory 0x7f0901ba
int id rb_masculino 0x7f090276
int id rb_oral 0x7f0901bb int id rb_oral 0x7f0901bb
int id rb_outro 0x7f090277
int id rb_topical 0x7f0901bc int id rb_topical 0x7f0901bc
int id rectangles 0x7f0901bd int id rectangles 0x7f0901bd
int id recycler_aceites 0x7f0901be int id recycler_aceites 0x7f0901be
@@ -3673,6 +3675,7 @@ int id report_drawn 0x7f0901c5
int id reset_button 0x7f0901c6 int id reset_button 0x7f0901c6
int id reverseSawtooth 0x7f0901c7 int id reverseSawtooth 0x7f0901c7
int id rg_administration 0x7f0901c8 int id rg_administration 0x7f0901c8
int id rg_gender 0x7f090278
int id right 0x7f0901c9 int id right 0x7f0901c9
int id rightToLeft 0x7f0901ca int id rightToLeft 0x7f0901ca
int id right_icon 0x7f0901cb int id right_icon 0x7f0901cb

View File

@@ -3427,7 +3427,6 @@ id east
id edge id edge
id edit_consulta_motivo id edit_consulta_motivo
id edit_email id edit_email
id edit_gender
id edit_horario_fim id edit_horario_fim
id edit_horario_inicio id edit_horario_inicio
id edit_med_name id edit_med_name
@@ -3659,8 +3658,11 @@ id progress_circular
id progress_horizontal id progress_horizontal
id radio id radio
id ratio id ratio
id rb_feminino
id rb_inhalatory id rb_inhalatory
id rb_masculino
id rb_oral id rb_oral
id rb_outro
id rb_topical id rb_topical
id rectangles id rectangles
id recycler_aceites id recycler_aceites
@@ -3674,6 +3676,7 @@ id report_drawn
id reset_button id reset_button
id reverseSawtooth id reverseSawtooth
id rg_administration id rg_administration
id rg_gender
id right id right
id rightToLeft id rightToLeft
id right_icon id right_icon

View File

@@ -182,8 +182,6 @@ public class DetalhePacienteActivity extends AppCompatActivity {
} }
if (count > 0) { if (count > 0) {
Log.d(TAG, "Carregados " + count + " de " + source); Log.d(TAG, "Carregados " + count + " de " + source);
final int total = fullPillsList.size();
runOnUiThread(() -> Toast.makeText(DetalhePacienteActivity.this, "Medicamentos carregados: " + total, Toast.LENGTH_SHORT).show());
} }
} }
@@ -311,42 +309,70 @@ public class DetalhePacienteActivity extends AppCompatActivity {
final String[] selectedTime = {""}; final String[] selectedTime = {""};
final String selectedMedicoId = mAuth.getUid(); final String selectedMedicoId = mAuth.getUid();
// Setup Date Picker java.util.List<String> dynamicTimes = new java.util.ArrayList<>();
btnDate.setOnClickListener(v -> {
java.util.Calendar cal = java.util.Calendar.getInstance();
new android.app.DatePickerDialog(this, (view, year, month, day) -> {
selectedDate[0] = String.format(java.util.Locale.getDefault(), "%02d/%02d/%d", day, month + 1, year);
btnDate.setText(selectedDate[0]);
}, cal.get(java.util.Calendar.YEAR), cal.get(java.util.Calendar.MONTH), cal.get(java.util.Calendar.DAY_OF_MONTH)).show();
});
// Setup Time Slots Grid
String[] times = {"09:00", "09:20", "09:40", "10:00", "10:20", "10:40", "11:00", "11:20", "11:40", "12:00", "12:20", "12:40"};
recyclerTimes.setLayoutManager(new androidx.recyclerview.widget.GridLayoutManager(this, 4));
class TimeAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<TimeAdapter.VH> { class TimeAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<TimeAdapter.VH> {
int selectedPos = -1; int selectedPos = -1;
@androidx.annotation.NonNull @Override public VH onCreateViewHolder(@androidx.annotation.NonNull android.view.ViewGroup p, int t) { @androidx.annotation.NonNull @Override public VH onCreateViewHolder(@androidx.annotation.NonNull android.view.ViewGroup p, int t) {
return new VH(getLayoutInflater().inflate(R.layout.item_time_slot, p, false)); return new VH(getLayoutInflater().inflate(R.layout.item_time_slot, p, false));
} }
@Override public void onBindViewHolder(@androidx.annotation.NonNull VH h, int p) { @Override public void onBindViewHolder(@androidx.annotation.NonNull VH h, int p) {
h.tv.setText(times[p]); h.tv.setText(dynamicTimes.get(p));
h.card.setStrokeColor(selectedPos == p ? android.graphics.Color.BLUE : android.graphics.Color.LTGRAY); h.card.setStrokeColor(selectedPos == p ? android.graphics.Color.BLUE : android.graphics.Color.LTGRAY);
h.card.setOnClickListener(v -> { h.card.setOnClickListener(v -> {
int old = selectedPos; int old = selectedPos;
selectedPos = p; selectedPos = p;
selectedTime[0] = times[p]; selectedTime[0] = dynamicTimes.get(p);
notifyItemChanged(old); notifyItemChanged(old);
notifyItemChanged(selectedPos); notifyItemChanged(selectedPos);
}); });
} }
@Override public int getItemCount() { return times.length; } @Override public int getItemCount() { return dynamicTimes.size(); }
class VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder { class VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder {
android.widget.TextView tv; com.google.android.material.card.MaterialCardView card; android.widget.TextView tv; com.google.android.material.card.MaterialCardView card;
VH(android.view.View v) { super(v); tv = v.findViewById(R.id.tv_time_slot); card = v.findViewById(R.id.card_time_slot); } VH(android.view.View v) { super(v); tv = v.findViewById(R.id.tv_time_slot); card = v.findViewById(R.id.card_time_slot); }
} }
public void resetSelection() { selectedPos = -1; selectedTime[0] = ""; notifyDataSetChanged(); }
} }
recyclerTimes.setAdapter(new TimeAdapter());
recyclerTimes.setLayoutManager(new androidx.recyclerview.widget.GridLayoutManager(this, 4));
TimeAdapter adapter = new TimeAdapter();
recyclerTimes.setAdapter(adapter);
Runnable updateTimes = () -> {
dynamicTimes.clear();
java.util.Calendar now = java.util.Calendar.getInstance();
boolean isToday = selectedDate[0].equals(String.format(java.util.Locale.getDefault(), "%02d/%02d/%d",
now.get(java.util.Calendar.DAY_OF_MONTH), now.get(java.util.Calendar.MONTH) + 1, now.get(java.util.Calendar.YEAR)));
int currentHour = now.get(java.util.Calendar.HOUR_OF_DAY);
int currentMinute = now.get(java.util.Calendar.MINUTE);
for (int h = 8; h < 19; h++) {
for (int m = 0; m < 60; m += 20) {
if (!isToday || h > currentHour || (h == currentHour && m > currentMinute)) {
dynamicTimes.add(String.format(java.util.Locale.getDefault(), "%02d:%02d", h, m));
}
}
}
adapter.resetSelection();
};
// Set default date to today
java.util.Calendar calNow = java.util.Calendar.getInstance();
selectedDate[0] = String.format(java.util.Locale.getDefault(), "%02d/%02d/%d",
calNow.get(java.util.Calendar.DAY_OF_MONTH), calNow.get(java.util.Calendar.MONTH) + 1, calNow.get(java.util.Calendar.YEAR));
btnDate.setText(selectedDate[0]);
updateTimes.run();
// Setup Date Picker
btnDate.setOnClickListener(v -> {
java.util.Calendar cal = java.util.Calendar.getInstance();
// Optional: Parse selectedDate[0] to set initial date on picker, skipping for brevity
new android.app.DatePickerDialog(this, (view, year, month, day) -> {
selectedDate[0] = String.format(java.util.Locale.getDefault(), "%02d/%02d/%d", day, month + 1, year);
btnDate.setText(selectedDate[0]);
updateTimes.run();
}, cal.get(java.util.Calendar.YEAR), cal.get(java.util.Calendar.MONTH), cal.get(java.util.Calendar.DAY_OF_MONTH)).show();
});
dialogView.findViewById(R.id.btn_confirmar_agendamento).setOnClickListener(v -> { dialogView.findViewById(R.id.btn_confirmar_agendamento).setOnClickListener(v -> {
if (selectedDate[0].isEmpty() || selectedTime[0].isEmpty()) { if (selectedDate[0].isEmpty() || selectedTime[0].isEmpty()) {
@@ -355,12 +381,19 @@ public class DetalhePacienteActivity extends AppCompatActivity {
} }
java.util.Map<String, Object> consulta = new java.util.HashMap<>(); java.util.Map<String, Object> consulta = new java.util.HashMap<>();
// Campos para a App do Médico (Med Cuida+)
consulta.put("pacienteId", pacienteId); consulta.put("pacienteId", pacienteId);
consulta.put("pacienteNome", nomePaciente); consulta.put("pacienteNome", nomePaciente);
consulta.put("medicoId", selectedMedicoId); consulta.put("medicoId", selectedMedicoId);
consulta.put("data", selectedDate[0]); consulta.put("data", selectedDate[0]);
consulta.put("hora", selectedTime[0]); consulta.put("hora", selectedTime[0]);
consulta.put("status", "aceite");
// Campos partilhados ou para a App do Paciente (Cuida+)
consulta.put("userId", pacienteId);
consulta.put("date", selectedDate[0]);
consulta.put("time", selectedTime[0]);
consulta.put("isPast", false);
consulta.put("status", "Aceite"); // A App paciente usa "Aceite" com A maiúsculo
consulta.put("reason", editReason.getText().toString().trim()); consulta.put("reason", editReason.getText().toString().trim());
consulta.put("type", "Consulta de Rotina"); consulta.put("type", "Consulta de Rotina");

View File

@@ -3,30 +3,23 @@ package com.example.medcuida.pro;
import android.app.TimePickerDialog; import android.app.TimePickerDialog;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.widget.ArrayAdapter; import android.widget.RadioButton;
import android.widget.AutoCompleteTextView; import android.widget.RadioGroup;
import android.widget.ImageButton;
import android.widget.Toast; import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.imageview.ShapeableImageView; import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.FirebaseFirestore; import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.SetOptions;
import com.google.firebase.firestore.WriteBatch;
import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.StorageReference;
import java.util.Calendar; import java.util.Calendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
@@ -35,12 +28,10 @@ import java.util.Map;
public class EditarPerfilActivity extends AppCompatActivity { public class EditarPerfilActivity extends AppCompatActivity {
private TextInputEditText nameEditText, specialtyEditText, emailEditText, horarioInicioEditText, horarioFimEditText; private TextInputEditText nameEditText, specialtyEditText, emailEditText, horarioInicioEditText, horarioFimEditText;
private AutoCompleteTextView genderAutoComplete; private RadioGroup rgGender;
private MaterialButton btnGuardar; private MaterialButton btnGuardar;
private ImageButton btnVoltar;
private ShapeableImageView imgPerfil; private ShapeableImageView imgPerfil;
private FloatingActionButton fabEditPhoto; private FloatingActionButton fabEditPhoto;
private FirebaseAuth mAuth; private FirebaseAuth mAuth;
private FirebaseFirestore db; private FirebaseFirestore db;
private FirebaseStorage storage; private FirebaseStorage storage;
@@ -65,234 +56,136 @@ public class EditarPerfilActivity extends AppCompatActivity {
mAuth = FirebaseAuth.getInstance(); mAuth = FirebaseAuth.getInstance();
db = FirebaseFirestore.getInstance(); db = FirebaseFirestore.getInstance();
storage = FirebaseStorage.getInstance(); storage = FirebaseStorage.getInstance();
if (mAuth.getCurrentUser() == null) { finish(); return; }
if (mAuth.getCurrentUser() == null) {
finish();
return;
}
currentUserId = mAuth.getCurrentUser().getUid(); currentUserId = mAuth.getCurrentUser().getUid();
// Bind Views safely // Toolbar
imgPerfil = findViewById(R.id.img_perfil_edit); Toolbar toolbar = findViewById(R.id.toolbar);
fabEditPhoto = findViewById(R.id.fab_edit_photo); if (toolbar != null) {
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
toolbar.setNavigationOnClickListener(v -> finish());
}
// Bind views
nameEditText = findViewById(R.id.edit_name); nameEditText = findViewById(R.id.edit_name);
specialtyEditText = findViewById(R.id.edit_specialty); specialtyEditText = findViewById(R.id.edit_specialty);
genderAutoComplete = findViewById(R.id.edit_gender); rgGender = findViewById(R.id.rg_gender);
horarioInicioEditText = findViewById(R.id.edit_horario_inicio); horarioInicioEditText = findViewById(R.id.edit_horario_inicio);
horarioFimEditText = findViewById(R.id.edit_horario_fim); horarioFimEditText = findViewById(R.id.edit_horario_fim);
emailEditText = findViewById(R.id.edit_email); emailEditText = findViewById(R.id.edit_email);
btnGuardar = findViewById(R.id.btn_guardar_alteracoes); btnGuardar = findViewById(R.id.btn_guardar_alteracoes);
btnVoltar = findViewById(R.id.btn_voltar); imgPerfil = findViewById(R.id.img_perfil_edit);
fabEditPhoto = findViewById(R.id.fab_edit_photo);
// Verificação defensiva // Listeners
if (btnGuardar == null || nameEditText == null) { if (fabEditPhoto != null) fabEditPhoto.setOnClickListener(v -> pickMedia.launch("image/*"));
Toast.makeText(this, "Erro: Interface não carregada.", Toast.LENGTH_LONG).show();
finish();
return;
}
// Click Listeners
if (fabEditPhoto != null) fabEditPhoto.setOnClickListener(v -> pickImage());
if (imgPerfil != null) imgPerfil.setOnClickListener(v -> pickImage());
if (horarioInicioEditText != null) horarioInicioEditText.setOnClickListener(v -> showTimePicker(horarioInicioEditText)); if (horarioInicioEditText != null) horarioInicioEditText.setOnClickListener(v -> showTimePicker(horarioInicioEditText));
if (horarioFimEditText != null) horarioFimEditText.setOnClickListener(v -> showTimePicker(horarioFimEditText)); if (horarioFimEditText != null) horarioFimEditText.setOnClickListener(v -> showTimePicker(horarioFimEditText));
if (btnVoltar != null) btnVoltar.setOnClickListener(v -> finish()); if (btnGuardar != null) btnGuardar.setOnClickListener(v -> validarEGuardar());
btnGuardar.setOnClickListener(v -> {
try {
guardarAlteracoes();
} catch (Exception e) {
Toast.makeText(this, "Erro ao guardar: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
setupGenderDropdown();
carregarDados(); carregarDados();
} catch (Exception e) {
Toast.makeText(this, "Erro ao abrir edição: " + e.getMessage(), Toast.LENGTH_LONG).show(); } catch (Throwable t) {
Toast.makeText(this, "Erro: " + t.toString(), Toast.LENGTH_LONG).show();
finish(); finish();
} }
} }
private void setupGenderDropdown() {
String[] genders = new String[]{"Masculino", "Feminino", "Outro"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, genders);
if (genderAutoComplete != null) genderAutoComplete.setAdapter(adapter);
}
private void pickImage() {
pickMedia.launch("image/*");
}
private void carregarDados() {
// Carregar de ambas as coleções para garantir que não faltam campos
db.collection("medicos").document(currentUserId).get().addOnSuccessListener(docMed -> {
if (docMed.exists()) {
preencherCampos(docMed);
loadProfileImage(getStringFromDoc(docMed, "foto_url"));
}
// Depois carregar utilizadores e sobrescrever/preencher o que faltar
db.collection("utilizadores").document(currentUserId).get().addOnSuccessListener(doc -> {
if (doc.exists()) {
preencherCampos(doc); // Preenche novamente, campos não nulos sobrescrevem
String foto = getStringFromDoc(doc, "foto_url");
if (foto != null && !foto.isEmpty()) {
loadProfileImage(foto);
}
}
});
}).addOnFailureListener(e -> {
// Se falhar medicos, tenta utilizadores na mesma
db.collection("utilizadores").document(currentUserId).get().addOnSuccessListener(doc -> {
if (doc.exists()) {
preencherCampos(doc);
loadProfileImage(getStringFromDoc(doc, "foto_url"));
}
}).addOnFailureListener(e2 -> Toast.makeText(this, "Erro ao carregar dados.", Toast.LENGTH_SHORT).show());
});
}
private void loadProfileImage(String url) {
currentPhotoUrl = url;
// Reativado Glide com verificação de segurança
if (currentPhotoUrl != null && !currentPhotoUrl.isEmpty() && imgPerfil != null && !isFinishing()) {
Glide.with(this)
.load(currentPhotoUrl)
.placeholder(R.drawable.ic_user)
.circleCrop()
.into(imgPerfil);
}
}
private void preencherCampos(com.google.firebase.firestore.DocumentSnapshot doc) {
if (doc == null || !doc.exists()) return;
try {
String nome = getStringFromDoc(doc, "nome_completo");
if (TextUtils.isEmpty(nome)) nome = getStringFromDoc(doc, "nome");
if (!TextUtils.isEmpty(nome) && nameEditText != null) nameEditText.setText(nome);
String specialty = getStringFromDoc(doc, "especialidade");
if (!TextUtils.isEmpty(specialty) && specialtyEditText != null) specialtyEditText.setText(specialty);
String email = getStringFromDoc(doc, "email");
if (!TextUtils.isEmpty(email) && emailEditText != null) emailEditText.setText(email);
String horario = getStringFromDoc(doc, "horario");
if (horario != null && horario.contains(" - ")) {
String[] parts = horario.split(" - ");
if (parts.length == 2) {
if (horarioInicioEditText != null) horarioInicioEditText.setText(parts[0]);
if (horarioFimEditText != null) horarioFimEditText.setText(parts[1]);
}
} else if (!TextUtils.isEmpty(horario) && horarioInicioEditText != null) {
horarioInicioEditText.setText(horario);
}
String gender = getStringFromDoc(doc, "sexo");
if (!TextUtils.isEmpty(gender) && genderAutoComplete != null) {
genderAutoComplete.setText(gender, false);
}
} catch (Exception e) {
Log.e("EditarPerfil", "Erro ao preencher campos: " + e.getMessage());
}
}
private void guardarAlteracoes() {
String name = nameEditText.getText() != null ? nameEditText.getText().toString().trim() : "";
String specialty = specialtyEditText.getText() != null ? specialtyEditText.getText().toString().trim() : "";
String gender = genderAutoComplete.getText() != null ? genderAutoComplete.getText().toString().trim() : "";
String hInicio = horarioInicioEditText.getText() != null ? horarioInicioEditText.getText().toString().trim() : "";
String hFim = horarioFimEditText.getText() != null ? horarioFimEditText.getText().toString().trim() : "";
String horario = (!hInicio.isEmpty() && !hFim.isEmpty()) ? hInicio + " - " + hFim : hInicio;
if (TextUtils.isEmpty(name)) {
nameEditText.setError("O nome é obrigatório");
return;
}
if (TextUtils.isEmpty(specialty)) {
specialtyEditText.setError("A especialidade é obrigatória");
return;
}
btnGuardar.setEnabled(false);
if (selectedImageUri != null) {
uploadImageAndSaveData(name, specialty, gender, horario);
} else {
saveData(name, specialty, gender, horario, currentPhotoUrl);
}
}
private void uploadImageAndSaveData(String name, String specialty, String gender, String horario) {
String fileName = "profile_pics/" + currentUserId + ".jpg";
StorageReference ref = storage.getReference().child(fileName);
ref.putFile(selectedImageUri)
.addOnSuccessListener(taskSnapshot -> ref.getDownloadUrl().addOnSuccessListener(uri -> {
saveData(name, specialty, gender, horario, uri.toString());
}))
.addOnFailureListener(e -> {
Toast.makeText(this, "Erro ao carregar imagem.", Toast.LENGTH_SHORT).show();
btnGuardar.setEnabled(true);
});
}
private void saveData(String name, String specialty, String gender, String horario, String photoUrl) {
WriteBatch batch = db.batch();
Map<String, Object> updates = new HashMap<>();
updates.put("id", currentUserId);
updates.put("nome_completo", name);
updates.put("nome", name); // Compatibilidade com outras partes da app
updates.put("especialidade", specialty);
updates.put("sexo", gender);
updates.put("horario", horario);
updates.put("tipo", "medico");
if (photoUrl != null) {
updates.put("foto_url", photoUrl);
}
DocumentReference userRef = db.collection("utilizadores").document(currentUserId);
DocumentReference medicoRef = db.collection("medicos").document(currentUserId);
batch.set(userRef, updates, SetOptions.merge());
batch.set(medicoRef, updates, SetOptions.merge());
batch.commit()
.addOnSuccessListener(aVoid -> {
// Atualizar cache local para refletir mudanças instantaneamente na MainActivity
getSharedPreferences("SessaoMedico", MODE_PRIVATE)
.edit()
.putString("nome_medico", name)
.apply();
Toast.makeText(this, "Dados atualizados com sucesso!", Toast.LENGTH_SHORT).show();
setResult(RESULT_OK);
finish();
})
.addOnFailureListener(e -> {
Log.e("EditarPerfil", "Erro ao guardar dados: " + e.getMessage());
Toast.makeText(this, "Erro ao guardar: " + e.getMessage(), Toast.LENGTH_SHORT).show();
btnGuardar.setEnabled(true);
});
}
private void showTimePicker(TextInputEditText editText) { private void showTimePicker(TextInputEditText editText) {
Calendar calendar = Calendar.getInstance(); Calendar c = Calendar.getInstance();
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog(this, (view, hour, minute) -> {
(view, hourOfDay, minuteOfHour) -> { editText.setText(String.format(Locale.getDefault(), "%02d:%02d", hour, minute));
String time = String.format(Locale.getDefault(), "%02d:%02d", hourOfDay, minuteOfHour); }, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true).show();
editText.setText(time);
}, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true);
timePickerDialog.show();
} }
private String getStringFromDoc(com.google.firebase.firestore.DocumentSnapshot doc, String field) { private void carregarDados() {
Object val = doc.get(field); db.collection("medicos").document(currentUserId).get().addOnSuccessListener(doc -> {
return val != null ? String.valueOf(val) : null; if (doc.exists()) {
try {
if (nameEditText != null) nameEditText.setText(doc.getString("nome_completo"));
if (specialtyEditText != null) specialtyEditText.setText(doc.getString("especialidade"));
if (emailEditText != null) emailEditText.setText(doc.getString("email"));
String sexo = doc.getString("sexo");
if (sexo != null && rgGender != null) {
if (sexo.equalsIgnoreCase("Masculino")) rgGender.check(R.id.rb_masculino);
else if (sexo.equalsIgnoreCase("Feminino")) rgGender.check(R.id.rb_feminino);
else if (sexo.equalsIgnoreCase("Outro")) rgGender.check(R.id.rb_outro);
}
String horario = doc.getString("horario");
if (horario != null && horario.contains(" - ")) {
String[] parts = horario.split(" - ");
if (parts.length == 2) {
horarioInicioEditText.setText(parts[0]);
horarioFimEditText.setText(parts[1]);
}
}
currentPhotoUrl = doc.getString("foto_url");
if (currentPhotoUrl != null && !currentPhotoUrl.isEmpty() && imgPerfil != null) {
Glide.with(this).load(currentPhotoUrl).circleCrop().into(imgPerfil);
}
} catch (Exception ignored) {}
}
});
}
private void validarEGuardar() {
String name = nameEditText.getText().toString().trim();
if (name.isEmpty()) { nameEditText.setError("Obrigatório"); return; }
btnGuardar.setEnabled(false);
if (selectedImageUri != null) {
uploadImage(name);
} else {
saveToFirestore(name, currentPhotoUrl);
}
}
private void uploadImage(String name) {
StorageReference ref = storage.getReference().child("perfil_medicos/" + currentUserId + ".jpg");
ref.putFile(selectedImageUri).addOnSuccessListener(task -> {
ref.getDownloadUrl().addOnSuccessListener(uri -> saveToFirestore(name, uri.toString()));
}).addOnFailureListener(e -> {
btnGuardar.setEnabled(true);
Toast.makeText(this, "Erro foto", Toast.LENGTH_SHORT).show();
});
}
private void saveToFirestore(String name, String photoUrl) {
String gender = "";
if (rgGender != null) {
int sid = rgGender.getCheckedRadioButtonId();
if (sid == R.id.rb_masculino) gender = "Masculino";
else if (sid == R.id.rb_feminino) gender = "Feminino";
else if (sid == R.id.rb_outro) gender = "Outro";
}
Map<String, Object> map = new HashMap<>();
map.put("nome_completo", name);
map.put("especialidade", specialtyEditText.getText().toString().trim());
map.put("email", emailEditText.getText().toString().trim());
map.put("sexo", gender);
String h = horarioInicioEditText.getText().toString() + " - " + horarioFimEditText.getText().toString();
map.put("horario", h);
if (photoUrl != null) map.put("foto_url", photoUrl);
com.google.firebase.firestore.WriteBatch batch = db.batch();
batch.set(db.collection("medicos").document(currentUserId), map, com.google.firebase.firestore.SetOptions.merge());
batch.set(db.collection("utilizadores").document(currentUserId), map, com.google.firebase.firestore.SetOptions.merge());
batch.commit().addOnSuccessListener(aVoid -> {
Toast.makeText(this, "Perfil Atualizado!", Toast.LENGTH_SHORT).show();
finish();
}).addOnFailureListener(e -> {
btnGuardar.setEnabled(true);
Toast.makeText(this, "Erro ao gravar", Toast.LENGTH_SHORT).show();
});
} }
} }

View File

@@ -109,6 +109,7 @@ public class MainActivity extends AppCompatActivity
layTop = findViewById(R.id.lay_top); layTop = findViewById(R.id.lay_top);
tvGreetingMain = findViewById(R.id.tv_greeting_main); tvGreetingMain = findViewById(R.id.tv_greeting_main);
imgPerfilHeader = findViewById(R.id.img_perfil_header);
// Carregar nome da sessão local para exibir INSTANTANEAMENTE // Carregar nome da sessão local para exibir INSTANTANEAMENTE
String cachedName = getSharedPreferences("SessaoMedico", MODE_PRIVATE).getString("nome_medico", ""); String cachedName = getSharedPreferences("SessaoMedico", MODE_PRIVATE).getString("nome_medico", "");
@@ -209,6 +210,12 @@ public class MainActivity extends AppCompatActivity
if (imgPerfilMain != null) { if (imgPerfilMain != null) {
imgPerfilMain.setOnClickListener(v -> abrirEditarPerfil()); imgPerfilMain.setOnClickListener(v -> abrirEditarPerfil());
} }
if (imgPerfilHeader != null) {
imgPerfilHeader.setOnClickListener(v -> {
viewPerfil.setVisibility(View.VISIBLE);
viewPerfil.bringToFront();
});
}
if (btnLogout != null) { if (btnLogout != null) {
btnLogout.setOnClickListener(v -> { btnLogout.setOnClickListener(v -> {
@@ -219,6 +226,12 @@ public class MainActivity extends AppCompatActivity
}); });
} }
// Setup FAB
com.google.android.material.floatingactionbutton.FloatingActionButton fabAdd = findViewById(R.id.fab_add_consulta);
if (fabAdd != null) {
fabAdd.setOnClickListener(v -> showScheduleAppointmentDialog());
}
// Setup BottomNavigation // Setup BottomNavigation
BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation); BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
bottomNav.setSelectedItemId(R.id.nav_agenda); bottomNav.setSelectedItemId(R.id.nav_agenda);
@@ -229,32 +242,29 @@ public class MainActivity extends AppCompatActivity
if (viewAceites != null) if (viewAceites != null)
viewAceites.setVisibility(View.GONE); viewAceites.setVisibility(View.GONE);
layTop.setVisibility(View.GONE); layTop.setVisibility(View.GONE);
if (fabAdd != null) fabAdd.setVisibility(View.GONE); // Default hidden
if (item.getItemId() == R.id.nav_agenda) { if (item.getItemId() == R.id.nav_perfil) {
viewPerfil.setVisibility(View.VISIBLE);
viewPerfil.bringToFront();
return true;
} else if (item.getItemId() == R.id.nav_agenda) {
viewAgenda.setVisibility(View.VISIBLE); viewAgenda.setVisibility(View.VISIBLE);
layTop.setVisibility(View.VISIBLE); layTop.setVisibility(View.VISIBLE);
if (fabAdd != null) fabAdd.setVisibility(View.VISIBLE);
return true; return true;
} else if (item.getItemId() == R.id.nav_pacientes) { } else if (item.getItemId() == R.id.nav_pacientes) {
viewPacientes.setVisibility(View.VISIBLE); viewPacientes.setVisibility(View.VISIBLE);
return true; if (fabAdd != null) fabAdd.setVisibility(View.VISIBLE);
} else if (item.getItemId() == R.id.nav_perfil) {
viewPerfil.setVisibility(View.VISIBLE);
return true; return true;
} else if (item.getItemId() == R.id.nav_aceites) { } else if (item.getItemId() == R.id.nav_aceites) {
if (viewAceites != null) if (viewAceites != null) viewAceites.setVisibility(View.VISIBLE);
viewAceites.setVisibility(View.VISIBLE);
updateHistoryDateDisplay(); updateHistoryDateDisplay();
return true; return true;
} }
return false; return false;
}); });
// Setup FAB
com.google.android.material.floatingactionbutton.FloatingActionButton fabAdd = findViewById(R.id.fab_add_consulta);
if (fabAdd != null) {
fabAdd.setOnClickListener(v -> showScheduleAppointmentDialog());
}
// Load Initial Data // Load Initial Data
loadUtilizadores(); loadUtilizadores();
loadPerfilMedico(); loadPerfilMedico();
@@ -264,8 +274,9 @@ public class MainActivity extends AppCompatActivity
loadConsultasAgendaForDate(today); loadConsultasAgendaForDate(today);
updateHistoryDateDisplay(); updateHistoryDateDisplay();
} catch (Exception e) { } catch (Throwable t) {
Toast.makeText(this, "Erro Init: " + e.getMessage(), Toast.LENGTH_LONG).show(); Toast.makeText(this, "Erro Crítico: " + t.toString(), Toast.LENGTH_LONG).show();
Log.e("MainActivity", "ERRO NO ONCREATE", t);
} }
} }
@@ -387,14 +398,11 @@ public class MainActivity extends AppCompatActivity
} }
private void abrirEditarPerfil() { private void abrirEditarPerfil() {
Log.d("MainActivity", "A tentar abrir EditarPerfilActivity");
Toast.makeText(this, "A abrir o seu perfil...", Toast.LENGTH_SHORT).show();
try { try {
Intent intent = new Intent(MainActivity.this, EditarPerfilActivity.class); Intent intent = new Intent(this, EditarPerfilActivity.class);
startActivity(intent); startActivity(intent);
} catch (Exception e) { } catch (Throwable t) {
Toast.makeText(this, "Erro ao abrir: " + e.getMessage(), Toast.LENGTH_LONG).show(); Toast.makeText(this, "Erro ao abrir ecrã: " + t.toString(), Toast.LENGTH_LONG).show();
Log.e("MainActivity", "Erro navegação: " + e.getMessage());
} }
} }
@@ -645,13 +653,22 @@ public class MainActivity extends AppCompatActivity
tvHorario.setText("Horário: " + (horario != null && !horario.isEmpty() ? horario : "--")); tvHorario.setText("Horário: " + (horario != null && !horario.isEmpty() ? horario : "--"));
String fotoUrl = doc.getString("foto_url"); String fotoUrl = doc.getString("foto_url");
if (fotoUrl != null && !fotoUrl.isEmpty() && imgPerfilMain != null) { if (fotoUrl != null && !fotoUrl.isEmpty()) {
com.bumptech.glide.Glide.with(this) if (imgPerfilMain != null) {
com.bumptech.glide.Glide.with(MainActivity.this)
.load(fotoUrl) .load(fotoUrl)
.placeholder(R.drawable.ic_user) .placeholder(R.drawable.ic_user)
.circleCrop() .circleCrop()
.into(imgPerfilMain); .into(imgPerfilMain);
} }
if (imgPerfilHeader != null) {
com.bumptech.glide.Glide.with(MainActivity.this)
.load(fotoUrl)
.placeholder(R.drawable.ic_user)
.circleCrop()
.into(imgPerfilHeader);
}
}
} }
private void showScheduleAppointmentDialog() { private void showScheduleAppointmentDialog() {

View File

@@ -25,6 +25,8 @@
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:clipToPadding="false"
android:paddingBottom="80dp"
app:layout_constraintTop_toBottomOf="@id/btn_sair_detalhe" app:layout_constraintTop_toBottomOf="@id/btn_sair_detalhe"
app:layout_constraintBottom_toBottomOf="parent"> app:layout_constraintBottom_toBottomOf="parent">

View File

@@ -1,177 +1,275 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fillViewport="true" android:background="@color/surface_color"
android:background="@color/background_color"> tools:context=".EditarPerfilActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
app:elevation="0dp">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:navigationIcon="@drawable/ic_arrow_back"
app:navigationIconTint="?attr/colorPrimary"
app:title="Editar Perfil"
app:titleCentered="true"
app:titleTextAppearance="@style/TextAppearance.MaterialComponents.Headline6"
app:titleTextColor="?attr/colorPrimary" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:paddingTop="32dp" android:padding="20dp">
android:paddingBottom="40dp"
android:paddingHorizontal="24dp">
<ImageButton <!-- Profile Picture Section -->
android:id="@+id/btn_voltar" <FrameLayout
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_arrow_back"
android:background="?attr/selectableItemBackgroundBorderless"
app:tint="?attr/colorPrimary"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Editar Dados Pessoais"
android:textSize="28sp"
android:fontFamily="sans-serif-black"
android:textColor="@color/text_primary"
android:layout_marginTop="24dp"
android:layout_marginBottom="32dp"/>
<RelativeLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center"
android:layout_marginTop="16dp"
android:layout_marginBottom="32dp"> android:layout_marginBottom="32dp">
<com.google.android.material.card.MaterialCardView
android:layout_width="130dp"
android:layout_height="130dp"
app:cardCornerRadius="65dp"
app:cardElevation="4dp"
app:strokeColor="?attr/colorPrimary"
app:strokeWidth="3dp">
<com.google.android.material.imageview.ShapeableImageView <com.google.android.material.imageview.ShapeableImageView
android:id="@+id/img_perfil_edit" android:id="@+id/img_perfil_edit"
android:layout_width="120dp" android:layout_width="match_parent"
android:layout_height="120dp" android:layout_height="match_parent"
android:src="@drawable/ic_user"
android:padding="2dp"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/ic_user"
app:shapeAppearanceOverlay="@style/CircleImageView" /> app:shapeAppearanceOverlay="@style/CircleImageView" />
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.floatingactionbutton.FloatingActionButton <com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_edit_photo" android:id="@+id/fab_edit_photo"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignEnd="@id/img_perfil_edit" android:layout_gravity="bottom|end"
android:layout_alignBottom="@id/img_perfil_edit" android:layout_margin="4dp"
android:src="@drawable/ic_camera" app:fabCustomSize="40dp"
app:fabSize="mini" app:srcCompat="@drawable/ic_camera"
app:backgroundTint="?attr/colorPrimary"
app:tint="@color/white" app:tint="@color/white"
android:contentDescription="Editar foto"/> app:backgroundTint="?attr/colorPrimary" />
</RelativeLayout> </FrameLayout>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="24dp"
app:cardElevation="2dp"
app:cardBackgroundColor="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Informações Básicas"
android:textColor="?attr/colorPrimary"
android:textStyle="bold"
android:textSize="14sp"
android:layout_marginBottom="16dp"/>
<!-- Nome -->
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> android:hint="Nome Completo"
app:startIconDrawable="@drawable/ic_user"
app:boxCornerRadiusBottomEnd="12dp"
app:boxCornerRadiusBottomStart="12dp"
app:boxCornerRadiusTopEnd="12dp"
app:boxCornerRadiusTopStart="12dp">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_name" android:id="@+id/edit_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Nome" android:inputType="textPersonName" />
android:inputType="textPersonName"
android:imeOptions="actionNext"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<!-- Especialidade -->
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="16dp" android:layout_marginBottom="16dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> android:hint="Especialidade Médica"
app:startIconDrawable="@drawable/ic_nav_pacientes"
app:boxCornerRadiusBottomEnd="12dp"
app:boxCornerRadiusBottomStart="12dp"
app:boxCornerRadiusTopEnd="12dp"
app:boxCornerRadiusTopStart="12dp">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_specialty" android:id="@+id/edit_specialty"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Especialidade" android:inputType="text" />
android:inputType="text"
android:imeOptions="actionNext"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <TextView
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu" android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="16dp" android:text="Género"
android:hint="Sexo"> android:textColor="?attr/colorPrimary"
android:textStyle="bold"
android:textSize="14sp"
android:layout_marginBottom="8dp"/>
<AutoCompleteTextView <RadioGroup
android:id="@+id/edit_gender" android:id="@+id/rg_gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:layout_marginBottom="16dp"> android:layout_marginBottom="16dp">
<com.google.android.material.textfield.TextInputLayout <RadioButton
android:layout_width="0dp" android:id="@+id/rb_masculino"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:text="Masculino"
android:layout_marginEnd="8dp" android:buttonTint="?attr/colorPrimary"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"> android:layout_marginEnd="16dp"/>
<com.google.android.material.textfield.TextInputEditText <RadioButton
android:id="@+id/edit_horario_inicio" android:id="@+id/rb_feminino"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="?attr/colorPrimary"
android:text="Feminino"
android:layout_marginEnd="16dp"/>
<RadioButton
android:id="@+id/rb_outro"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="?attr/colorPrimary"
android:text="Outro"/>
</RadioGroup>
<!-- Email -->
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Início" android:layout_marginBottom="24dp"
android:focusable="false" android:hint="Email de Contacto"
android:clickable="true" app:startIconDrawable="@drawable/ic_nav_contactos"
android:inputType="none" /> app:boxCornerRadiusBottomEnd="12dp"
</com.google.android.material.textfield.TextInputLayout> app:boxCornerRadiusBottomStart="12dp"
app:boxCornerRadiusTopEnd="12dp"
<com.google.android.material.textfield.TextInputLayout app:boxCornerRadiusTopStart="12dp">
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="8dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_horario_fim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Fim"
android:focusable="false"
android:clickable="true"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="32dp"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_email" android:id="@+id/edit_email"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:enabled="false" android:inputType="textEmailAddress"
android:hint="Email (Não editável)" android:enabled="false" />
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Horário de Disponibilidade"
android:textColor="?attr/colorPrimary"
android:textStyle="bold"
android:textSize="14sp"
android:layout_marginBottom="16dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="false">
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="8dp"
android:hint="Início"
app:startIconDrawable="@drawable/ic_calendar"
app:boxCornerRadiusBottomEnd="12dp"
app:boxCornerRadiusBottomStart="12dp"
app:boxCornerRadiusTopEnd="12dp"
app:boxCornerRadiusTopStart="12dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_horario_inicio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="true" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="8dp"
android:hint="Fim"
app:boxCornerRadiusBottomEnd="12dp"
app:boxCornerRadiusBottomStart="12dp"
app:boxCornerRadiusTopEnd="12dp"
app:boxCornerRadiusTopStart="12dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_horario_fim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="true" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/btn_guardar_alteracoes" android:id="@+id/btn_guardar_alteracoes"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:text="GUARDAR ALTERAÇÕES" android:layout_marginTop="32dp"
android:textSize="15sp" android:layout_marginBottom="40dp"
android:text="Guardar Alterações"
android:textAllCaps="false"
android:textSize="16sp"
android:textStyle="bold" android:textStyle="bold"
app:cornerRadius="30dp" app:cornerRadius="16dp"
app:backgroundTint="?attr/colorPrimary" app:elevation="4dp" />
android:textColor="@color/white"/>
</LinearLayout> </LinearLayout>
</ScrollView> </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -17,14 +17,33 @@
android:background="@drawable/bg_gradient_header" android:background="@drawable/bg_gradient_header"
android:elevation="12dp"> android:elevation="12dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView <TextView
android:id="@+id/tv_greeting_main" android:id="@+id/tv_greeting_main"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:text="Olá" android:text="Olá"
android:textSize="38sp" android:textSize="32sp"
android:fontFamily="sans-serif-black" android:fontFamily="sans-serif-black"
android:textColor="@color/white"/> android:textColor="@color/white"/>
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/img_perfil_header"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_user"
android:padding="2dp"
android:scaleType="centerCrop"
android:background="@color/white"
app:shapeAppearanceOverlay="@style/CircleImageView" />
</RelativeLayout>
</LinearLayout> </LinearLayout>
<FrameLayout <FrameLayout

View File

@@ -653,7 +653,7 @@ code + .copy-button {
<script type="text/javascript"> <script type="text/javascript">
function configurationCacheProblems() { return ( function configurationCacheProblems() { return (
// begin-report-data // begin-report-data
{"diagnostics":[{"problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","problemDetails":"This is scheduled to be removed in Gradle 10.","documentationLink":"https://docs.gradle.org/9.4.1/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","locations":[{"path":"/Users/230405/Desktop/med Cuida+/settings.gradle","line":13}],"solutions":["Use assignment ('url = <value>') instead."]},{"problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","problemDetails":"This is scheduled to be removed in Gradle 10.","documentationLink":"https://docs.gradle.org/9.4.1/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","locations":[{"path":"/Users/230405/Desktop/med Cuida+/app/build.gradle","line":7}],"solutions":["Use assignment ('namespace = <value>') instead."]},{"problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","problemDetails":"This is scheduled to be removed in Gradle 10.","documentationLink":"https://docs.gradle.org/9.4.1/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","locations":[{"path":"/Users/230405/Desktop/med Cuida+/app/build.gradle","line":34}],"solutions":["Use assignment ('viewBinding = <value>') instead."]}],"problemsReport":{"totalProblemCount":3,"buildName":"Cuida","requestedTasks":"","documentationLink":"https://docs.gradle.org/9.4.1/userguide/reporting_problems.html","summaries":[]}} {"diagnostics":[{"problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","problemDetails":"This is scheduled to be removed in Gradle 10.","documentationLink":"https://docs.gradle.org/9.4.1/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","locations":[{"path":"/Users/230405/Desktop/med Cuida+/settings.gradle","line":13}],"solutions":["Use assignment ('url = <value>') instead."]},{"problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","problemDetails":"This is scheduled to be removed in Gradle 10.","documentationLink":"https://docs.gradle.org/9.4.1/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","locations":[{"path":"/Users/230405/Desktop/med Cuida+/app/build.gradle","line":7}],"solutions":["Use assignment ('namespace = <value>') instead."]},{"problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","problemDetails":"This is scheduled to be removed in Gradle 10.","documentationLink":"https://docs.gradle.org/9.4.1/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","locations":[{"path":"/Users/230405/Desktop/med Cuida+/app/build.gradle","line":34}],"solutions":["Use assignment ('viewBinding = <value>') instead."]}],"problemsReport":{"totalProblemCount":3,"buildName":"Cuida","requestedTasks":":app:assembleDebug","documentationLink":"https://docs.gradle.org/9.4.1/userguide/reporting_problems.html","summaries":[]}}
// end-report-data // end-report-data
);} );}
</script> </script>