package it.fdev.unisaconnect;
import it.fdev.scraper.BiblioBookScraper;
import it.fdev.unisaconnect.data.BookDetails;
import it.fdev.utils.MySimpleFragment;
import it.fdev.utils.Utils;
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.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
public class FragmentBiblioShowBook extends MySimpleFragment {
private boolean alreadyStarted = false;
private String mSearchURL;
private BookDetails mBook;
private View libroND, libroContainer;
private View urlView;
private View titoloCard, autoreCard, posizioneCard, edizioneCard, pubblicazioneCard, descrizioneCard, serieCard, linguaCard, soggettoCard, cddCard, isbnCard;
private TextView titoloView, autoreView, posizioneView, edizioneView, pubblicazioneView, descrizioneView, serieView, linguaView, soggettoView, cddView, isbnView;
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) {
View view = inflater.inflate(R.layout.fragment_biblio_book_details, container, false);
libroND = view.findViewById(R.id.bookND);
libroContainer = view.findViewById(R.id.bookContainer);
urlView = view.findViewById(R.id.bookWebCard);
titoloCard = view.findViewById(R.id.bookTitoloCard);
autoreCard = view.findViewById(R.id.bookAutoreCard);
posizioneCard = view.findViewById(R.id.bookPosizioneCard);
edizioneCard = view.findViewById(R.id.bookEdizioneCard);
pubblicazioneCard = view.findViewById(R.id.bookPubblicazioneCard);
descrizioneCard = view.findViewById(R.id.bookDescrizioneCard);
serieCard = view.findViewById(R.id.bookSerieCard);
linguaCard = view.findViewById(R.id.bookLinguaCard);
soggettoCard = view.findViewById(R.id.bookSoggettoCard);
cddCard = view.findViewById(R.id.bookCddCard);
isbnCard = view.findViewById(R.id.bookIsbnCard);
titoloView = (TextView) view.findViewById(R.id.titolo);
autoreView = (TextView) view.findViewById(R.id.autore);
posizioneView = (TextView) view.findViewById(R.id.posizione);
edizioneView = (TextView) view.findViewById(R.id.edizione);
pubblicazioneView = (TextView) view.findViewById(R.id.pubblicazione);
descrizioneView = (TextView) view.findViewById(R.id.descrizione);
serieView = (TextView) view.findViewById(R.id.serie);
linguaView = (TextView) view.findViewById(R.id.lingua);
soggettoView = (TextView) view.findViewById(R.id.soggetto);
cddView = (TextView) view.findViewById(R.id.cdd);
isbnView = (TextView) view.findViewById(R.id.isbn);
urlView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
if (mBook != null && !mBook.getDetailsUrl().isEmpty()) {
Intent webIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(mBook.getDetailsUrl()));
startActivity(webIntent);
}
} catch (Exception e) {
Log.w(Utils.TAG, "Not a valid url");
}
}
});
mActivity.setLoadingVisible(true, true);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mIntentFilter.addAction(BiblioBookScraper.BROADCAST_STATE_BIBLIO_BOOK);
mActivity.setLoadingVisible(true, true);
mSearchURL = getArguments().getString(FragmentBiblioDoSearch.ARG_URI);
if (mSearchURL == null) {
return;
}
}
@Override
public void onResume() {
super.onResume();
mActivity.registerReceiver(mHandlerBroadcast, mIntentFilter);
getLibri(false);
}
@Override
public void onPause() {
super.onPause();
mActivity.unregisterReceiver(mHandlerBroadcast);
}
public void onNewBroadcast(Context context, Intent intent) {
if (BiblioBookScraper.BROADCAST_STATE_BIBLIO_BOOK.equals(intent.getAction())) {
try {
BookDetails book = intent.getParcelableExtra("status");
showLibro(book);
} catch (Exception e) {
Log.e(Utils.TAG, "onReceiveBroadcast exception", e);
showLibro(null);
}
}
}
@Override
public Set<Integer> getActionsToShow() {
Set<Integer> actionsToShow = new HashSet<Integer>();
actionsToShow.add(R.id.action_refresh_button);
if (!alreadyStarted || BiblioBookScraper.isRunning) {
actionsToShow.add(R.id.action_loading_animation);
}
return actionsToShow;
}
public void getLibri(boolean force) {
if (!isAdded()) {
return;
}
// Lo scraper è in esecuzione
if (BiblioBookScraper.isRunning) {
return;
}
mActivity.setLoadingVisible(true, true);
if (!force && mBook != null) {
alreadyStarted = true;
showLibro(null);
return;
}
// Se non c'è internet rimando al fragment di errore
if (!Utils.hasConnection(mActivity)) {
Utils.goToInternetError(mActivity, this);
return;
}
if (force || !alreadyStarted) {
alreadyStarted = true;
Log.d(Utils.TAG, "Starting book search...");
mActivity.startService(new Intent(mActivity, BiblioBookScraper.class).putExtra("URL", mSearchURL));
} else {
mActivity.setLoadingVisible(false, false);
return;
}
}
public void showLibro(BookDetails book) {
if (!isAdded()) {
return;
}
if (libroND == null || libroContainer == 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 (book != null) {
mBook = book;
}
if (mBook == null) { // Non ho un menu da mostrare
libroND.setVisibility(View.VISIBLE);
libroContainer.setVisibility(View.GONE);
mActivity.setLoadingVisible(false, false);
return;
}
if (mBook.getTitle() == null || mBook.getTitle().isEmpty()) {
titoloCard.setVisibility(View.GONE);
} else {
titoloCard.setVisibility(View.VISIBLE);
titoloView.setText(mBook.getTitle());
}
if (mBook.getAuthor() == null || mBook.getAuthor().isEmpty()) {
autoreCard.setVisibility(View.GONE);
} else {
autoreCard.setVisibility(View.VISIBLE);
autoreView.setText(mBook.getAuthor());
}
if (mBook.getPosition() == null || mBook.getPosition().isEmpty()) {
posizioneCard.setVisibility(View.GONE);
} else {
posizioneCard.setVisibility(View.VISIBLE);
posizioneView.setText(mBook.getPosition());
}
if (mBook.getEdition() == null || mBook.getEdition().isEmpty()) {
edizioneCard.setVisibility(View.GONE);
} else {
edizioneCard.setVisibility(View.VISIBLE);
edizioneView.setText(mBook.getEdition());
}
if (mBook.getPublication() == null || mBook.getPublication().isEmpty()) {
pubblicazioneCard.setVisibility(View.GONE);
} else {
pubblicazioneCard.setVisibility(View.VISIBLE);
pubblicazioneView.setText(mBook.getPublication());
}
if (mBook.getDescr() == null || mBook.getDescr().isEmpty()) {
descrizioneCard.setVisibility(View.GONE);
} else {
descrizioneCard.setVisibility(View.VISIBLE);
descrizioneView.setText(mBook.getDescr());
}
if (mBook.getSeries() == null || mBook.getSeries().isEmpty()) {
serieCard.setVisibility(View.GONE);
} else {
serieCard.setVisibility(View.VISIBLE);
serieView.setText(mBook.getSeries());
}
if (mBook.getLang() == null || mBook.getLang().isEmpty()) {
linguaCard.setVisibility(View.GONE);
} else {
linguaCard.setVisibility(View.VISIBLE);
linguaView.setText(mBook.getLang());
}
if (mBook.getSubject() == null || mBook.getSubject().isEmpty()) {
soggettoCard.setVisibility(View.GONE);
} else {
soggettoCard.setVisibility(View.VISIBLE);
soggettoView.setText(mBook.getSubject());
}
if (mBook.getCdd() == null || mBook.getCdd().isEmpty()) {
cddCard.setVisibility(View.GONE);
} else {
cddCard.setVisibility(View.VISIBLE);
cddView.setText(mBook.getCdd());
}
if (mBook.getIsbn() == null || mBook.getIsbn().isEmpty()) {
isbnCard.setVisibility(View.GONE);
} else {
isbnCard.setVisibility(View.VISIBLE);
isbnView.setText(mBook.getIsbn());
}
libroND.setVisibility(View.GONE);
libroContainer.setVisibility(View.VISIBLE);
mActivity.setLoadingVisible(false, false);
}
@Override
public void actionRefresh() {
getLibri(true);
}
@Override
public int getTitleResId() {
return R.string.dettagli_libro;
}
}