Correção de bugs

This commit is contained in:
2026-03-18 10:37:27 +00:00
parent 347b916c53
commit 53c5839750
77 changed files with 4921 additions and 1166 deletions

View File

@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg_tech_gradient"
android:background="@color/bg_dinamico"
android:padding="24dp">
<ImageView
@@ -12,7 +12,7 @@
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@android:drawable/ic_menu_close_clear_cancel"
app:tint="@color/white"
app:tint="@color/texto_dinamico"
android:layout_marginBottom="24dp" />
<TextView
@@ -21,7 +21,7 @@
android:text="Nova Transação"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="@color/white"
android:textColor="@color/texto_dinamico"
android:layout_marginBottom="32dp"/>
<EditText
@@ -30,7 +30,7 @@
android:layout_height="wrap_content"
android:hint="Valor (€)"
android:textColorHint="#B0BEC5"
android:textColor="@color/white"
android:textColor="@color/texto_dinamico"
android:inputType="numberDecimal"
android:backgroundTint="@color/tech_accent_cyan"
android:textSize="20sp"
@@ -40,22 +40,51 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Categoria"
android:textColor="#B0BEC5"
android:textColor="@color/texto_dinamico"
android:textSize="14sp"
android:layout_marginBottom="8dp"/>
<Spinner
android:id="@+id/spinnerCategoria"
<TextView
android:id="@+id/txtCategoriaTransacao"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="Selecionar Categoria..."
android:textColor="@color/texto_dinamico"
android:textSize="16sp"
android:gravity="center_vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:background="@drawable/bg_card_tech"
android:layout_marginBottom="40dp"/> <Button
android:id="@+id/btnGuardar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Guardar Transação"
android:textColor="@color/black"
android:padding="12dp"
android:textStyle="bold"
app:backgroundTint="@color/tech_accent_cyan"/>
android:layout_marginBottom="24dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Descrição (Opcional)"
android:textColor="@color/texto_dinamico"
android:textSize="14sp"
android:layout_marginBottom="8dp"/>
<EditText
android:id="@+id/editDescricaoTransacao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_card_tech"
android:textColor="@color/texto_dinamico"
android:padding="16dp"
android:hint="Ex: Jantar, Uber, Conta da luz..."
android:textColorHint="?android:attr/textColorSecondary"
android:inputType="textCapSentences"
android:layout_marginBottom="40dp"/>
<Button
android:id="@+id/btnGuardar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Guardar Transação"
android:textColor="@color/black"
android:padding="12dp"
android:textStyle="bold"
app:backgroundTint="@color/tech_accent_cyan"/>
</LinearLayout>

View File

@@ -5,32 +5,34 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp"
android:background="@color/fundo_app"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="32dp">
android:background="@color/fundo_app">
<TextView
android:id="@+id/btnVoltarDefinicoes"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="←"
android:textColor="@color/texto_principal"
android:textSize="32sp"
android:textStyle="bold"
android:paddingEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"/>
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="32dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Definições"
android:textColor="@color/texto_principal"
android:textSize="28sp"
android:textStyle="bold"/>
</LinearLayout>
<TextView
android:id="@+id/btnVoltarDefinicoes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="←"
android:textColor="@color/texto_principal"
android:textSize="32sp"
android:textStyle="bold"
android:paddingEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Definições"
android:textColor="@color/texto_principal"
android:textSize="28sp"
android:textStyle="bold"/>
</LinearLayout>
<TextView
android:id="@+id/btnEditarPerfil"
@@ -55,6 +57,17 @@
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/linha_separadora" />
<Switch
android:id="@+id/switchBiometria"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Bloqueio por Biometria"
android:textColor="@color/texto_principal"
android:textSize="18sp"
android:paddingVertical="16dp" />
<View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/linha_separadora" />
<Switch
android:id="@+id/switchNotificacoes"
android:layout_width="match_parent"
@@ -87,4 +100,18 @@
android:textStyle="bold"
android:padding="16dp"
app:cornerRadius="8dp"
android:backgroundTint="#FF1744" /> </LinearLayout>
android:backgroundTint="#424242" />
<Button
android:id="@+id/btnEliminarConta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Apagar Conta e Dados"
android:textColor="#FFFFFF"
android:textStyle="bold"
android:padding="16dp"
android:layout_marginTop="12dp"
app:cornerRadius="8dp"
android:backgroundTint="#FF1744" />
</LinearLayout>

View File

