package org.fox.ttcomics2; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.ActionBar; import android.util.Log; import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.fox.ttcomics2.archive.ComicArchive; import java.io.IOException; import icepick.State; import it.sephiroth.android.library.imagezoom.ImageViewTouch; public class ComicFragment extends StateSavedFragment { private final String TAG = this.getClass().getSimpleName(); private SharedPreferences m_prefs; @State protected int m_page; private ViewComicActivity m_activity; private GestureDetector m_detector; @State protected boolean m_thumbnail = false; @State protected ComicArchive m_archive; public ComicFragment() { super(); } public void initialize(ComicArchive archive, int page) { m_archive = archive; m_page = page; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_comic, container, false); final ImageViewTouch image = view.findViewById(R.id.comic_image); image.setFitToScreen(true); try { Glide.with(ComicFragment.this) .load(m_archive.getByteArray(m_page)) .dontAnimate() .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .into(image); } catch (IOException e) { image.setImageResource(R.drawable.badimage); e.printStackTrace(); } image.setOnScaleChangedListener(new ImageViewTouch.OnScaleChangedListener() { @Override public void onScaleChanged(float scale) { // TODO: shared scale change? } }); image.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { return m_detector.onTouchEvent(event); } }); //} return view; } private void onLeftSideTapped() { ImageViewTouch image = getView().findViewById(R.id.comic_image); if (image != null) { boolean atLeftEdge = !image.canScroll(1); if (atLeftEdge) { m_activity.selectPreviousComic(); } } } private void onRightSideTapped() { ImageViewTouch image = getView().findViewById(R.id.comic_image); if (image != null) { boolean atRightEdge = !image.canScroll(-1); if (atRightEdge) { m_activity.selectNextComic(); } } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); //setThumbnail(!isVisibleToUser); disabled } @Override public void onAttach(Activity activity) { super.onAttach(activity); m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext()); m_activity = (ViewComicActivity) activity; m_detector = new GestureDetector(m_activity, new GestureDetector.OnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { int width = getView().getWidth(); int x = Math.round(e.getX()); if (x <= width/10) { onLeftSideTapped(); return true; } else if (x >= width-(width/10)) { onRightSideTapped(); return true; } return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub return false; } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } }); m_detector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() { @Override public boolean onSingleTapConfirmed(MotionEvent e) { int width = getView().getWidth(); int x = Math.round(e.getX()); boolean fullScreenMode = m_prefs.getBoolean("use_full_screen", false); if (x > width/10 && x < width-(width/10)) { ActionBar bar = m_activity.getSupportActionBar(); if (bar.isShowing()) { bar.hide(); m_activity.hideSeekBar(true); if (fullScreenMode) { m_activity.hideSystemUI(true); } } else { m_activity.hideSeekBar(false); if (fullScreenMode) { m_activity.hideSystemUI(false); } bar.show(); } return true; } return false; } @Override public boolean onDoubleTap(MotionEvent e) { return false; } @Override public boolean onDoubleTapEvent(MotionEvent e) { return false; } }); } }