Skip to content

Commit 893ec6f

Browse files
committed
add a network mode in PullToRefreshHeaderTransformer to show a different message when network is disabled
1 parent f45e000 commit 893ec6f

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHeaderTransformer.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import android.animation.AnimatorSet;
44
import android.animation.ObjectAnimator;
55
import android.app.Activity;
6+
import android.content.Context;
67
import android.view.View;
78
import android.view.ViewGroup;
89
import android.view.animation.Animation;
10+
import android.widget.TextView;
911

12+
import org.wordpress.android.util.NetworkUtils;
1013
import org.wordpress.android.util.R;
1114

1215
import uk.co.senab.actionbarpulltorefresh.library.DefaultHeaderTransformer;
@@ -15,10 +18,13 @@
1518
public class PullToRefreshHeaderTransformer extends DefaultHeaderTransformer {
1619
private View mHeaderView;
1720
private ViewGroup mContentLayout;
21+
private TextView mTextView;
1822
private long mAnimationDuration;
1923
private boolean mShowProgressBarOnly;
2024
private Animation mHeaderOutAnimation;
2125
private OnTopScrollChangedListener mOnTopScrollChangedListener;
26+
private boolean mIsNetworkRefreshMode;
27+
private Context mContext;
2228

2329
public interface OnTopScrollChangedListener {
2430
public void onTopScrollChanged(boolean scrolledOnTop);
@@ -28,11 +34,21 @@ public void setShowProgressBarOnly(boolean progressBarOnly) {
2834
mShowProgressBarOnly = progressBarOnly;
2935
}
3036

37+
public boolean isNetworkRefreshMode() {
38+
return mIsNetworkRefreshMode;
39+
}
40+
41+
public void setNetworkRefreshMode(boolean isNetworkRefresh) {
42+
mIsNetworkRefreshMode = isNetworkRefresh;
43+
}
44+
3145
@Override
3246
public void onViewCreated(Activity activity, View headerView) {
3347
super.onViewCreated(activity, headerView);
48+
mContext = activity.getBaseContext();
3449
mHeaderView = headerView;
3550
mContentLayout = (ViewGroup) headerView.findViewById(R.id.ptr_content);
51+
mTextView = (TextView) headerView.findViewById(R.id.ptr_text);
3652
mAnimationDuration = activity.getResources().getInteger(android.R.integer.config_shortAnimTime);
3753
}
3854

@@ -51,6 +67,12 @@ public boolean showHeaderView() {
5167
boolean changeVis = mHeaderView.getVisibility() != View.VISIBLE;
5268
mContentLayout.setVisibility(View.VISIBLE);
5369
if (changeVis) {
70+
if (isNetworkAvailableOrNotChecked()) {
71+
mTextView.setText(mContext.getText(R.string.pull_to_refresh_pull_label));
72+
} else {
73+
// Network mode enabled and network not available: show a different PTR label
74+
mTextView.setText(mContext.getText(R.string.pull_to_refresh_pull_no_network_label));
75+
}
5476
mHeaderView.setVisibility(View.VISIBLE);
5577
AnimatorSet animSet = new AnimatorSet();
5678
ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(mHeaderView, "alpha", 0f, 1f);
@@ -96,4 +118,8 @@ public void onTopScrollChanged(boolean scrolledOnTop) {
96118
public void setOnTopScrollChangedListener(OnTopScrollChangedListener listener) {
97119
mOnTopScrollChangedListener = listener;
98120
}
121+
122+
public boolean isNetworkAvailableOrNotChecked() {
123+
return !mIsNetworkRefreshMode || NetworkUtils.isNetworkAvailable(mContext);
124+
}
99125
}

WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHelper.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ public boolean isReadyForPull(View view, float v, float v2) {
6666
setupWizard.setup(mPullToRefreshLayout);
6767
}
6868

69+
/**
70+
* Once set, each PTR action will check for network connectivity. If there is thes network is not available
71+
* (airplane mode for instance), the message will be changed from "Pull to refresh..." to "Can't refresh..."
72+
*/
73+
public void setNetworkRefreshMode(boolean refreshing) {
74+
mHeaderTransformer.setNetworkRefreshMode(refreshing);
75+
}
76+
6977
public void setRefreshing(boolean refreshing) {
7078
mHeaderTransformer.setShowProgressBarOnly(refreshing);
7179
mPullToRefreshLayout.setRefreshing(refreshing);
@@ -77,7 +85,11 @@ public boolean isRefreshing() {
7785

7886
@Override
7987
public void onRefreshStarted(View view) {
80-
mRefreshListener.onRefreshStarted(view);
88+
if (mHeaderTransformer.isNetworkAvailableOrNotChecked()) {
89+
mRefreshListener.onRefreshStarted(view);
90+
} else {
91+
setRefreshing(false);
92+
}
8193
}
8294

8395
public interface RefreshListener {
@@ -103,7 +115,7 @@ public void refreshAction() {
103115
}
104116
Editor editor = preferences.edit();
105117
editor.putInt(REFRESH_BUTTON_HIT_COUNT, refreshHits);
106-
editor.commit();
118+
editor.apply();
107119
}
108120

109121
public void registerReceiver(Context context) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
33
<string name="ptr_tip_message">Tip: Pull down to refresh</string>
4+
<string name="pull_to_refresh_pull_no_network_label">No network, can\'t refresh</string>
45
<string name="no_network_message">There is no network available</string>
56
</resources>

0 commit comments

Comments
 (0)