@@ -5,48 +5,50 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="24dp"
android:background="#1A202C"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="40dp">
android:background="@color/bg_dinamico">
<TextView
android:id="@+id/btnVoltarEditarPerfil"
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="←"
android:textColor="#FFFFFF"
android:textSize="32sp"
android:textStyle="bold"
android:paddingEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"/>
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="40dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Editar Perfil"
android:textColor="#FFFFFF"
android:textSize="28sp"
android:textStyle="bold"/>
</LinearLayout>
<TextView
android:id="@+id/btnVoltarEditarPerfil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="←"
android:textColor="@color/texto_dinamico"
android:textSize="32sp"
android:textStyle="bold"
android:paddingEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Editar Perfil"
android:textColor="@color/texto_dinamico"
android:textSize="28sp"
android:textStyle="bold"/>
</LinearLayout>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/imgFotoPerfil"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/bg_circle_icon"
android:src="@android:drawable/ic_menu_camera"
app:tint="#FFFFFF"
android:padding="24dp"
android:scaleType="centerCrop"
android:layout_marginBottom="32dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nome"
android:textColor="#B0BEC5"
android:textColor="@color/texto_dinamico"
android:textSize="14sp"
android:layout_marginBottom="8dp"/>
@@ -65,7 +67,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email"
android:textColor="#B0BEC5"
android:textColor="@color/texto_dinamico"
android:textSize="14sp"
android:layout_marginBottom="8dp"/>
@@ -90,4 +92,5 @@
android:textStyle="bold"
android:padding="16dp"
app:cornerRadius="8dp"
android:backgroundTint="#00E676" /> </LinearLayout>
android:backgroundTint="#00E676" />
</LinearLayout>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:background="@color/bg_dinamico"
android:padding="32dp">
<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/ic_carteira_tech"
android:layout_marginBottom="24dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Finzora"
android:textColor="@color/texto_principal"
android:textSize="32sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="O teu gestor financeiro seguro."
android:textColor="?android:attr/textColorSecondary"
android:textSize="16sp"
android:layout_marginBottom="48dp"/>
<Button
android:id="@+id/btnDesbloquearApp"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="Desbloquear"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#1A202C"
android:backgroundTint="#00E676"
app:cornerRadius="12dp"/>
</LinearLayout>

View File

