From a968341b118f5273ef295cec1258c70c89dc58a1 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 30 Nov 2012 13:23:06 +0300 Subject: add a small locking swipe threshold --- src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java b/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java index f3399fd..de8a7da 100644 --- a/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java +++ b/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java @@ -122,7 +122,7 @@ public class ImageViewTouch extends ImageViewTouchBase { if (mScaleChangedListener != null) { RectF bitmapRect = getBitmapRect(); - mScaleChangedListener.onScaleChanged(mCurrentScaleFactor, getWidth() >= (bitmapRect.right - bitmapRect.left)); + mScaleChangedListener.onScaleChanged(mCurrentScaleFactor, getWidth() >= (bitmapRect.right - bitmapRect.left) - 3); } } -- cgit v1.2.3 From 88e230ef42ff4c6efb4eab752cc2c44fc0e21d4c Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 30 Nov 2012 13:48:41 +0300 Subject: implement seamless scroll/flick in viewpager --- .../android/library/imagezoom/ImageViewTouch.java | 6 ++-- src/org/fox/ttcomics/ComicFragment.java | 34 ++++++++++++++++++---- src/org/fox/ttcomics/ComicPager.java | 12 -------- src/org/fox/ttcomics/CommonActivity.java | 6 ++-- src/org/fox/ttcomics/ViewPager.java | 34 +++++++++------------- 5 files changed, 46 insertions(+), 46 deletions(-) (limited to 'src') diff --git a/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java b/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java index de8a7da..73392b1 100644 --- a/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java +++ b/src/it/sephiroth/android/library/imagezoom/ImageViewTouch.java @@ -7,7 +7,6 @@ import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; -import android.view.Display; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; @@ -34,7 +33,7 @@ public class ImageViewTouch extends ImageViewTouchBase { private OnImageViewTouchDoubleTapListener doubleTapListener; public interface OnScaleChangedListener { - public void onScaleChanged(float scale, boolean widthFits); + public void onScaleChanged(float scale); } protected OnScaleChangedListener mScaleChangedListener; @@ -121,8 +120,7 @@ public class ImageViewTouch extends ImageViewTouchBase { if ( !mScaleDetector.isInProgress() ) mCurrentScaleFactor = scale; if (mScaleChangedListener != null) { - RectF bitmapRect = getBitmapRect(); - mScaleChangedListener.onScaleChanged(mCurrentScaleFactor, getWidth() >= (bitmapRect.right - bitmapRect.left) - 3); + mScaleChangedListener.onScaleChanged(mCurrentScaleFactor); } } diff --git a/src/org/fox/ttcomics/ComicFragment.java b/src/org/fox/ttcomics/ComicFragment.java index da34ce4..d55b102 100644 --- a/src/org/fox/ttcomics/ComicFragment.java +++ b/src/org/fox/ttcomics/ComicFragment.java @@ -111,12 +111,12 @@ public class ComicFragment extends Fragment { image.setOnScaleChangedListener(new ImageViewTouch.OnScaleChangedListener() { @Override - public void onScaleChanged(float scale, boolean widthFits) { - ViewPager pager = (ViewPager) getActivity().findViewById(R.id.comics_pager); + public void onScaleChanged(float scale) { + /* ViewPager pager = (ViewPager) getActivity().findViewById(R.id.comics_pager); if (pager != null) { pager.setPagingEnabled(widthFits); - } + } */ } }); @@ -154,11 +154,33 @@ public class ComicFragment extends Fragment { } private void onLeftSideTapped() { - m_activity.selectPreviousComic(); + ImageViewTouch image = (ImageViewTouch) getView().findViewById(R.id.comic_image); + + if (image != null) { + boolean atLeftEdge = !image.canScroll(1); + + if (atLeftEdge) { + m_activity.selectPreviousComic(); + } + } } - + + public boolean canScroll(int direction) { + ImageViewTouch image = (ImageViewTouch) getView().findViewById(R.id.comic_image); + + return image.canScroll(direction); + } + private void onRightSideTapped() { - m_activity.selectNextComic(); + ImageViewTouch image = (ImageViewTouch) getView().findViewById(R.id.comic_image); + + if (image != null) { + boolean atRightEdge = !image.canScroll(-1); + + if (atRightEdge) { + m_activity.selectNextComic(); + } + } } @Override diff --git a/src/org/fox/ttcomics/ComicPager.java b/src/org/fox/ttcomics/ComicPager.java index ab40936..934aaa7 100644 --- a/src/org/fox/ttcomics/ComicPager.java +++ b/src/org/fox/ttcomics/ComicPager.java @@ -164,17 +164,5 @@ public class ComicPager extends Fragment { out.putString("fileName", m_fileName); } - - public boolean isPagingEnabled() { - - ViewPager pager = (ViewPager) getView().findViewById(R.id.comics_pager); - - if (pager != null) { - return pager.isPagingEnabled(); - } - - return false; - } - } diff --git a/src/org/fox/ttcomics/CommonActivity.java b/src/org/fox/ttcomics/CommonActivity.java index 873ccd3..d535fe6 100644 --- a/src/org/fox/ttcomics/CommonActivity.java +++ b/src/org/fox/ttcomics/CommonActivity.java @@ -492,7 +492,7 @@ public class CommonActivity extends FragmentActivity { public void selectPreviousComic() { ComicPager frag = (ComicPager) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_PAGER); - if (frag != null && frag.isAdded() && frag.getPosition() > 0 && frag.isPagingEnabled()) { + if (frag != null && frag.isAdded() && frag.getPosition() > 0) { frag.setCurrentItem(frag.getPosition() - 1); } } @@ -500,11 +500,9 @@ public class CommonActivity extends FragmentActivity { public void selectNextComic() { ComicPager frag = (ComicPager) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_PAGER); - if (frag != null && frag.isAdded() && frag.getPosition() < frag.getCount()-1 && frag.isPagingEnabled()) { + if (frag != null && frag.isAdded() && frag.getPosition() < frag.getCount()-1) { frag.setCurrentItem(frag.getPosition() + 1); } - - } public void cleanupSqliteCache(String baseDir) { diff --git a/src/org/fox/ttcomics/ViewPager.java b/src/org/fox/ttcomics/ViewPager.java index c5d2f13..18bcc49 100644 --- a/src/org/fox/ttcomics/ViewPager.java +++ b/src/org/fox/ttcomics/ViewPager.java @@ -1,43 +1,37 @@ package org.fox.ttcomics; +import it.sephiroth.android.library.imagezoom.ImageViewTouch; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; +import android.view.View; public class ViewPager extends android.support.v4.view.ViewPager { private final String TAG = this.getClass().getSimpleName(); - private boolean enabled; public ViewPager(Context context, AttributeSet attrs) { super(context, attrs); - this.enabled = true; } + @Override + protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { + if (v instanceof ImageViewTouch) { + ImageViewTouch ivt = (ImageViewTouch) v; + return ivt.canScroll(dx); + } else { + return super.canScroll(v, checkV, dx, x, y); + } + } + @Override public boolean onTouchEvent(MotionEvent event) { - if (this.enabled) { - return super.onTouchEvent(event); - } - - return false; + return super.onTouchEvent(event); } @Override public boolean onInterceptTouchEvent(MotionEvent event) { - if (this.enabled) { - return super.onInterceptTouchEvent(event); - } - - return false; - } - - public void setPagingEnabled(boolean enabled) { - this.enabled = enabled; - } - - public boolean isPagingEnabled() { - return this.enabled; + return super.onInterceptTouchEvent(event); } } \ No newline at end of file -- cgit v1.2.3 From 90c7139c84105723d9ac280c4d8751f91471934e Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 30 Nov 2012 13:59:26 +0300 Subject: add menu item to lock orientation while reading; rename preferences to settings for consistency --- src/org/fox/ttcomics/ViewComicActivity.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src') diff --git a/src/org/fox/ttcomics/ViewComicActivity.java b/src/org/fox/ttcomics/ViewComicActivity.java index 48bfa9e..cb17495 100644 --- a/src/org/fox/ttcomics/ViewComicActivity.java +++ b/src/org/fox/ttcomics/ViewComicActivity.java @@ -12,6 +12,8 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; import android.os.Environment; @@ -33,6 +35,7 @@ public class ViewComicActivity extends CommonActivity { private String m_fileName; private String m_tmpFileName; private boolean m_fullScreen = false; + private boolean m_orientationLocked = false; @SuppressLint("NewApi") @Override @@ -54,8 +57,11 @@ public class ViewComicActivity extends CommonActivity { } else { m_fileName = savedInstanceState.getString("fileName"); m_tmpFileName = savedInstanceState.getString("tmpFileName"); + m_orientationLocked = savedInstanceState.getBoolean("orientationLocked"); } + setOrientationLock(m_orientationLocked); + if (!isCompatMode()) { getActionBar().setDisplayHomeAsUpEnabled(true); } @@ -91,6 +97,7 @@ public class ViewComicActivity extends CommonActivity { out.putString("fileName", m_fileName); out.putString("tmpFileName", m_tmpFileName); + out.putBoolean("orientationLocked", m_orientationLocked); } @Override @@ -162,10 +169,30 @@ public class ViewComicActivity extends CommonActivity { super.onActivityResult(requestCode, resultCode, intent); } + private void setOrientationLock(boolean locked) { + if (locked) { + int currentOrientation = getResources().getConfiguration().orientation; + + if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + } + else { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); + } + } else { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + } + + m_orientationLocked = locked; + } + public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_share: shareComic(); + return true; + case R.id.menu_toggle_orientation_lock: + setOrientationLock(!m_orientationLocked); return true; case R.id.menu_sync_location: m_syncClient.getPosition(sha1(new File(m_fileName).getName()), new SyncClient.PositionReceivedListener() { -- cgit v1.2.3 From f00ef55ad2687d0dd783c9b0b7a29d125ce13684 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 30 Nov 2012 14:19:40 +0300 Subject: add placeholder drawable for images which failed to load --- src/org/fox/ttcomics/ComicFragment.java | 1 + src/org/fox/ttcomics/ViewComicActivity.java | 2 +- src/org/fox/ttcomics/ViewPager.java | 7 ++++++- 3 files changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/org/fox/ttcomics/ComicFragment.java b/src/org/fox/ttcomics/ComicFragment.java index d55b102..21c50fd 100644 --- a/src/org/fox/ttcomics/ComicFragment.java +++ b/src/org/fox/ttcomics/ComicFragment.java @@ -102,6 +102,7 @@ public class ComicFragment extends Fragment { image.setImageBitmap(result); } else { activity.toast(R.string.error_loading_image); + image.setImageResource(R.drawable.badimage); } } } diff --git a/src/org/fox/ttcomics/ViewComicActivity.java b/src/org/fox/ttcomics/ViewComicActivity.java index cb17495..95917c5 100644 --- a/src/org/fox/ttcomics/ViewComicActivity.java +++ b/src/org/fox/ttcomics/ViewComicActivity.java @@ -110,7 +110,7 @@ public class ViewComicActivity extends CommonActivity { // upload progress if (m_prefs.getBoolean("use_position_sync", false) && m_syncClient.hasOwner()) { - toast(R.string.sync_uploading); + //toast(R.string.sync_uploading); m_syncClient.setPosition(sha1(new File(m_fileName).getName()), getLastPosition(m_fileName)); } } diff --git a/src/org/fox/ttcomics/ViewPager.java b/src/org/fox/ttcomics/ViewPager.java index 18bcc49..6d9c68f 100644 --- a/src/org/fox/ttcomics/ViewPager.java +++ b/src/org/fox/ttcomics/ViewPager.java @@ -19,7 +19,12 @@ public class ViewPager extends android.support.v4.view.ViewPager { protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { if (v instanceof ImageViewTouch) { ImageViewTouch ivt = (ImageViewTouch) v; - return ivt.canScroll(dx); + try { + return ivt.canScroll(dx); + } catch (NullPointerException e) { + // bad image, etc + return false; + } } else { return super.canScroll(v, checkV, dx, x, y); } -- cgit v1.2.3