tudo a andar rapido vamossss

This commit is contained in:
2026-04-23 16:05:48 +01:00
parent 7a4bf84d42
commit 9a56ecd1dd
21 changed files with 990 additions and 3 deletions

View File

@@ -17,6 +17,25 @@ import com.example.lifegrid.menu.DocumentosFragment;
import com.example.lifegrid.menu.GraficosFragment;
import com.example.lifegrid.menu.MetasFragment;
import com.example.lifegrid.menu.TransacoesFragment;
import com.example.lifegrid.models.Transacao;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import androidx.annotation.NonNull;
import java.util.Calendar;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/**
* TelaInicialActivity funciona como a janela mestre (Container) de navegação da aplicação.
@@ -33,6 +52,13 @@ public class TelaInicialActivity extends AppCompatActivity {
private TextView tvTransacoes3;
private TextView tvValor4;
private TextView tvTransacoes4;
private TextView tvTitulo;
private TextView tvTitulo2;
private Spinner spinnerMes;
private Spinner spinnerAno;
private String[] meses = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -45,6 +71,22 @@ public class TelaInicialActivity extends AppCompatActivity {
return insets;
});
tvValor = findViewById(R.id.tvValor);
tvTransacoes = findViewById(R.id.tvTransacoes);
tvValor2 = findViewById(R.id.tvValor2);
tvTransacoes2 = findViewById(R.id.tvTransacoes2);
tvValor3 = findViewById(R.id.tvValor3);
tvTransacoes3 = findViewById(R.id.tvTransacoes3);
tvValor4 = findViewById(R.id.tvValor4);
tvTransacoes4 = findViewById(R.id.tvTransacoes4);
tvTitulo = findViewById(R.id.tvTitulo);
tvTitulo2 = findViewById(R.id.tvTitulo2);
spinnerMes = findViewById(R.id.spinnerMes);
spinnerAno = findViewById(R.id.spinnerAno);
setupSpinners();
Fragment transacoesFragment2 = new TransacoesFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainerView, transacoesFragment2)
@@ -93,4 +135,108 @@ public class TelaInicialActivity extends AppCompatActivity {
.commit();
});
}
private void setupSpinners() {
ArrayAdapter<String> mesAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, meses);
mesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerMes.setAdapter(mesAdapter);
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
List<String> anos = new ArrayList<>();
for (int i = currentYear - 5; i <= currentYear + 5; i++) {
anos.add(String.valueOf(i));
}
ArrayAdapter<String> anoAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, anos);
anoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerAno.setAdapter(anoAdapter);
// Set current month and year
spinnerMes.setSelection(Calendar.getInstance().get(Calendar.MONTH));
spinnerAno.setSelection(anos.indexOf(String.valueOf(currentYear)));
AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, android.view.View view, int position, long id) {
carregarDados();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
};
spinnerMes.setOnItemSelectedListener(listener);
spinnerAno.setOnItemSelectedListener(listener);
}
private void carregarDados() {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user == null) return;
int mesSelecionado = spinnerMes.getSelectedItemPosition() + 1; // 1 to 12
String anoSelecionado = spinnerAno.getSelectedItem().toString();
String mesNome = meses[spinnerMes.getSelectedItemPosition()];
tvTitulo.setText("Receitas (" + mesNome + " " + anoSelecionado + ")");
tvTitulo2.setText("Despesas (" + mesNome + " " + anoSelecionado + ")");
DatabaseReference transacoesRef = FirebaseDatabase.getInstance().getReference()
.child("users").child(user.getUid()).child("transacoes");
transacoesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
double totalReceitas = 0;
double totalDespesas = 0;
int countReceitas = 0;
int countDespesas = 0;
for (DataSnapshot ds : snapshot.getChildren()) {
Transacao transacao = ds.getValue(Transacao.class);
if (transacao != null && transacao.getData() != null) {
String[] parts = transacao.getData().split("/");
if (parts.length == 3) {
try {
int mesTransacao = Integer.parseInt(parts[1]);
String anoTransacao = parts[2];
if (mesTransacao == mesSelecionado && anoTransacao.equals(anoSelecionado)) {
double valor = Double.parseDouble(transacao.getValor().replace(",", "."));
if ("Receita".equals(transacao.getTipo())) {
totalReceitas += valor;
countReceitas++;
} else if ("Despesa".equals(transacao.getTipo())) {
totalDespesas += valor;
countDespesas++;
}
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
}
}
tvValor.setText(String.format(Locale.getDefault(), "%.2f€", totalReceitas));
tvTransacoes.setText(countReceitas + " transações");
tvValor2.setText(String.format(Locale.getDefault(), "%.2f€", totalDespesas));
tvTransacoes2.setText(countDespesas + " transações");
double saldo = totalReceitas - totalDespesas;
tvValor3.setText(String.format(Locale.getDefault(), "%.2f€", saldo));
if (saldo >= 0) {
tvTransacoes3.setText("Poupança positiva");
tvTransacoes3.setTextColor(android.graphics.Color.parseColor("#8E8E8E"));
} else {
tvTransacoes3.setText("Poupança negativa");
tvTransacoes3.setTextColor(android.graphics.Color.parseColor("#FF0000"));
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(TelaInicialActivity.this, "Erro ao carregar dados", Toast.LENGTH_SHORT).show();
}
});
}
}