@@ -18,14 +18,15 @@
<ImageView
android:id="@+id/imgLogo"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:background="@drawable/bg_circle_icon"
android:padding="8dp"
android:src="@android:drawable/ic_menu_gallery"
app:tint="@color/white" />
app:tint="@color/white"
android:scaleType="centerCrop" />
<LinearLayout
android:layout_width="wrap_content"
@@ -52,6 +53,30 @@
android:textSize="14sp"/>
</LinearLayout>
<ImageView
android:id="@+id/btnAbrirDefinicoes"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_toStartOf="@id/btnExportarPDF"
android:layout_centerVertical="true"
android:layout_marginEnd="15dp"
android:src="@drawable/ic_settings_pap"
app:tint="@color/tech_accent_cyan"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="Definições" />
<ImageView
android:id="@+id/btnExportarPDF"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_toStartOf="@id/btnSair"
android:layout_centerVertical="true"
android:layout_marginEnd="15dp"
android:src="@android:drawable/ic_menu_save"
app:tint="@color/tech_accent_cyan"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="Exportar Relatório" />
<Button
android:id="@+id/btnSair"
android:layout_width="wrap_content"
@@ -110,16 +135,4 @@
app:tint="@color/black"
app:elevation="6dp"/>
<ImageView
android:id="@+id/btnAbrirDefinicoes"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_gravity="bottom|start"
android:layout_margin="24dp"
android:padding="12dp"
android:src="@drawable/ic_settings_pap"
app:tint="@color/texto_principal"
android:elevation="6dp"
android:background="?attr/selectableItemBackgroundBorderless"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/fundo_app"
android:padding="24dp"
tools:context=".NovaPasswordActivity">
<ImageView
android:id="@+id/imgTechLock"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="40dp"
android:padding="8dp"
android:src="@android:drawable/ic_secure"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tint="@color/tech_accent_cyan" />
<TextView
android:id="@+id/tvTechTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="NOVA PALAVRA-PASSE"
android:textColor="@color/white"
android:textSize="26sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/imgTechLock" />
<TextView
android:id="@+id/tvTechSubtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Verificação de segurança ativa.\nDefine a tua nova senha de acesso."
android:textAlignment="center"
android:textColor="#B0BEC5"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTechTitle" />
<LinearLayout
android:id="@+id/linearLayoutInputs"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTechSubtitle">
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:hintEnabled="false">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/editNovaPass"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/bg_tech_input"
android:hint="Nova palavra-passe"
android:textColorHint="#546E7A"
android:inputType="textPassword"
android:padding="16dp"
android:textColor="@color/white"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:hintEnabled="false">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/editConfirmaNovaPass"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@drawable/bg_tech_input"
android:hint="Confirmar palavra-passe"
android:textColorHint="#546E7A"
android:inputType="textPassword"
android:padding="16dp"
android:textColor="@color/white"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<Button
android:id="@+id/btnGuardarNovaPass"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_marginTop="16dp"
android:backgroundTint="@color/tech_accent_cyan"
android:text="GUARDAR PALAVRA-PASSE"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold"
app:cornerRadius="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/linearLayoutInputs" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/bg_dinamico"
android:padding="24dp">
<ImageView
android:id="@+id/btnFecharDetalhe"
android:layout_width="32dp"
android:layout_height="32dp"
android:src="@android:drawable/ic_menu_close_clear_cancel"
app:tint="@color/texto_dinamico"
android:background="?attr/selectableItemBackgroundBorderless"
android:layout_marginBottom="16dp"/>
<ImageView
android:id="@+id/imgDetalheIcone"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/bg_circle_icon"
android:src="@android:drawable/ic_menu_agenda"
app:tint="#FFFFFF"
android:padding="16dp"
android:layout_marginBottom="12dp"/>
<TextView
android:id="@+id/tvDetalheTitulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Título da Transação"
android:textColor="@color/texto_dinamico"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"/>
<TextView
android:id="@+id/tvDetalheValor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="- 13,38 €"
android:textColor="@color/texto_dinamico"
android:textSize="36sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"/>
<TextView
android:id="@+id/tvDetalheDataHora"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="12/04, 10:14"
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp"
android:layout_marginBottom="32dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#2D3748"
android:padding="16dp"
android:layout_marginBottom="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="16dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Categoria"
android:textColor="#A0AEC0"
android:textStyle="bold"/>
<TextView
android:id="@+id/tvDetalheCategoria"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Entretenimento"
android:textColor="#00E676"
android:textStyle="bold"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Descrição"
android:textColor="#A0AEC0"
android:textStyle="bold"/>
<TextView
android:id="@+id/tvDetalheDescricao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Subscrição Mensal"
android:textColor="#FFFFFF"
android:textAlignment="viewEnd"
android:maxWidth="200dp"/>
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/btnEditarTransacao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Editar Transação"
android:textColor="#FFFFFF"
android:backgroundTint="#00B8D4"
android:textStyle="bold"
android:padding="12dp"
app:cornerRadius="8dp"
android:layout_marginBottom="8dp"/>
<Button
android:id="@+id/btnApagarTransacao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Eliminar Transação"
android:textColor="#FFFFFF"
android:backgroundTint="#F56565"
android:textStyle="bold"
android:padding="12dp"
app:cornerRadius="8dp"/>
</LinearLayout>

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:cardBackgroundColor="@color/fundo_cartao"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="24dp"
android:paddingBottom="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginBottom="16dp"
android:text="Selecionar Categoria"
android:textColor="?android:attr/textColorPrimary"
android:textSize="20sp"
android:textStyle="bold" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="350dp"
android:scrollbars="none">
<LinearLayout
android:id="@+id/containerCategorias"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp" />
</ScrollView>
<TextView
android:id="@+id/btnCancelarCategoria"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:gravity="end"
android:padding="12dp"
android:text="CANCELAR"
android:textColor="#F56565"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -24,9 +24,14 @@
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Contactar Suporte" android:textSize="18sp" android:textStyle="bold" android:textColor="#1A202C"/>
</LinearLayout>
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="O seu email" android:background="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp"/>
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Assunto" android:background="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp"/>
<EditText android:layout_width="match_parent" android:layout_height="120dp" android:hint="Descreva o seu problema..." android:background="#F7FAFC" android:padding="16dp" android:gravity="top|start" android:layout_marginBottom="24dp"/>
<EditText android:id="@+id/editEmailSuporte"
android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="O seu email" android:background="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp"/>
<EditText android:id="@+id/editAssunto"
android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Assunto" android:background="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp"/>
<EditText android:id="@+id/editProblema"
android:layout_width="match_parent" android:layout_height="120dp" android:hint="Descreva o seu problema..." android:background="#F7FAFC" android:padding="16dp" android:gravity="top|start" android:layout_marginBottom="24dp"/>
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="end">
<Button android:id="@+id/btnCancelarContacto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cancelar" android:backgroundTint="#FFFFFF" android:textColor="#2D3748" android:layout_marginEnd="8dp"/>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="24dp"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Contactos Finzora"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="?android:attr/textColorPrimary" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="24dp"
android:text="Precisas de ajuda urgente? Fala connosco diretamente."
android:textSize="14sp"
android:textColor="?android:attr/textColorSecondary" />
<!-- 📧 Zona do Email -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="📧"
android:textSize="28sp"
android:layout_marginEnd="16dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email de Suporte"
android:textSize="15sp"
android:textStyle="bold"
android:textColor="?android:attr/textColorPrimary"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="suporte@finzora.pt"
android:textSize="15sp"
android:textColor="#00E676"/>
</LinearLayout>
</LinearLayout>
<!-- 📞 Zona do Telefone -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="📞"
android:textSize="28sp"
android:layout_marginEnd="16dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Linha de Apoio"
android:textSize="15sp"
android:textStyle="bold"
android:textColor="?android:attr/textColorPrimary"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+351 800 123 456"
android:textSize="15sp"
android:textColor="#00E676"/>
</LinearLayout>
</LinearLayout>
<!-- 🕒 Zona do Horário (com fundo suave) -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="24dp"
android:background="#1A888888"
android:padding="12dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="🕒"
android:layout_marginEnd="8dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dias úteis: 09:00 - 18:00"
android:textSize="14sp"
android:textColor="?android:attr/textColorSecondary"/>
</LinearLayout>
<!-- Botão Fechar -->
<TextView
android:id="@+id/btnFecharContactos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="VOLTAR"
android:gravity="end"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold"
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="8dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="24dp"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp"
android:gravity="center">
<!-- Ícone de Lixo gigante no topo -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="🗑️"
android:textSize="40sp"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Eliminar Transação"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="?android:attr/textColorPrimary" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="24dp"
android:gravity="center"
android:text="Tens a certeza que queres apagar esta transação? Esta ação não pode ser desfeita."
android:textSize="14sp"
android:textColor="?android:attr/textColorSecondary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="end">
<TextView
android:id="@+id/btnCancelarEliminar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CANCELAR"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="?android:attr/textColorSecondary"
android:padding="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:layout_marginEnd="16dp"/>
<TextView
android:id="@+id/btnConfirmarEliminar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ELIMINAR"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#FF1744"
android:padding="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="📥 Exportar Dados"
android:textColor="?android:attr/textColorPrimary"
android:textSize="20sp"
android:textStyle="bold" />
<androidx.cardview.widget.CardView
android:id="@+id/btnOpcaoPDF"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
app:cardBackgroundColor="#1A888888"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="📄"
android:textSize="28sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Relatório PDF"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ideal para ler e imprimir"
android:textColor="?android:attr/textColorSecondary"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/btnOpcaoExcel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
app:cardBackgroundColor="#1A888888"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="📊"
android:textSize="28sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ficheiro Excel (.CSV)"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ideal para tabelas e gráficos"
android:textColor="?android:attr/textColorSecondary"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/btnCancelarExportacao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:padding="12dp"
android:text="CANCELAR"
android:textColor="#F56565"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -42,6 +42,12 @@
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Aceda ao separador 'Gráficos' para ver representações visuais dos seus gastos organizados por categoria e período." android:textColor="#718096" android:textSize="13sp"/>
</LinearLayout>
<!-- ⚠️ A NOSSA NOVA FAQ SOBRE OBJETIVOS -->
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/bg_tech_gradient" android:backgroundTint="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp">
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Como funcionam os Objetivos de Poupança?" android:textStyle="bold" android:textColor="#2D3748" android:layout_marginBottom="8dp"/>
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="No separador 'Objetivos', clique no botão azul para criar um alvo (ex: Comprar PS5). A barra de progresso preenche-se automaticamente com base no seu Saldo Total disponível (Receitas - Despesas)." android:textColor="#718096" android:textSize="13sp"/>
</LinearLayout>
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/bg_tech_gradient" android:backgroundTint="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp">
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="O que são as dicas financeiras?" android:textStyle="bold" android:textColor="#2D3748" android:layout_marginBottom="8dp"/>
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="No separador 'Dicas', encontrará recomendações personalizadas baseadas nos seus padrões de gastos para melhorar a sua saúde financeira." android:textColor="#718096" android:textSize="13sp"/>

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:text="🎯 Novo Objetivo"
android:textColor="?android:attr/textColorPrimary"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/editNomeObjetivo"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="16dp"
android:hint="Ex: Comprar PS5"
android:textColor="?android:attr/textColorPrimary"
android:textColorHint="?android:attr/textColorSecondary" />
<EditText
android:id="@+id/editValorObjetivo"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginBottom="24dp"
android:hint="Valor Alvo (Ex: 500.00)"
android:inputType="numberDecimal"
android:textColor="?android:attr/textColorPrimary"
android:textColorHint="?android:attr/textColorSecondary" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="horizontal">
<TextView
android:id="@+id/btnCancelarObjetivo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:padding="12dp"
android:text="CANCELAR"
android:textColor="?android:attr/textColorSecondary"
android:textStyle="bold" />
<Button
android:id="@+id/btnGuardarObjetivo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="#00B8D4"
android:text="GUARDAR"
android:textColor="#FFFFFF"
app:cornerRadius="8dp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="Tipo de Transação"
android:textColor="?android:attr/textColorPrimary"
android:textSize="20sp"
android:textStyle="bold" />
<!-- CARTÃO RECEITA -->
<androidx.cardview.widget.CardView
android:id="@+id/btnTipoReceita"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
app:cardBackgroundColor="#1A888888"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<!-- Ícone Verde Redondo -->
<androidx.cardview.widget.CardView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginEnd="16dp"
app:cardBackgroundColor="#2F855A"
app:cardCornerRadius="20dp"
app:cardElevation="0dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="+"
android:textColor="#FFFFFF"
android:textSize="24sp"
android:textStyle="bold" />
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Receita"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Entrada de dinheiro (Ex: Salário)"
android:textColor="?android:attr/textColorSecondary"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- CARTÃO DESPESA -->
<androidx.cardview.widget.CardView
android:id="@+id/btnTipoDespesa"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
app:cardBackgroundColor="#1A888888"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<!-- Ícone Vermelho Redondo -->
<androidx.cardview.widget.CardView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginEnd="16dp"
app:cardBackgroundColor="#C53030"
app:cardCornerRadius="20dp"
app:cardElevation="0dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="-"
android:textColor="#FFFFFF"
android:textSize="26sp"
android:textStyle="bold" />
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Despesa"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Saída de dinheiro (Ex: Compras)"
android:textColor="?android:attr/textColorSecondary"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/btnCancelarTipo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:padding="12dp"
android:text="CANCELAR"
android:textColor="#F56565"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -42,8 +42,14 @@
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Use os gráficos para visualizar para onde vai o seu dinheiro." android:textColor="#718096" android:textSize="13sp"/>
</LinearLayout>
<!-- ⚠️ A NOSSA NOVA ABA AQUI COMO PASSO 4 -->
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/bg_tech_gradient" android:backgroundTint="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp">
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="4. Siga as dicas personalizadas" android:textStyle="bold" android:textColor="#2D3748" android:layout_marginBottom="8dp"/>
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="4. Crie Objetivos de Poupança" android:textStyle="bold" android:textColor="#2D3748" android:layout_marginBottom="8dp"/>
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Tem um alvo a atingir? Registe-o no separador 'Objetivos'. A Finzora calcula automaticamente o seu progresso com base no seu Saldo Total!" android:textColor="#718096" android:textSize="13sp"/>
</LinearLayout>
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/bg_tech_gradient" android:backgroundTint="#F7FAFC" android:padding="16dp" android:layout_marginBottom="12dp">
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="5. Siga as dicas personalizadas" android:textStyle="bold" android:textColor="#2D3748" android:layout_marginBottom="8dp"/>
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="A Finzora analisa os seus padrões e fornece recomendações úteis." android:textColor="#718096" android:textSize="13sp"/>
</LinearLayout>

