Fix the last couple of issues with tap-to-reveal

This commit is contained in:
Alexander Bakker 2019-03-26 21:54:13 +01:00
parent c9b312a398
commit 14b8ba89c8
2 changed files with 27 additions and 30 deletions

View file

@ -208,7 +208,7 @@ public class EntryAdapter extends RecyclerView.Adapter<EntryHolder> implements I
@Override @Override
public void onClick(View v) { public void onClick(View v) {
int position = holder.getAdapterPosition(); int position = holder.getAdapterPosition();
if (_tapToReveal && !holder.codeIsRevealed()) { if (_tapToReveal && holder.isCodeHidden()) {
holder.revealCode(); holder.revealCode();
} else { } else {
_listener.onEntryClick(_shownEntries.get(position)); _listener.onEntryClick(_shownEntries.get(position));
@ -227,7 +227,7 @@ public class EntryAdapter extends RecyclerView.Adapter<EntryHolder> implements I
public void onClick(View v) { public void onClick(View v) {
// this will only be called if the entry is of type HotpInfo // this will only be called if the entry is of type HotpInfo
try { try {
((HotpInfo)entry.getInfo()).incrementCounter(); ((HotpInfo) entry.getInfo()).incrementCounter();
} catch (OtpInfoException e) { } catch (OtpInfoException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -267,12 +267,6 @@ public class EntryAdapter extends RecyclerView.Adapter<EntryHolder> implements I
return period; return period;
} }
@Override
public void onViewDetachedFromWindow(final EntryHolder holder) {
holder.hideCode();
super.onViewDetachedFromWindow(holder);
}
public boolean isPeriodUniform() { public boolean isPeriodUniform() {
return getUniformPeriod() != -1; return getUniformPeriod() != -1;
} }

View file

@ -29,8 +29,7 @@ public class EntryHolder extends RecyclerView.ViewHolder {
private View _currentView; private View _currentView;
private boolean _codeIsRevealed; private boolean _hidden;
private boolean _tapToReveal;
private int _tapToRevealTime; private int _tapToRevealTime;
private PeriodProgressBar _progressBar; private PeriodProgressBar _progressBar;
@ -55,7 +54,7 @@ public class EntryHolder extends RecyclerView.ViewHolder {
_refresher = new UiRefresher(new UiRefresher.Listener() { _refresher = new UiRefresher(new UiRefresher.Listener() {
@Override @Override
public void onRefresh() { public void onRefresh() {
if (!_tapToReveal) { if (!isCodeHidden()) {
refreshCode(); refreshCode();
} }
@ -71,9 +70,9 @@ public class EntryHolder extends RecyclerView.ViewHolder {
_hiddenHandler = new Handler(); _hiddenHandler = new Handler();
} }
public void setData(DatabaseEntry entry, boolean showAccountName, boolean showProgress, boolean tapToReveal) { public void setData(DatabaseEntry entry, boolean showAccountName, boolean showProgress, boolean hidden) {
_entry = entry; _entry = entry;
_tapToReveal = tapToReveal; _hidden = hidden;
// only show the progress bar if there is no uniform period and the entry type is TotpInfo // only show the progress bar if there is no uniform period and the entry type is TotpInfo
_progressBar.setVisibility(showProgress ? View.VISIBLE : View.GONE); _progressBar.setVisibility(showProgress ? View.VISIBLE : View.GONE);
@ -99,8 +98,11 @@ public class EntryHolder extends RecyclerView.ViewHolder {
_profileDrawable.setImageDrawable(drawable); _profileDrawable.setImageDrawable(drawable);
} }
if (tapToReveal) { // cancel any scheduled hideCode calls
_profileCode.setText(_currentView.getContext().getResources().getString(R.string.tap_to_reveal)); _hiddenHandler.removeCallbacksAndMessages(null);
if (_hidden) {
hideCode();
} else { } else {
refreshCode(); refreshCode();
} }
@ -123,30 +125,31 @@ public class EntryHolder extends RecyclerView.ViewHolder {
} }
public void refreshCode() { public void refreshCode() {
updateCode(); if (!isCodeHidden()) {
updateCode();
}
}
private void updateCode() {
String otp = _entry.getInfo().getOtp();
String text = otp.substring(0, (otp.length() / 2)
+ (otp.length() % 2)) + " "
+ otp.substring(otp.length() / 2);
_profileCode.setText(text);
} }
public void revealCode() { public void revealCode() {
updateCode(); updateCode();
_hiddenHandler.postDelayed(this::hideCode, _tapToRevealTime * 1000); _hiddenHandler.postDelayed(this::hideCode, _tapToRevealTime * 1000);
_codeIsRevealed = true; _hidden = false;
} }
private void updateCode() { private void hideCode() {
String otp = _entry.getInfo().getOtp();
int offset = 0;
if (otp.length() % 2 != 0) {
offset = 1;
}
_profileCode.setText(otp.substring(0, (otp.length() / 2) + offset) + " " + otp.substring(otp.length() / 2));
}
public void hideCode() {
_profileCode.setText(_currentView.getContext().getResources().getString(R.string.tap_to_reveal)); _profileCode.setText(_currentView.getContext().getResources().getString(R.string.tap_to_reveal));
_codeIsRevealed = false; _hidden = true;
} }
public boolean codeIsRevealed() { public boolean isCodeHidden() {
return _codeIsRevealed; return _hidden;
} }
} }