package it.fdev.unisaconnect;
import it.fdev.scraper.esse3.Esse3BasicScraper.LoadStates;
import it.fdev.scraper.esse3.Esse3ScraperService;
import it.fdev.unisaconnect.MainActivity.BootableFragmentsEnum;
import it.fdev.unisaconnect.data.Pagamenti;
import it.fdev.unisaconnect.data.Pagamenti.Pagamento;
import it.fdev.unisaconnect.data.SharedPrefDataManager;
import it.fdev.utils.MyDateUtils;
import it.fdev.utils.MySimpleFragment;
import it.fdev.utils.Utils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
public class FragmentPagamenti extends MySimpleFragment {
private boolean alreadyStarted = false;
private SharedPrefDataManager mDataManager;
private TextView pagamentiVuotoView;
private LinearLayout pagamentiContainerView;
private TextView lastUpdateTextView;
private View lastUpdateIconView;
// private View lastUpdateSepView;
private IntentFilter mIntentFilter = new IntentFilter();
private final BroadcastReceiver mHandlerBroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onNewBroadcast(context, intent);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_pagamenti, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Se non sono stati salvati i dati utente rimando al fragment dei dati
mDataManager = new SharedPrefDataManager(mActivity);
if (!mDataManager.loginDataExists()) { // Non sono memorizzati i dati utente
Utils.createAlert(mActivity, getString(R.string.dati_errati), BootableFragmentsEnum.ACCOUNT, false);
return;
}
mActivity.setLoadingVisible(true, true);
mIntentFilter.addAction(Esse3ScraperService.BROADCAST_STATE_E3_PAGAMENTI);
pagamentiVuotoView = (TextView) view.findViewById(R.id.pagamenti_vuoto);
pagamentiContainerView = (LinearLayout) view.findViewById(R.id.pagamenti_list);
lastUpdateTextView = (TextView) view.findViewById(R.id.last_update_time);
lastUpdateTextView = (TextView) view.findViewById(R.id.last_update_time);
lastUpdateIconView = (View) view.findViewById(R.id.last_update_icon);
// lastUpdateSepView = (View) view.findViewById(R.id.last_update_sep);
Pagamenti pagamenti = mDataManager.getPagamenti();
if (pagamenti != null) {
Log.d(Utils.TAG, "Pagamenti salvati trovate!");
}
}
@Override
public void onResume() {
super.onResume();
mActivity.registerReceiver(mHandlerBroadcast, mIntentFilter);
getPagamenti(false);
}
@Override
public void onPause() {
super.onPause();
mActivity.unregisterReceiver(mHandlerBroadcast);
}
@Override
public void onStop() {
super.onStop();
}
public void onNewBroadcast(Context context, Intent intent) {
try {
Log.d(Utils.TAG, "BROADCAST RECEIVED: " + intent.getAction());
if (Esse3ScraperService.BROADCAST_STATE_E3_PAGAMENTI.equals(intent.getAction())) {
LoadStates state = (LoadStates) intent.getSerializableExtra("status");
switch (state) {
case FINISHED:
mostraPagamenti();
break;
case NO_DATA:
case WRONG_DATA:
Utils.createAlert(mActivity, mActivity.getString(R.string.dati_errati), BootableFragmentsEnum.ACCOUNT, false);
break;
case UNKNOWN_PROBLEM:
default:
Utils.createAlert(mActivity, mActivity.getString(R.string.problema_di_connessione_generico), null, true);
break;
}
}
} catch (Exception e) {
Log.e(Utils.TAG, "onReceiveBroadcast exception", e);
}
}
@Override
public Set<Integer> getActionsToShow() {
Set<Integer> actionsToShow = new HashSet<Integer>();
actionsToShow.add(R.id.action_refresh_button);
if (!alreadyStarted || Esse3ScraperService.isRunning) {
actionsToShow.add(R.id.action_loading_animation);
}
return actionsToShow;
}
@Override
public void actionRefresh() {
getPagamenti(true);
}
public void getPagamenti(boolean force) {
if (!isAdded()) {
return;
}
// Lo scraper è in esecuzione
if (Esse3ScraperService.isRunning) {
return;
}
mActivity.setLoadingVisible(true, true);
if (!force && mDataManager.getPagamenti()!=null) {
alreadyStarted = true;
mostraPagamenti();
return;
}
// Se non c'è internet rimando al fragment di errore
if (!Utils.hasConnection(mActivity)) {
Utils.goToInternetError(mActivity, this);
return;
}
if (force || !alreadyStarted) {
alreadyStarted = true;
mActivity.startService(new Intent(mActivity, Esse3ScraperService.class).setAction(Esse3ScraperService.BROADCAST_STATE_E3_PAGAMENTI));
} else {
pagamentiVuotoView.setVisibility(View.VISIBLE);
pagamentiContainerView.setVisibility(View.GONE);
lastUpdateTextView.setVisibility(View.GONE);
lastUpdateIconView.setVisibility(View.GONE);
mActivity.setLoadingVisible(false, false);
return;
}
}
public void mostraPagamenti() {
if (!isAdded()) {
return;
}
if (pagamentiVuotoView == null || pagamentiContainerView == null) { // Dai report di crash sembra succedere a volte, non ho idea del perchè
mActivity.setDrawerOpen(true); // Quindi mostro lo slidingmenu per apparare
mActivity.setLoadingVisible(false, false);
return;
}
Pagamenti pagamenti = mDataManager.getPagamenti();
// ArrayList<Pagamento> p = new ArrayList<Pagamento>();
// p.add(new Pagamento("RATA UNICA", "TASSA REGIONALE DIRITTO ALLO STUDIO", "140,00€", "30/09/2013"));
// p.add(new Pagamento("1 DI 3", "TASSA IMMATRICOLAZIONE - ISCRIZIONI", "813,38€", "30/09/2013"));
// p.add(new Pagamento("asd", "asdasdasd", "150€", "10/10/2020"));
// p.add(new Pagamento("asd", "asdasdasd", "150€", "10/10/2020"));
// p.add(new Pagamento("asd", "asdasdasd", "150€", "10/10/2020"));
// Pagamenti pp = new Pagamenti(p);
// pagamenti = pp;
String updateText = "";
if (pagamenti != null) {
updateText = MyDateUtils.getLastUpdateString(mActivity, pagamenti.getFetchTime().getTime(), false);
}
if (!updateText.isEmpty()) {
lastUpdateTextView.setText(updateText);
lastUpdateTextView.setVisibility(View.VISIBLE);
lastUpdateIconView.setVisibility(View.VISIBLE);
} else {
lastUpdateTextView.setVisibility(View.GONE);
lastUpdateIconView.setVisibility(View.GONE);
}
if (pagamenti == null || pagamenti.getListaPagamenti().size() == 0) { // Non ho pagamenti da mostrare
pagamentiVuotoView.setVisibility(View.VISIBLE);
pagamentiContainerView.setVisibility(View.GONE);
mActivity.setLoadingVisible(false, false);
return;
}
pagamentiVuotoView.setVisibility(View.GONE);
pagamentiContainerView.setVisibility(View.VISIBLE);
LayoutInflater layoutInflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout pagamentiListView = (LinearLayout) mActivity.findViewById(R.id.pagamenti_list);
pagamentiListView.removeAllViews();
ArrayList<Pagamento> listaPagamenti = pagamenti.getListaPagamenti();
Pagamento cPagamento;
for(int i=0; i<listaPagamenti.size(); i++) {
cPagamento = listaPagamenti.get(i);
View view = inflatePagamento(cPagamento, layoutInflater);
pagamentiListView.addView(view);
}
mActivity.setLoadingVisible(false, false);
}
public View inflatePagamento(Pagamento pagamento, LayoutInflater layoutInflater) {
View rowView = layoutInflater.inflate(R.layout.pagamento_row, null);
TextView descriptionView = (TextView) rowView.findViewById(R.id.pagamento_description);
TextView expirationView = (TextView) rowView.findViewById(R.id.pagamento_expiration);
TextView amountView = (TextView) rowView.findViewById(R.id.pagamento_amount);
String description = "";
for (String cCause : pagamento.getCausali()) {
description += "• " + cCause + "\n";
}
descriptionView.setText(description.trim());
expirationView.setText(getString(R.string.scadenza) + ": " + pagamento.getScadenza());
amountView.setText(pagamento.getImporto());
return rowView;
}
@Override
public int getTitleResId() {
return R.string.pagamenti;
}
}