diff --git a/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHeaderTransformer.java b/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHeaderTransformer.java index 3fec8d91fb8b..b679459a3ac6 100644 --- a/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHeaderTransformer.java +++ b/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHeaderTransformer.java @@ -3,10 +3,13 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.Activity; +import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; +import android.widget.TextView; +import org.wordpress.android.util.NetworkUtils; import org.wordpress.android.util.R; import uk.co.senab.actionbarpulltorefresh.library.DefaultHeaderTransformer; @@ -15,10 +18,13 @@ public class PullToRefreshHeaderTransformer extends DefaultHeaderTransformer { private View mHeaderView; private ViewGroup mContentLayout; + private TextView mTextView; private long mAnimationDuration; private boolean mShowProgressBarOnly; private Animation mHeaderOutAnimation; private OnTopScrollChangedListener mOnTopScrollChangedListener; + private boolean mIsNetworkRefreshMode; + private Context mContext; public interface OnTopScrollChangedListener { public void onTopScrollChanged(boolean scrolledOnTop); @@ -28,11 +34,21 @@ public void setShowProgressBarOnly(boolean progressBarOnly) { mShowProgressBarOnly = progressBarOnly; } + public boolean isNetworkRefreshMode() { + return mIsNetworkRefreshMode; + } + + public void setNetworkRefreshMode(boolean isNetworkRefresh) { + mIsNetworkRefreshMode = isNetworkRefresh; + } + @Override public void onViewCreated(Activity activity, View headerView) { super.onViewCreated(activity, headerView); + mContext = activity.getBaseContext(); mHeaderView = headerView; mContentLayout = (ViewGroup) headerView.findViewById(R.id.ptr_content); + mTextView = (TextView) headerView.findViewById(R.id.ptr_text); mAnimationDuration = activity.getResources().getInteger(android.R.integer.config_shortAnimTime); } @@ -51,6 +67,12 @@ public boolean showHeaderView() { boolean changeVis = mHeaderView.getVisibility() != View.VISIBLE; mContentLayout.setVisibility(View.VISIBLE); if (changeVis) { + if (isNetworkAvailableOrNotChecked()) { + mTextView.setText(mContext.getText(R.string.pull_to_refresh_pull_label)); + } else { + // Network mode enabled and network not available: show a different PTR label + mTextView.setText(mContext.getText(R.string.pull_to_refresh_pull_no_network_label)); + } mHeaderView.setVisibility(View.VISIBLE); AnimatorSet animSet = new AnimatorSet(); ObjectAnimator alphaAnim = ObjectAnimator.ofFloat(mHeaderView, "alpha", 0f, 1f); @@ -96,4 +118,8 @@ public void onTopScrollChanged(boolean scrolledOnTop) { public void setOnTopScrollChangedListener(OnTopScrollChangedListener listener) { mOnTopScrollChangedListener = listener; } + + public boolean isNetworkAvailableOrNotChecked() { + return !mIsNetworkRefreshMode || NetworkUtils.isNetworkAvailable(mContext); + } } diff --git a/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHelper.java b/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHelper.java index 3c7b4661955d..dffdb6ecdbba 100644 --- a/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHelper.java +++ b/WordPressUtils/src/main/java/org/wordpress/android/util/ptr/PullToRefreshHelper.java @@ -66,6 +66,14 @@ public boolean isReadyForPull(View view, float v, float v2) { setupWizard.setup(mPullToRefreshLayout); } + /** + * Once set, each PTR action will check for network connectivity. If there is thes network is not available + * (airplane mode for instance), the message will be changed from "Pull to refresh..." to "Can't refresh..." + */ + public void setNetworkRefreshMode(boolean refreshing) { + mHeaderTransformer.setNetworkRefreshMode(refreshing); + } + public void setRefreshing(boolean refreshing) { mHeaderTransformer.setShowProgressBarOnly(refreshing); mPullToRefreshLayout.setRefreshing(refreshing); @@ -77,7 +85,11 @@ public boolean isRefreshing() { @Override public void onRefreshStarted(View view) { - mRefreshListener.onRefreshStarted(view); + if (mHeaderTransformer.isNetworkAvailableOrNotChecked()) { + mRefreshListener.onRefreshStarted(view); + } else { + setRefreshing(false); + } } public interface RefreshListener { @@ -103,7 +115,7 @@ public void refreshAction() { } Editor editor = preferences.edit(); editor.putInt(REFRESH_BUTTON_HIT_COUNT, refreshHits); - editor.commit(); + editor.apply(); } public void registerReceiver(Context context) { diff --git a/WordPressUtils/src/main/res/values/strings.xml b/WordPressUtils/src/main/res/values/strings.xml index d30fe10a6c4e..e7b2542c338f 100644 --- a/WordPressUtils/src/main/res/values/strings.xml +++ b/WordPressUtils/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ Tip: Pull down to refresh + No network, can\'t refresh There is no network available