View File

@@ -1,395 +1,313 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_tech_gradient"
android:fillViewport="true">
android:background="?android:attr/windowBackground">
<LinearLayout
android:id="@+id/layoutEstadoVazioDicas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp">
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Resumo da Sua Saúde Financeira"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
android:text="📊"
android:textSize="60sp" />
<androidx.cardview.widget.CardView
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Sem dados para analisar"
android:textColor="?android:attr/textColorPrimary"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center"
android:paddingHorizontal="32dp"
android:text="Adiciona transações para receberes conselhos da nossa Inteligência Artificial."
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp" />
</LinearLayout>
<ScrollView
android:id="@+id/layoutConteudoDicas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:padding="16dp"
android:scrollbars="none">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:cardCornerRadius="16dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="4dp">
android:orientation="vertical">
<LinearLayout
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
android:layout_marginBottom="16dp"
app:cardBackgroundColor="?android:attr/colorBackgroundFloating"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="8dp">
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Taxa de Poupança"
android:textColor="@color/white"
android:textStyle="bold"/>
<TextView
android:id="@+id/tvTaxaPoupanca"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0.0%"
android:textColor="#00E676"
android:textStyle="bold"/>
</LinearLayout>
android:text="🤖 Finzora AI Coach"
android:textColor="@color/tech_accent_cyan"
android:textSize="18sp"
android:textStyle="bold" />
<ProgressBar
android:id="@+id/progressPoupanca"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="8dp"
android:max="100"
android:progress="0"
android:progressTint="#00E676"
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/tvRespostaAI"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Olá! Já analisei os teus dados. Pergunta-me qualquer coisa sobre como poupar ou investir."
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/bg_search_bar"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="12dp"
android:paddingVertical="4dp">
<EditText
android:id="@+id/editPerguntaAI"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:hint="Pede uma dica tática..."
android:textColor="?android:attr/textColorPrimary"
android:textColorHint="?android:attr/textColorSecondary"
android:textSize="14sp" />
<ImageButton
android:id="@+id/btnEnviarAI"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@android:drawable/ic_menu_send"
app:tint="@color/tech_accent_cyan" />
</LinearLayout>
<ProgressBar
android:id="@+id/pbCarregandoAI"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="8dp"
android:visibility="gone" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="?android:attr/colorBackgroundFloating"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:baselineAligned="false">
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
android:layout_width="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:background="#1AFFFFFF"
android:padding="12dp"
android:layout_marginEnd="8dp">
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Taxa de Poupança"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" />
<TextView
android:id="@+id/tvTaxaPoupanca"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Receitas"
android:textColor="#B0BEC5"
android:textSize="12sp"/>
android:text="0%"
android:textColor="#00E676"
android:textStyle="bold" />
</LinearLayout>
<ProgressBar
android:id="@+id/progressPoupanca"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="8dp"
android:layout_marginTop="8dp"
android:max="100"
android:progress="0"
android:progressTint="#00E676" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tvDicasReceitas"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="€ 0.00"
android:textColor="#00E676"
android:textStyle="bold"
android:textSize="16sp"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:background="#1AFFFFFF"
android:padding="12dp"
android:layout_marginStart="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Despesas"
android:textColor="#B0BEC5"
android:textSize="12sp"/>
android:textStyle="bold" />
<TextView
android:id="@+id/tvDicasDespesas"
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="€ 0.00"
android:textColor="#FF1744"
android:textStyle="bold"
android:textSize="16sp"/>
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dicas Personalizadas"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<androidx.cardview.widget.CardView
android:id="@+id/cardDica1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="2dp">
<LinearLayout
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvTituloDica1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A calcular..."
android:textColor="#00E676"
android:textStyle="bold"
android:textSize="16sp"/>
<TextView
android:id="@+id/tvDescDica1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="..."
android:textColor="#B0BEC5"
android:layout_marginTop="4dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
android:layout_marginBottom="12dp"
app:cardBackgroundColor="?android:attr/colorBackgroundFloating"
app:cardCornerRadius="16dp"
app:cardElevation="2dp">
<androidx.cardview.widget.CardView
android:id="@+id/cardDica2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="2dp">
<LinearLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvTituloDica1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A Regra 50/30/20 ⚖️"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvDescDica1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="A calcular a tua distribuição de riqueza..."
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvTituloDica2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A analisar gastos..."
android:textColor="#FF1744"
android:textStyle="bold"
android:textSize="16sp"/>
<TextView
android:id="@+id/tvDescDica2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="..."
android:textColor="#B0BEC5"
android:layout_marginTop="4dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
android:layout_marginBottom="12dp"
app:cardBackgroundColor="?android:attr/colorBackgroundFloating"
app:cardCornerRadius="16dp"
app:cardElevation="2dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Distribuição de Gastos"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="2dp">
<TextView
android:id="@+id/tvTituloDica2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Radar de Orçamentos 🎯"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvDescDica2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="A verificar limites..."
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="?android:attr/colorBackgroundFloating"
app:cardCornerRadius="16dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvTituloDica3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ritmo de Gastos 🏃‍♂️"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvDescDica3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="A calcular a tua velocidade de gastos..."
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="Top Despesas"
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/layoutDistribuicao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
</LinearLayout>
</androidx.cardview.widget.CardView>
android:orientation="vertical" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_marginBottom="12dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_idea"
app:tint="@color/white"
android:layout_marginEnd="8dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dicas Rápidas de Economia"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"/>
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="32dp"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="16dp">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@android:drawable/checkbox_on_background"
app:tint="#00E676"
android:layout_marginTop="2dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginStart="12dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Prepare refeições em casa"
android:textColor="@color/white"
android:textStyle="bold"
android:textSize="14sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pode poupar até €200/mês reduzindo refeições fora"
android:textColor="#B0BEC5"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="16dp">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@android:drawable/checkbox_on_background"
app:tint="#00E676"
android:layout_marginTop="2dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginStart="12dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Compare preços antes de comprar"
android:textColor="@color/white"
android:textStyle="bold"
android:textSize="14sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Use apps de comparação para encontrar melhores ofertas"
android:textColor="#B0BEC5"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="16dp">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@android:drawable/checkbox_on_background"
app:tint="#00E676"
android:layout_marginTop="2dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginStart="12dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancele subscrições não utilizadas"
android:textColor="@color/white"
android:textStyle="bold"
android:textSize="14sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reveja streamings, ginásios e apps que paga mas não usa"
android:textColor="#B0BEC5"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@android:drawable/checkbox_on_background"
app:tint="#00E676"
android:layout_marginTop="2dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginStart="12dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Use transportes públicos"
android:textColor="@color/white"
android:textStyle="bold"
android:textSize="14sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Economize em combustível, estacionamento e manutenção"
android:textColor="#B0BEC5"
android:textSize="12sp"
android:layout_marginTop="2dp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</ScrollView>
</ScrollView>
</FrameLayout>

