This commit is contained in:
2026-04-23 10:40:31 +01:00
parent a74f0e4260
commit 7a4bf84d42
9 changed files with 615 additions and 7 deletions

View File

@@ -1,5 +1,9 @@
package com.example.lifegrid.menu;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
@@ -7,8 +11,21 @@ import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.Calendar;
import java.util.Locale;
import com.example.lifegrid.R;
import com.example.lifegrid.models.Ativos;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
/**
* AtivosFragment diz respeito à janela do ecossistema dedicada à gestão
@@ -31,7 +48,74 @@ public class AtivosFragment extends Fragment {
// Inflaciona o layout para este fragmento
View root = inflater.inflate(R.layout.fragment_ativos, container, false);
Button novaTransacaoButton = root.findViewById(R.id.novaTransacaoButton);
novaTransacaoButton.setOnClickListener(v -> showNovoAtivoDialog());
return root;
}
private void showNovoAtivoDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
View dialogView = getLayoutInflater().inflate(R.layout.dialog_novo_ativo, null);
builder.setView(dialogView);
AlertDialog dialog = builder.create();
if (dialog.getWindow() != null) {
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
ImageView btnFechar = dialogView.findViewById(R.id.btnFechar);
btnFechar.setOnClickListener(v -> dialog.dismiss());
EditText etDataCompra = dialogView.findViewById(R.id.etDataCompra);
etDataCompra.setOnClickListener(v -> {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(requireContext(),
(view, selectedYear, selectedMonth, selectedDay) -> {
String formattedDate = String.format(Locale.getDefault(), "%02d/%02d/%04d", selectedDay, selectedMonth + 1, selectedYear);
etDataCompra.setText(formattedDate);
}, year, month, day);
datePickerDialog.show();
});
Button btnAdicionarAtivoDialog = dialogView.findViewById(R.id.btnAdicionarAtivoDialog);
EditText etNomeAtivo = dialogView.findViewById(R.id.etNomeAtivo);
Spinner spinnerTipoAtivo = dialogView.findViewById(R.id.spinnerTipoAtivo);
EditText etQuantidade = dialogView.findViewById(R.id.etQuantidade);
EditText etPrecoCompra = dialogView.findViewById(R.id.etPrecoCompra);
EditText etPrecoAtual = dialogView.findViewById(R.id.etPrecoAtual);
btnAdicionarAtivoDialog.setOnClickListener(v -> {
String nome = etNomeAtivo.getText().toString().trim();
String tipo = spinnerTipoAtivo.getSelectedItem().toString();
String quantidade = etQuantidade.getText().toString().trim();
String precoCompra = etPrecoCompra.getText().toString().trim();
String precoAtual = etPrecoAtual.getText().toString().trim();
String dataCompra = etDataCompra.getText().toString().trim();
Ativos ativos = new Ativos(nome, quantidade, Double.parseDouble(precoCompra), Double.parseDouble(precoAtual), dataCompra, tipo);
if (nome.isEmpty() || quantidade.isEmpty() || precoCompra.isEmpty() || precoAtual.isEmpty() || dataCompra.isEmpty() || spinnerTipoAtivo.getSelectedItemPosition() == 0) {
Toast.makeText(requireContext(), "Por favor, preencha os campos obrigatórios.", Toast.LENGTH_SHORT).show();
} else {
// Aqui seria a lógica para guardar na Firebase
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
String key = databaseReference.child("users").child(userId).child("ativos").push().getKey();
databaseReference.child("users").child(userId).child("ativos").child(key).setValue(ativos);
dialog.dismiss();
Toast.makeText(requireContext(), "Ativo adicionado com sucesso!", Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}
}

View File

@@ -1,5 +1,9 @@
package com.example.lifegrid.menu;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
@@ -7,8 +11,19 @@ import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.Calendar;
import java.util.Locale;
import com.example.lifegrid.R;
import com.example.lifegrid.models.Meta;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
/**
* MetasFragment projeta objetivos futuros onde o utilizador fixa montantes e datas a alcançar
@@ -31,7 +46,73 @@ public class MetasFragment extends Fragment {
// Inflaciona o layout para este fragmento
View root = inflater.inflate(R.layout.fragment_metas, container, false);
Button novaTransacaoButton = root.findViewById(R.id.novaTransacaoButton);
novaTransacaoButton.setOnClickListener(v -> showNovaMetaDialog());
return root;
}
private void showNovaMetaDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
View dialogView = getLayoutInflater().inflate(R.layout.dialog_nova_meta, null);
builder.setView(dialogView);
AlertDialog dialog = builder.create();
if (dialog.getWindow() != null) {
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
ImageView btnFechar = dialogView.findViewById(R.id.btnFecharMeta);
btnFechar.setOnClickListener(v -> dialog.dismiss());
EditText etDataLimite = dialogView.findViewById(R.id.etDataLimite);
etDataLimite.setOnClickListener(v -> {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(requireContext(),
(view, selectedYear, selectedMonth, selectedDay) -> {
String formattedDate = String.format(Locale.getDefault(), "%02d/%02d/%04d", selectedDay, selectedMonth + 1, selectedYear);
etDataLimite.setText(formattedDate);
}, year, month, day);
datePickerDialog.show();
});
Button btnCriarMetaDialog = dialogView.findViewById(R.id.btnCriarMetaDialog);
EditText etNomeMeta = dialogView.findViewById(R.id.etNomeMeta);
EditText etCategoriaMeta = dialogView.findViewById(R.id.etCategoriaMeta);
EditText etValorObjetivo = dialogView.findViewById(R.id.etValorObjetivo);
btnCriarMetaDialog.setOnClickListener(v -> {
String nome = etNomeMeta.getText().toString().trim();
String categoria = etCategoriaMeta.getText().toString().trim();
String valor = etValorObjetivo.getText().toString().trim();
String data = etDataLimite.getText().toString().trim();
Meta meta = new Meta(nome, categoria, valor, data);
if (nome.isEmpty() || categoria.isEmpty() || valor.isEmpty() || data.isEmpty()) {
Toast.makeText(requireContext(), "Por favor, preencha todos os campos.", Toast.LENGTH_SHORT).show();
} else {
// Aqui seria a lógica para guardar na Firebase
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
String key = databaseReference.child("users").child(userId).child("metas").push().getKey();
databaseReference.child("users").child(userId).child("metas").child(key).setValue(meta);
dialog.dismiss();
Toast.makeText(requireContext(), "Meta criada com sucesso!", Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}
}

View File

@@ -0,0 +1,71 @@
package com.example.lifegrid.models;
public class Ativos {
private String nome;
private String quantidade;
private double precoCompra;
private double precoAtual;
private String dataCompra;
private String tipo;
public Ativos() {
}
public Ativos(String nome, String quantidade, double precoCompra, double precoAtual, String dataCompra, String tipo) {
this.nome = nome;
this.quantidade = quantidade;
this.precoCompra = precoCompra;
this.precoAtual = precoAtual;
this.dataCompra = dataCompra;
this.tipo = tipo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getQuantidade() {
return quantidade;
}
public void setQuantidade(String quantidade) {
this.quantidade = quantidade;
}
public double getPrecoCompra() {
return precoCompra;
}
public void setPrecoCompra(double precoCompra) {
this.precoCompra = precoCompra;
}
public double getPrecoAtual() {
return precoAtual;
}
public void setPrecoAtual(double precoAtual) {
this.precoAtual = precoAtual;
}
public String getDataCompra() {
return dataCompra;
}
public void setDataCompra(String dataCompra) {
this.dataCompra = dataCompra;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
}

View File

@@ -0,0 +1,50 @@
package com.example.lifegrid.models;
public class Meta {
private String nome;
private String categoria;
private String valor;
private String data;
public Meta(){
}
public Meta(String nome, String categoria, String valor, String data) {
this.nome = nome;
this.categoria = categoria;
this.valor = valor;
this.data = data;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCategoria() {
return categoria;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}