Abstract the refresh loop away into a helper class

This commit is contained in:
Alexander Bakker 2018-06-05 19:03:02 +02:00
parent 3f3863a187
commit 9859011a6d
3 changed files with 78 additions and 48 deletions

View file

@ -0,0 +1,41 @@
package me.impy.aegis.helpers;
import android.os.Handler;
public class UIRefresher {
private boolean _running;
private Listener _listener;
private Handler _handler;
public UIRefresher(Listener listener) {
_listener = listener;
_handler = new Handler();
}
public void start() {
if (_running) {
return;
}
_running = true;
_listener.onRefresh();
_handler.postDelayed(new Runnable() {
@Override
public void run() {
if (_running) {
_listener.onRefresh();
_handler.postDelayed(this, _listener.getMillisTillNextRefresh());
}
}
}, _listener.getMillisTillNextRefresh());
}
public void stop() {
_running = false;
}
public interface Listener {
void onRefresh();
long getMillisTillNextRefresh();
}
}

View file

@ -1,7 +1,6 @@
package me.impy.aegis.ui.views;
import android.graphics.PorterDuff;
import android.os.Handler;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
@ -10,6 +9,7 @@ import android.widget.TextView;
import com.amulyakhare.textdrawable.TextDrawable;
import me.impy.aegis.R;
import me.impy.aegis.helpers.UIRefresher;
public class KeyProfileHolder extends RecyclerView.ViewHolder {
private TextView _profileName;
@ -20,20 +20,31 @@ public class KeyProfileHolder extends RecyclerView.ViewHolder {
private PeriodProgressBar _progressBar;
private Handler _uiHandler;
private boolean _running = false;
private UIRefresher _refresher;
KeyProfileHolder(final View view) {
public KeyProfileHolder(final View view) {
super(view);
_profileName = view.findViewById(R.id.profile_name);
_profileCode = view.findViewById(R.id.profile_code);
_profileIssuer = view.findViewById(R.id.profile_issuer);
_profileDrawable = view.findViewById(R.id.ivTextDrawable);
_progressBar = view.findViewById(R.id.progressBar);
_uiHandler = new Handler();
_progressBar = view.findViewById(R.id.progressBar);
int primaryColorId = view.getContext().getResources().getColor(R.color.colorPrimary);
_progressBar.getProgressDrawable().setColorFilter(primaryColorId, PorterDuff.Mode.SRC_IN);
_refresher = new UIRefresher(new UIRefresher.Listener() {
@Override
public void onRefresh() {
refreshCode();
_progressBar.refresh();
}
@Override
public long getMillisTillNextRefresh() {
return _profile.getEntry().getInfo().getMillisTillNextRotation();
}
});
}
public void setData(KeyProfile profile, boolean showIssuer, boolean showProgress) {
@ -57,30 +68,11 @@ public class KeyProfileHolder extends RecyclerView.ViewHolder {
}
public void startRefreshLoop() {
if (_running) {
return;
}
_running = true;
refresh();
_uiHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (_running) {
refresh();
_uiHandler.postDelayed(this, _profile.getEntry().getInfo().getMillisTillNextRotation());
}
}
}, _profile.getEntry().getInfo().getMillisTillNextRotation());
_refresher.start();
}
public void stopRefreshLoop() {
_running = false;
}
private void refresh() {
refreshCode();
_progressBar.refresh();
_refresher.stop();
}
private void refreshCode() {

View file

@ -2,7 +2,6 @@ package me.impy.aegis.ui.views;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@ -15,16 +14,17 @@ import me.impy.aegis.R;
import me.impy.aegis.crypto.KeyInfo;
import me.impy.aegis.db.DatabaseEntry;
import me.impy.aegis.helpers.SimpleItemTouchHelperCallback;
import me.impy.aegis.helpers.UIRefresher;
public class KeyProfileView extends Fragment implements KeyProfileAdapter.Listener {
private KeyProfileAdapter _adapter;
private Listener _listener;
private PeriodProgressBar _progressBar;
private Handler _uiHandler;
private boolean _running = false;
private boolean _showProgress = false;
private UIRefresher _refresher;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -35,7 +35,6 @@ public class KeyProfileView extends Fragment implements KeyProfileAdapter.Listen
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_keyprofile_view, container, false);
_uiHandler = new Handler();
_progressBar = view.findViewById(R.id.progressBar);
int primaryColorId = getResources().getColor(R.color.colorPrimary);
_progressBar.getProgressDrawable().setColorFilter(primaryColorId, PorterDuff.Mode.SRC_IN);
@ -49,6 +48,18 @@ public class KeyProfileView extends Fragment implements KeyProfileAdapter.Listen
touchHelper.attachToRecyclerView(rvKeyProfiles);
rvKeyProfiles.setAdapter(_adapter);
_refresher = new UIRefresher(new UIRefresher.Listener() {
@Override
public void onRefresh() {
refresh();
}
@Override
public long getMillisTillNextRefresh() {
return KeyInfo.getMillisTillNextRotation(_adapter.getUniformPeriod());
}
});
return view;
}
@ -76,27 +87,13 @@ public class KeyProfileView extends Fragment implements KeyProfileAdapter.Listen
}
}
public void startRefreshLoop() {
if (_running) {
return;
}
_running = true;
refresh();
_uiHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (_running) {
refresh();
_uiHandler.postDelayed(this, KeyInfo.getMillisTillNextRotation(_adapter.getUniformPeriod()));
}
}
}, KeyInfo.getMillisTillNextRotation(_adapter.getUniformPeriod()));
private void startRefreshLoop() {
_refresher.start();
}
private void stopRefreshLoop() {
refresh();
_running = false;
_refresher.stop();
}
public void setListener(Listener listener) {