View File

@@ -1,88 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_tech_gradient"
android:fillViewport="true">
android:background="@color/bg_dinamico">
<ScrollView
android:id="@+id/scrollviewGraficos"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:cardBackgroundColor="@color/fundo_cartao"
app:cardCornerRadius="16dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Distribuição de Despesas"
android:textColor="@color/texto_principal"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="16dp"/>
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/pieChartDespesas"
android:layout_width="match_parent"
android:layout_height="300dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:cardBackgroundColor="@color/fundo_cartao"
app:cardCornerRadius="16dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Orçamento vs Gasto"
android:textColor="@color/texto_principal"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="16dp"/>
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/barChartOrcamento"
android:layout_width="match_parent"
android:layout_height="300dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:cardBackgroundColor="@color/fundo_cartao"
app:cardCornerRadius="16dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tendência de Gastos"
android:textColor="@color/texto_principal"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="16dp"/>
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/barChartTendencia"
android:layout_width="match_parent"
android:layout_height="300dp"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</ScrollView>
<LinearLayout
android:id="@+id/layoutEstadoVazioGraficos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
android:gravity="center"
android:visibility="gone"
android:padding="32dp">
<com.airbnb.lottie.LottieAnimationView
android:layout_width="250dp"
android:layout_height="250dp"
app:lottie_rawRes="@raw/anim_grafico_vazio"
app:lottie_autoPlay="true"
app:lottie_loop="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Despesas por Categoria"
android:textColor="@color/white"
android:textSize="18sp"
android:text="À espera de dados! 📊"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginBottom="24dp"
app:cardCornerRadius="16dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="4dp">
<com.github.mikephil.charting.charts.PieChart
android:id="@+id/pieChartDespesas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="12dp"/>
</androidx.cardview.widget.CardView>
android:textColor="@color/texto_principal"
android:layout_marginTop="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Orçamento vs Gastos Reais"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginBottom="24dp"
app:cardCornerRadius="16dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="4dp">
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/barChartOrcamento"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="12dp"/>
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tendência Mensal (Geral)"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginBottom="24dp"
app:cardCornerRadius="16dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="4dp">
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/barChartTendencia"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="12dp"/>
</androidx.cardview.widget.CardView>
android:text="Regista as tuas primeiras transações para veres a magia dos gráficos acontecer."
android:textSize="15sp"
android:textAlignment="center"
android:textColor="?android:attr/textColorSecondary"
android:layout_marginTop="8dp"/>
</LinearLayout>
</ScrollView>
</FrameLayout>

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_dinamico">
<!-- Lista onde vão aparecer os Cofres -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerObjetivos"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:clipToPadding="false"
android:paddingBottom="80dp"/>
<!-- Mensagem quando não há objetivos -->
<LinearLayout
android:id="@+id/layoutObjetivosVazios"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical"
android:gravity="center"
android:visibility="gone">
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_lazer"
app:tint="#A0AEC0"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sem objetivos definidos."
android:textColor="#A0AEC0"
android:textSize="16sp"
android:textStyle="bold"/>
</LinearLayout>
<!-- Botão de Adicionar Objetivo -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fabAdicionarObjetivo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_margin="24dp"
android:src="@android:drawable/ic_input_add"
app:tint="#FFFFFF"
app:backgroundTint="#00B8D4"
app:elevation="6dp"/>
</RelativeLayout>

