diff --git a/app/src/main/java/com/hippo/effect/ViewTransition.java b/app/src/main/java/com/hippo/effect/ViewTransition.java
index c007760f4..4fe665252 100644
--- a/app/src/main/java/com/hippo/effect/ViewTransition.java
+++ b/app/src/main/java/com/hippo/effect/ViewTransition.java
@@ -53,11 +53,11 @@ public class ViewTransition {
return mShownView;
}
- public void showView(int shownView) {
- showView(shownView, true);
+ public boolean showView(int shownView) {
+ return showView(shownView, true);
}
- public void showView(int shownView, boolean animation) {
+ public boolean showView(int shownView, boolean animation) {
View[] views = mViews;
int length = views.length;
if (shownView >= length || shownView < 0) {
@@ -104,6 +104,10 @@ public class ViewTransition {
}
}
}
+
+ return true;
+ } else {
+ return false;
}
}
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
index 7465e7fb3..368219cf7 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
@@ -683,6 +683,16 @@ public class GalleryListScene extends Scene implements SearchBar.Helper,
AppHandler.getInstance().post(mSearchBarPositionTask);
}
+ @Override
+ protected void onShowProgress() {
+ showSearchBar(true);
+ }
+
+ @Override
+ protected void onShowText() {
+ showSearchBar(true);
+ }
+
@Override
protected void getPageData(int taskId, int type, int page) {
try {
diff --git a/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java b/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java
index 9df241419..bccc7083d 100644
--- a/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java
+++ b/app/src/main/java/com/hippo/ehviewer/widget/ContentLayout.java
@@ -82,6 +82,19 @@ public class ContentLayout extends FrameLayout {
mImageView = mTipView.getChildAt(0);
mTextView = (TextView) mTipView.getChildAt(1);
+ mRefreshLayout.setHeaderColorSchemeResources(
+ R.color.loading_indicator_red,
+ R.color.loading_indicator_purple,
+ R.color.loading_indicator_blue,
+ R.color.loading_indicator_cyan,
+ R.color.loading_indicator_green,
+ R.color.loading_indicator_yellow);
+ mRefreshLayout.setFooterColorSchemeResources(
+ R.color.loading_indicator_red,
+ R.color.loading_indicator_blue,
+ R.color.loading_indicator_green,
+ R.color.loading_indicator_orange);
+
//
mRecyclerViewOriginTop = mRecyclerView.getPaddingTop();
mRecyclerViewOriginBottom = mRecyclerView.getPaddingBottom();
@@ -194,6 +207,12 @@ public class ContentLayout extends FrameLayout {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState){
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
+ // For footer refresh
+ if (mRefreshLayout.isAlmostBottom()) {
+ mRefreshLayout.requsetFooterRefresh();
+ }
+
+ // For current index
if (mPageVolume <= 0) {
return;
}
@@ -279,21 +298,29 @@ public class ContentLayout extends FrameLayout {
protected abstract void onScrollToPosition();
+ protected abstract void onShowProgress();
+
+ protected abstract void onShowText();
+
public void showContent() {
mViewTransition.showView(0);
}
public void showProgressBar() {
- showProgressBar(true);
+ mViewTransition.showView(1, false);
}
public void showProgressBar(boolean animation) {
- mViewTransition.showView(1, animation);
+ if (mViewTransition.showView(1, animation)) {
+ onShowProgress();
+ }
}
public void showText(CharSequence text) {
- mViewTransition.showView(2);
mTextView.setText(text);
+ if (mViewTransition.showView(2)) {
+ onShowText();
+ }
}
/**
diff --git a/app/src/main/java/com/hippo/widget/refreshlayout/RefreshLayout.java b/app/src/main/java/com/hippo/widget/refreshlayout/RefreshLayout.java
index 00bec6b15..3c3490a86 100644
--- a/app/src/main/java/com/hippo/widget/refreshlayout/RefreshLayout.java
+++ b/app/src/main/java/com/hippo/widget/refreshlayout/RefreshLayout.java
@@ -21,6 +21,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.support.v4.view.MotionEventCompat;
+import android.support.v4.view.ScrollingView;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
@@ -556,8 +557,7 @@ public class RefreshLayout extends ViewGroup {
public void setFooterColorSchemeResources(int colorRes1, int colorRes2, int colorRes3,
int colorRes4) {
final Resources res = getResources();
- setFooterColorSchemeColors(res.getColor(colorRes1), res.getColor(colorRes2),
- res.getColor(colorRes3), res.getColor(colorRes4));
+ setFooterColorSchemeColors(res.getColor(colorRes1), res.getColor(colorRes2), res.getColor(colorRes3), res.getColor(colorRes4));
}
/**
@@ -570,16 +570,23 @@ public class RefreshLayout extends ViewGroup {
mProgressBar.setColorScheme(color1, color2, color3, color4);
}
+ public void requsetFooterRefresh() {
+ if (isEnabled() && !mHeaderRefreshing && !mFooterRefreshing && mFooterEnable &&
+ (mFooterListener == null || mFooterListener.onFooterRefresh())) {
+ setFooterRefreshing(true);
+ }
+ }
+
public void setHeaderEnable(boolean headerEnable) {
mHeaderEnable = headerEnable;
- if (headerEnable == false && mHeaderRefreshing == true) {
+ if (!headerEnable && mHeaderRefreshing) {
setHeaderRefreshing(false);
}
}
public void setFooterEnable(boolean footerEnable) {
mFooterEnable = footerEnable;
- if (footerEnable == false && mFooterRefreshing == true) {
+ if (!footerEnable && mFooterRefreshing) {
setFooterRefreshing(false);
}
}
@@ -674,8 +681,7 @@ public class RefreshLayout extends ViewGroup {
getMeasuredWidth() - getPaddingLeft() - getPaddingRight(),
MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(
getMeasuredHeight() - getPaddingTop() - getPaddingBottom(), MeasureSpec.EXACTLY));
- mCircleView.measure(MeasureSpec.makeMeasureSpec(mCircleWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(mCircleHeight, MeasureSpec.EXACTLY));
+ mCircleView.measure(MeasureSpec.makeMeasureSpec(mCircleWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(mCircleHeight, MeasureSpec.EXACTLY));
if (!mUsingCustomStart && !mOriginalOffsetCalculated) {
mOriginalOffsetCalculated = true;
mCurrentTargetOffsetTop = mOriginalOffsetTop = -mCircleView.getMeasuredHeight();
@@ -716,12 +722,14 @@ public class RefreshLayout extends ViewGroup {
if (mTarget instanceof AbsListView) {
final AbsListView absListView = (AbsListView) mTarget;
return absListView.getLastVisiblePosition() > absListView.getCount() - 2;
+ } else if (mTarget instanceof ScrollingView) {
+ final ScrollingView scrollingView = (ScrollingView) mTarget;
+ final int offset = scrollingView.computeVerticalScrollOffset();
+ final int range = scrollingView.computeVerticalScrollRange() -
+ scrollingView.computeVerticalScrollExtent();
+ return offset >= range;
} else {
- if (android.os.Build.VERSION.SDK_INT >= 14) {
- return !ViewCompat.canScrollVertically(mTarget, getHeight() / 4);
- } else {
- return true;
- }
+ return !ViewCompat.canScrollVertically(mTarget, 1);
}
}
@@ -735,14 +743,6 @@ public class RefreshLayout extends ViewGroup {
return false;
}
- if (mFooterEnable && isAlmostBottom()) {
- // Check footer
- if (mFooterListener == null || mFooterListener.onFooterRefresh()) {
- setFooterRefreshing(true);
- return false;
- }
- }
-
if (!mHeaderEnable || canChildScrollUp() || mFooterRefreshing) {
// Fail fast if we're not in a state where a swipe is possible
return false;
@@ -815,14 +815,6 @@ public class RefreshLayout extends ViewGroup {
return false;
}
- if (mFooterEnable && isAlmostBottom()) {
- // Check footer
- if (mFooterListener == null || mFooterListener.onFooterRefresh()) {
- setFooterRefreshing(true);
- return false;
- }
- }
-
if (!mHeaderEnable || canChildScrollUp() || mFooterRefreshing) {
// Fail fast if we're not in a state where a swipe is possible
return false;
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index d7beba4a5..74cab8b06 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -54,12 +54,14 @@
#ff009688
#ff00796b
-
#ffff5722
-
#ffff9800
-
#ffffc107
+ #ffaa00ff
+ #ff00acc1
+ #ff7cb342
+ #fff9a825
+ #ffff7043
#de000000
@@ -88,4 +90,12 @@
#ff333333
#ffeeff41
+ #ffe53935
+ @color/material_purple_a700
+ #ff1d87e4
+ @color/material_cyan_600
+ @color/material_light_green_600
+ @color/material_yellow_800
+ @color/material_deep_Orange_400
+