diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index f24bbe7c13..7d3d1353b8 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -213,7 +213,7 @@ import static org.openintents.openpgp.OpenPgpSignatureResult.RESULT_VALID_KEY_UN public class FragmentMessages extends FragmentBase implements SharedPreferences.OnSharedPreferenceChangeListener { private ViewGroup view; - private SwipeRefreshLayout swipeRefresh; + private SwipeRefreshLayoutEx swipeRefresh; private TextView tvSupport; private ImageButton ibHintSupport; private ImageButton ibHintSwipe; @@ -1338,16 +1338,15 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. args.putLong("folder", folder); args.putString("type", type); - new SimpleTask() { + new SimpleTask() { @Override - protected Integer onExecute(Context context, Bundle args) { + protected Void onExecute(Context context, Bundle args) { long fid = args.getLong("folder"); String type = args.getString("type"); if (!ConnectionHelper.getNetworkState(context).isSuitable()) throw new IllegalStateException(context.getString(R.string.title_no_internet)); - int count; boolean now = true; boolean force = false; @@ -1370,8 +1369,6 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. folders.add(folder); } - count = folders.size(); - for (EntityFolder folder : folders) { EntityOperation.sync(context, folder.id, true); @@ -1399,13 +1396,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (!now) throw new IllegalArgumentException(context.getString(R.string.title_no_connection)); - return count; - } - - @Override - protected void onExecuted(Bundle args, Integer count) { - if (count > 0) - swipeRefresh.setRefreshing(true); + return null; } @Override @@ -3200,10 +3191,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. adapter.setZoom(zoom); // Restart spinner - if (swipeRefresh.isRefreshing()) { - swipeRefresh.setRefreshing(false); - swipeRefresh.setRefreshing(true); - } + swipeRefresh.resetRefreshing(); prefs.registerOnSharedPreferenceChangeListener(this); onSharedPreferenceChanged(prefs, "pro"); @@ -3872,8 +3860,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. else fabError.hide(); - if (refreshing != swipeRefresh.isRefreshing()) - swipeRefresh.setRefreshing(refreshing); + swipeRefresh.setRefreshing(refreshing); } private void loadMessages(final boolean top) { diff --git a/app/src/main/java/eu/faircode/email/SwipeRefreshLayoutEx.java b/app/src/main/java/eu/faircode/email/SwipeRefreshLayoutEx.java new file mode 100644 index 0000000000..825bd37e60 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/SwipeRefreshLayoutEx.java @@ -0,0 +1,77 @@ +package eu.faircode.email; + +/* + This file is part of FairEmail. + + FairEmail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + FairEmail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FairEmail. If not, see . + + Copyright 2018-2020 by Marcel Bokhorst (M66B) +*/ + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +public class SwipeRefreshLayoutEx extends SwipeRefreshLayout { + private boolean refreshing = false; + + private static final int DELAY_DISABLE = 1000; // milliseconds + + public SwipeRefreshLayoutEx(@NonNull Context context) { + super(context); + } + + public SwipeRefreshLayoutEx(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void setRefreshing(boolean refreshing) { + if (this.refreshing == refreshing) + return; + + this.refreshing = refreshing; + + removeCallbacks(delayedDisable); + + if (refreshing) + super.setRefreshing(refreshing); + else + postDelayed(delayedDisable, DELAY_DISABLE); + } + + @Override + public boolean isRefreshing() { + return this.refreshing; + } + + public void resetRefreshing() { + // Restart spinner after screen off, etc + if (super.isRefreshing()) { + super.setRefreshing(false); + super.setRefreshing(true); + } + } + + private final Runnable delayedDisable = new Runnable() { + @Override + public void run() { + if (!refreshing) + SwipeRefreshLayoutEx.super.setRefreshing(refreshing); + } + }; +} diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml index 560e2784ee..b2c754362c 100644 --- a/app/src/main/res/layout/fragment_messages.xml +++ b/app/src/main/res/layout/fragment_messages.xml @@ -6,7 +6,7 @@ android:layout_height="match_parent" tools:context="eu.faircode.email.ActivityView"> - - +