package ar.rulosoft.mimanganu; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.ActionBar; import android.content.res.ColorStateList; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.view.animation.AccelerateDecelerateInterpolator; import com.fedorvlasov.lazylist.ImageLoader; import java.util.List; import ar.rulosoft.mimanganu.componentes.ControlInfo; import ar.rulosoft.mimanganu.componentes.Database; import ar.rulosoft.mimanganu.componentes.Manga; import ar.rulosoft.mimanganu.servers.ServerBase; import ar.rulosoft.mimanganu.utils.AsyncAddManga; import ar.rulosoft.mimanganu.utils.ThemeColors; import ar.rulosoft.mimanganu.utils.Util; public class DetailsFragment extends Fragment { public static final String TITLE = "titulo_m"; public static final String PATH = "path_m"; public static final String IMG = "img"; private static final String TAG = "DetailsFragment"; private String title, path, img; private int id; private ImageLoader imageLoader; private ControlInfo data; private SwipeRefreshLayout swipeRefreshLayout; private ServerBase serverBase; private Manga manga; private FloatingActionButton floatingActionButton_add; private LoadDetailsTask loadDetailsTask = new LoadDetailsTask(); private boolean mangaAlreadyAdded; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { title = getArguments().getString(TITLE); path = getArguments().getString(PATH); img = getArguments().getString(IMG); id = getArguments().getInt(MainFragment.SERVER_ID); setHasOptionsMenu(true); return inflater.inflate(R.layout.fragment_details, container, false); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public void onStart() { super.onStart(); Thread t0 = new Thread(new Runnable() { @Override public void run() { try { List<Manga> mangas = Database.getMangas(getContext(), null, true); for (Manga m : mangas) { if (m.getPath().equals(manga.getPath())) { mangaAlreadyAdded = true; if (floatingActionButton_add != null) floatingActionButton_add.hide(); } } } catch (Exception e) { Log.e(TAG, "Exception", e); Util.getInstance().toast(getContext(), Log.getStackTraceString(e)); } } }); t0.start(); data = (ControlInfo) getView().findViewById(R.id.datos); swipeRefreshLayout = (SwipeRefreshLayout) getView().findViewById(R.id.str); ActionBar mActBar = getActivity().getActionBar(); if (mActBar != null) { mActBar.setDisplayHomeAsUpEnabled(true); } floatingActionButton_add = (FloatingActionButton) getView().findViewById(R.id.floatingActionButton_add); floatingActionButton_add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!mangaAlreadyAdded) { AsyncAddManga nAsyncAddManga = new AsyncAddManga(manga, getActivity(), getView(), false, false, true); nAsyncAddManga.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); AnimatorSet set = new AnimatorSet(); ObjectAnimator anim1 = ObjectAnimator.ofFloat(floatingActionButton_add, "alpha", 1.0f, 0.0f); anim1.setDuration(0); DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); ObjectAnimator anim2 = ObjectAnimator.ofFloat(floatingActionButton_add, "y", displayMetrics.heightPixels); anim2.setDuration(500); set.playSequentially(anim2, anim1); set.start(); } else { Util.getInstance().showFastSnackBar(getString(R.string.already_on_db), getView(),getContext()); } } }); int[] colors = ThemeColors.getColors(PreferenceManager.getDefaultSharedPreferences(getActivity())); floatingActionButton_add.setBackgroundTintList(ColorStateList.valueOf(colors[1])); swipeRefreshLayout.setColorSchemeColors(colors[0], colors[1]); data.setColor(MainActivity.darkTheme, colors[0]); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getActivity().getWindow(); window.setNavigationBarColor(colors[0]); window.setStatusBarColor(colors[4]); } if (getActivity() != null) { ((MainActivity) getActivity()).setTitle(getResources().getString(R.string.datosde) + " " + title); } manga = new Manga(id, title, path, false); manga.setImages(img); serverBase = ServerBase.getServer(id, getContext()); imageLoader = new ImageLoader(getContext()); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { loadDetailsTask = (LoadDetailsTask) new LoadDetailsTask().execute(); } }); swipeRefreshLayout.post(new Runnable() { @Override public void run() { swipeRefreshLayout.setRefreshing(true); } }); loadDetailsTask = (LoadDetailsTask) new LoadDetailsTask().execute(); } @Override public void onResume() { super.onResume(); ((MainActivity)getActivity()).enableHomeButton(true); } @Override public void onDetach() { super.onDetach(); loadDetailsTask.cancel(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: getActivity().onBackPressed(); return true; } return super.onOptionsItemSelected(item); } private class LoadDetailsTask extends AsyncTask<Void, Void, Void> { String error = ""; @Override protected Void doInBackground(Void... params) { try { serverBase.loadMangaInformation(manga, true); } catch (Exception e) { e.printStackTrace(); error = Log.getStackTraceString(e); } return null; } @Override protected void onPostExecute(Void v) { String infoExtra = ""; if(isAdded()) { if (error.isEmpty()) { if (manga.isFinished()) { infoExtra = infoExtra + getResources().getString(R.string.finalizado); } else { infoExtra = infoExtra + getResources().getString(R.string.en_progreso); } if(mangaAlreadyAdded) data.setStatus(infoExtra + " (" + getString(R.string.already_on_db) + ")"); else data.setStatus(infoExtra); String chapters = ""; if(manga.getChapters().size() > 0){ chapters = " (" + manga.getChapters().size() + " " + getString(R.string.chapters)+")"; } data.setServer(serverBase.getServerName() + chapters); if (manga.getAuthor() != null && manga.getAuthor().length() > 1) { data.setAuthor(manga.getAuthor()); } else { data.setAuthor(getResources().getString(R.string.nodisponible)); } if (manga.getGenre() != null && manga.getGenre().length() > 1) { data.setGenre(manga.getGenre()); } else { data.setGenre(getResources().getString(R.string.nodisponible)); } if (manga.getSynopsis() != null && manga.getSynopsis().length() > 1) { data.setSynopsis(manga.getSynopsis()); } else { data.setSynopsis(getResources().getString(R.string.nodisponible)); } imageLoader.displayImg(manga.getImages(), data); if (!error.isEmpty()) { Util.getInstance().showFastSnackBar(error, getView(),getContext()); } else { AnimatorSet set = new AnimatorSet(); ObjectAnimator anim1 = ObjectAnimator.ofFloat(floatingActionButton_add, "alpha", 0.0f, 1.0f); anim1.setDuration(0); float y = floatingActionButton_add.getY(); DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); ObjectAnimator anim2 = ObjectAnimator.ofFloat(floatingActionButton_add, "y", displayMetrics.heightPixels); anim2.setDuration(0); ObjectAnimator anim3 = ObjectAnimator.ofFloat(floatingActionButton_add, "y", y); anim3.setInterpolator(new AccelerateDecelerateInterpolator()); anim3.setDuration(500); set.playSequentially(anim2, anim1, anim3); set.start(); } } else { Util.getInstance().showFastSnackBar(error, getView(), getContext()); } } swipeRefreshLayout.setRefreshing(false); } } }