View File

@@ -1,29 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg_tech_gradient"
android:padding="16dp"
tools:ignore="HardcodedText">
android:background="?android:attr/windowBackground"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Planeamento de Orçamento"
android:textColor="@color/white"
android:textStyle="bold"
android:textColor="?android:attr/textColorPrimary"
android:textSize="18sp"
android:layout_marginBottom="8dp"/>
android:textStyle="bold"
android:layout_marginBottom="12dp"/>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="@color/white">
app:cardBackgroundColor="?android:attr/colorBackgroundFloating"
app:cardCornerRadius="16dp"
app:cardElevation="2dp"
android:layout_marginBottom="16dp">
<LinearLayout
android:layout_width="match_parent"
@@ -31,48 +30,79 @@
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Categoria"
android:textColor="#333333"
android:textStyle="bold"
android:textSize="12sp"/>
<Spinner
android:id="@+id/spinnerOrcamento"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:background="#F5F5F5"
android:layout_marginBottom="12dp"/>
android:orientation="horizontal"
android:baselineAligned="false">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Limite Mensal (€)"
android:textColor="#333333"
android:textStyle="bold"
android:textSize="12sp"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginEnd="8dp">
<EditText
android:id="@+id/editLimite"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#F5F5F5"
android:padding="8dp"
android:inputType="numberDecimal"
android:hint="0.00"
android:textColor="#000000"
android:layout_marginBottom="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Categoria"
android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp"
android:layout_marginBottom="4dp"/>
<TextView
android:id="@+id/txtCategoriaOrcamento"
android:layout_width="match_parent"
android:layout_height="45dp"
android:text="Selecionar..."
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:background="@drawable/bg_coach_input_rect" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginStart="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Limite (€)"
android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp"
android:layout_marginBottom="4dp"/>
<EditText
android:id="@+id/editLimiteOrcamento"
android:layout_width="match_parent"
android:layout_height="45dp"
android:hint="0.00"
android:textColor="?android:attr/textColorPrimary"
android:textColorHint="?android:attr/textColorSecondary"
android:inputType="numberDecimal"
android:backgroundTint="@color/tech_accent_cyan"
android:paddingStart="4dp"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/btnDefinirOrcamento"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="45dp"
android:text="Definir Orçamento"
android:backgroundTint="#0F2027"
android:textColor="@color/white"/>
android:textColor="#1A202C"
android:textStyle="bold"
android:layout_marginTop="16dp"
app:cornerRadius="8dp"
app:backgroundTint="@color/tech_accent_cyan" />
</LinearLayout>
</androidx.cardview.widget.CardView>
@@ -80,14 +110,55 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Orçamentos Ativos"
android:textColor="@color/white"
android:textStyle="bold"
android:textColor="?android:attr/textColorPrimary"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginBottom="8dp"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerOrcamentos"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"/>
android:layout_height="0dp"
android:layout_weight="1">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerOrcamentos"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/layoutEstadoVazioOrcamento"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:visibility="gone"
android:padding="16dp">
<com.airbnb.lottie.LottieAnimationView
android:layout_width="150dp"
android:layout_height="150dp"
app:lottie_rawRes="@raw/anim_vazio"
app:lottie_autoPlay="true"
app:lottie_loop="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sem limites definidos!"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="?android:attr/textColorPrimary"
android:layout_marginTop="8dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Usa o cartão acima para definir objetivos."
android:textSize="14sp"
android:textAlignment="center"
android:textColor="?android:attr/textColorSecondary"
android:layout_marginTop="4dp"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>

