package org.bookdash.android.presentation.downloads; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import org.bookdash.android.Injection; import org.bookdash.android.R; import org.bookdash.android.domain.model.firebase.FireBookDetails; import org.bookdash.android.presentation.bookinfo.BookInfoActivity; import org.bookdash.android.presentation.main.NavDrawerInterface; import java.util.List; import fr.castorflex.android.circularprogressbar.CircularProgressBar; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class DownloadsFragment extends Fragment implements DownloadsContract.View { private RecyclerView listDownloadsRecyclerView; private DownloadsContract.Presenter downloadsPresenter; private DownloadsAdapter downloadsAdapter; private LinearLayout linearLayoutErrorScreen; private Button buttonRetry; private TextView textViewErrorMessage; private CircularProgressBar circularProgressBar; private NavDrawerInterface navDrawerInterface; public static DownloadsFragment newInstance() { return new DownloadsFragment(); } @Override public void showDownloadedBooks(List<FireBookDetails> books) { downloadsAdapter.setBooks(books); downloadsAdapter.notifyDataSetChanged(); listDownloadsRecyclerView.setVisibility(View.VISIBLE); } @Override public void showLoading(final boolean visible) { circularProgressBar.setVisibility(visible ? View.VISIBLE : View.GONE); listDownloadsRecyclerView.setVisibility(visible ? View.GONE : View.VISIBLE); } @Override public void showErrorScreen(boolean show, String errorMessage, boolean showRetryButton) { if (show) { linearLayoutErrorScreen.setVisibility(View.VISIBLE); } else { linearLayoutErrorScreen.setVisibility(View.GONE); } buttonRetry.setVisibility(showRetryButton ? View.VISIBLE : View.GONE); textViewErrorMessage.setText(errorMessage); } @Override public void showSnackBarError(final int message) { Snackbar.make(listDownloadsRecyclerView, message, Snackbar.LENGTH_LONG).show(); } @Override public void showSnackBarError(final String message) { Snackbar.make(listDownloadsRecyclerView, message, Snackbar.LENGTH_LONG).show(); } @Override public void showNoBooksDownloadedMessage() { showErrorScreen(true, getString(R.string.no_books_downloaded), false); listDownloadsRecyclerView.setVisibility(View.GONE); } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof NavDrawerInterface) { navDrawerInterface = (NavDrawerInterface) context; } } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_downloads, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); listDownloadsRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_list_downloads); downloadsPresenter = new DownloadsPresenter(Injection.provideBookService(), Injection.provideDownloadService(), Injection.provideAnalytics(), Schedulers.io(), AndroidSchedulers.mainThread(), Schedulers.computation()); downloadsPresenter.attachView(this); downloadsAdapter = new DownloadsAdapter(null, getActivity(), new View.OnClickListener() { @Override public void onClick(View v) { DownloadsViewHolder downloadsViewHolder = (DownloadsViewHolder) v.getTag(); showDeleteDialog(downloadsViewHolder.book); } }, new View.OnClickListener() { @Override public void onClick(View v) { DownloadsViewHolder downloadsViewHolder = (DownloadsViewHolder) v.getTag(); showBookDetails(downloadsViewHolder.book); } }); listDownloadsRecyclerView .setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); listDownloadsRecyclerView.setAdapter(downloadsAdapter); linearLayoutErrorScreen = (LinearLayout) view.findViewById(R.id.linear_layout_error); buttonRetry = (Button) view.findViewById(R.id.button_retry); textViewErrorMessage = (TextView) view.findViewById(R.id.text_view_error_screen); circularProgressBar = (CircularProgressBar) view.findViewById(R.id.fragment_loading_downloads); Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar); if (navDrawerInterface != null) { navDrawerInterface.setToolbar(toolbar); } final ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); if (actionBar != null) { actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_24dp); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setTitle(getString(R.string.fragment_title_downloads)); } downloadsPresenter.loadListDownloads(); setHasOptionsMenu(false); } @Override public void onDestroyView() { super.onDestroyView(); downloadsPresenter.detachView(); } @Override public void onDetach() { super.onDetach(); navDrawerInterface = null; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (navDrawerInterface != null) { navDrawerInterface.openNavDrawer(); } return true; } return super.onOptionsItemSelected(item); } private void showDeleteDialog(final FireBookDetails bookToDelete) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppCompatAlertDialogStyle); builder.setTitle(getString(R.string.delete_book_confirmation)); builder.setMessage(getString(R.string.downloads_are_you_sure, bookToDelete.getBookTitle())); builder.setPositiveButton(getString(R.string.delete_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { downloadsPresenter.deleteDownload(bookToDelete); } }); builder.setNegativeButton(getString(R.string.delete_cancel), null); builder.show(); } private void showBookDetails(FireBookDetails bookDetail) { Intent intent = new Intent(getActivity(), BookInfoActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(BookInfoActivity.BOOK_PARCEL, bookDetail); startActivity(intent); } }