package it.fdev.unisaconnect;
import it.fdev.scraper.esse3.Esse3BasicScraper.LoadStates;
import it.fdev.scraper.esse3.Esse3ScraperService;
import it.fdev.scraper.esse3.Esse3TipoCorsoScraper.TipoCorso;
import it.fdev.unisaconnect.MainActivity.BootableFragmentsEnum;
import it.fdev.unisaconnect.data.SharedPrefDataManager;
import it.fdev.utils.MyListFragment;
import it.fdev.utils.TipoCorsoAdapter;
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.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class FragmentTipoCorso extends MyListFragment {
private TipoCorsoAdapter adapter;
private ArrayList<TipoCorso> tipoCorsoList = null;
private TextView listEmptyView;
private ListView listCardsView;
private boolean alreadyStarted = false;
private SharedPrefDataManager mDataManager;
private IntentFilter mIntentFilter = new IntentFilter();
private final BroadcastReceiver mHandlerBroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onNewBroadcast(context, intent);
}
};
public void onNewBroadcast(Context context, Intent intent) {
try {
Log.d(Utils.TAG, "BROADCAST RECEIVED IN FragmentTipoCorso: " + intent.getAction());
if (Esse3ScraperService.BROADCAST_STATE_E3_TIPO_CORSO.equals(intent.getAction())) {
LoadStates state = (LoadStates) intent.getSerializableExtra("status");
switch (state) {
case FINISHED:
if(intent.hasExtra("list")) {
ArrayList<TipoCorso> lista = intent.getParcelableArrayListExtra("list");
showCards(lista);
}
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);
Utils.createAlert(mActivity, mActivity.getString(R.string.problema_di_connessione_generico), null, true);
}
}
@Override
public void onResume() {
super.onResume();
mActivity.registerReceiver(mHandlerBroadcast, mIntentFilter);
getTipoCorsi(false);
}
@Override
public void onPause() {
super.onPause();
mActivity.unregisterReceiver(mHandlerBroadcast);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new TipoCorsoAdapter(mActivity, R.layout.card_news, new ArrayList<TipoCorso>());
setListAdapter(adapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.list_cards_ui, container, false);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mIntentFilter.addAction(Esse3ScraperService.BROADCAST_STATE_E3_TIPO_CORSO);
mDataManager = new SharedPrefDataManager(mActivity);
listEmptyView = (TextView) view.findViewById(R.id.card_list_empty);
listCardsView = (ListView) view.findViewById(android.R.id.list);
/* Metto animazione */
LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(getActivity(), R.anim.list_layout_controller);
/* Indico che la listView di questo ListFragment deve avere il mio controller per l'animazione */
getListView().setLayoutAnimation(controller);
// getTipoCorsi(false);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
try {
Log.d(Utils.TAG, "Position:" + position);
mDataManager.setTipoCorso(position+1);
Toast.makeText(mActivity, "Hai cambiato il corso di laurea da visualizzare", Toast.LENGTH_LONG).show();
mActivity.startService(new Intent(mActivity, Esse3ScraperService.class).setAction(Esse3ScraperService.BROADCAST_STATE_E3_LIBRETTO));
mActivity.switchContent(BootableFragmentsEnum.STUDENT_SERVICES, true);
} catch (Exception e) {
Log.w(Utils.TAG, e);
}
}
@Override
public Set<Integer> getActionsToShow() {
Set<Integer> actionsToShow = new HashSet<Integer>();
actionsToShow.add(R.id.action_refresh_button);
if (!alreadyStarted) {
actionsToShow.add(R.id.action_loading_animation);
}
return actionsToShow;
}
@Override
public void actionRefresh() {
getTipoCorsi(true);
}
@Override
public int getTitleResId() {
return R.string.tipo_corso_title;
}
public void getTipoCorsi(boolean force) {
if (!isAdded()) {
return;
}
if (!force && alreadyStarted) {
return;
}
mActivity.setLoadingVisible(true, true);
listCardsView.setSelectionAfterHeaderView();
if (!force && tipoCorsoList != null) {
showCards(null);
mActivity.setLoadingVisible(false, false);
return;
}
if (!Utils.hasConnection(mActivity)) {
Utils.goToInternetError(mActivity, this);
return;
}
alreadyStarted = true;
if (Esse3ScraperService.isRunning) {
mActivity.setLoadingVisible(true);
return;
}
mActivity.startService(new Intent(mActivity, Esse3ScraperService.class).setAction(Esse3ScraperService.BROADCAST_STATE_E3_TIPO_CORSO));
return;
}
public void showCards(ArrayList<TipoCorso> tipoCorsoList) {
if (!isAdded()) {
return;
}
if (listEmptyView == null || listCardsView == 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;
}
if (tipoCorsoList != null) {
this.tipoCorsoList = tipoCorsoList;
}
if (this.tipoCorsoList == null) { // Non ho un menu da mostrare
listEmptyView.setVisibility(View.GONE);
listCardsView.setVisibility(View.GONE);
mActivity.setLoadingVisible(false, false);
return;
} else if (this.tipoCorsoList.size() == 0) {
listEmptyView.setVisibility(View.VISIBLE);
listCardsView.setVisibility(View.GONE);
mActivity.setLoadingVisible(false, false);
return;
} else {
listEmptyView.setVisibility(View.GONE);
listCardsView.setVisibility(View.VISIBLE);
}
adapter.clear();
adapter.addAll(tipoCorsoList);
adapter.notifyDataSetChanged();
mActivity.setLoadingVisible(false, false);
}
}