View File

@@ -1,14 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/bg_tech_gradient"
android:padding="8dp">
android:background="@color/bg_dinamico">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerTransacoes"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="80dp"/> </LinearLayout>
android:layout_height="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:background="@drawable/bg_search_bar"
android:orientation="horizontal"
android:padding="12dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@android:drawable/ic_menu_search"
app:tint="#A0AEC0" />
<EditText
android:id="@+id/editPesquisar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:background="@android:color/transparent"
android:hint="Pesquisar transação..."
android:textColorHint="#718096"
android:textColor="@color/texto_principal"
android:textSize="14sp"
android:inputType="text"
android:maxLines="1"/>
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerTransacoes"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
android:clipToPadding="false"/>
<LinearLayout
android:id="@+id/layoutEstadoVazio"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:visibility="gone"
android:padding="32dp">
<com.airbnb.lottie.LottieAnimationView
android:layout_width="200dp"
android:layout_height="200dp"
app:lottie_rawRes="@raw/anim_vazio"
app:lottie_autoPlay="true"
app:lottie_loop="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ainda não tens transações!"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/texto_principal"
android:layout_marginTop="16dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clica no botão + para começares a registar os teus movimentos."
android:textSize="14sp"
android:textAlignment="center"
android:textColor="?android:attr/textColorSecondary"
android:layout_marginTop="8dp"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>

