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();
}
}