View File

@@ -3,10 +3,7 @@
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp"
android:padding="16dp"
android:textSize="16sp"
android:textColor="#FFFFFF"
android:background="#1A202C"
android:ellipsize="end"
android:singleLine="true"/>
android:textColor="@color/texto_principal"
android:background="@color/bg_dinamico" />

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardObjetivo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:cardCornerRadius="16dp"
app:cardElevation="2dp"
app:cardBackgroundColor="?android:attr/colorBackgroundFloating">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imgIconeObjetivo"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_centerVertical="true"
android:src="@drawable/ic_lazer"
app:tint="#00B8D4" />
<TextView
android:id="@+id/tvNomeObjetivo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="12dp"
android:layout_toEndOf="@id/imgIconeObjetivo"
android:layout_toStartOf="@id/layoutBotoesAcao"
android:text="Nome do Objetivo"
android:textColor="?android:attr/textColorPrimary"
android:textSize="18sp"
android:textStyle="bold" />
<!-- Zona dos Botões de Ação -->
<LinearLayout
android:id="@+id/layoutBotoesAcao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:orientation="horizontal">
<!-- ✏️ Novo Botão Editar -->
<ImageView
android:id="@+id/btnEditarObjetivo"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@android:drawable/ic_menu_edit"
app:tint="#ECC94B" />
<!-- 🗑️ Botão Eliminar -->
<ImageView
android:id="@+id/btnEliminarObjetivo"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@android:drawable/ic_menu_delete"
app:tint="#F56565" />
</LinearLayout>
</RelativeLayout>
<TextView
android:id="@+id/tvValoresObjetivo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="Guardado: € 0.00 / Alvo: € 0.00"
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/progressObjetivo"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="8dp"
android:layout_weight="1"
android:max="100"
android:progress="0"
android:progressTint="#00B8D4" />
<TextView
android:id="@+id/tvPercentagemObjetivo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="0%"
android:textColor="#00B8D4"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -3,10 +3,11 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
app:cardCornerRadius="12dp"
app:cardBackgroundColor="#2C5364"
app:cardElevation="2dp">
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
app:cardBackgroundColor="?android:attr/colorBackgroundFloating"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
@@ -18,25 +19,42 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="8dp">
android:gravity="center_vertical">
<ImageView
android:id="@+id/imgIconeOrcamento"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_alimentacao"
app:tint="@color/tech_accent_cyan" />
<TextView
android:id="@+id/tvCatOrcamento"
android:id="@+id/tvCategoriaOrcamento"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="12dp"
android:text="Alimentação"
android:textStyle="bold"
android:textColor="@color/white"
android:textSize="16sp"/>
android:textColor="?android:attr/textColorPrimary"
android:textSize="18sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/btnEliminarOrcamento"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginEnd="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@android:drawable/ic_menu_delete"
app:tint="#F56565" />
<TextView
android:id="@+id/tvValoresOrcamento"
android:id="@+id/tvPercentagemOrcamento"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="€85.50 / €300.00"
android:textColor="#B0BEC5"
android:textSize="14sp"/>
android:text="75%"
android:textColor="@color/tech_accent_cyan"
android:textStyle="bold" />
</LinearLayout>
<ProgressBar
@@ -44,18 +62,18 @@
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="8dp"
android:progressDrawable="@drawable/progress_savings"
android:max="100"
android:progress="50"/>
android:layout_marginTop="16dp"
android:layout_marginBottom="8dp"
android:progress="75"
android:progressDrawable="@drawable/custom_progress_bar" />
<TextView
android:id="@+id/tvRestante"
android:layout_width="wrap_content"
android:id="@+id/tvValoresOrcamento"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Restam €214.50 (72%)"
android:textColor="#90A4AE"
android:text="Gasto: € 150.00 / Limite: € 200.00"
android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp"
android:layout_marginTop="6dp"/>
android:textAlignment="viewEnd" />
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -5,10 +5,9 @@
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
app:cardBackgroundColor="#FFFFFF"
app:cardBackgroundColor="@color/fundo_cartao"
app:cardCornerRadius="12dp"
app:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -36,7 +35,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Descrição"
android:textColor="#1A202C"
android:textColor="@color/texto_principal"
android:textSize="16sp"
android:textStyle="bold" />
@@ -45,7 +44,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data"
android:textColor="#718096"
android:textColor="?android:attr/textColorSecondary"
android:textSize="14sp"
android:layout_marginTop="4dp"/>
</LinearLayout>