diff options
author | binsky08 <timo@binsky.org> | 2022-08-26 22:13:48 +0300 |
---|---|---|
committer | binsky08 <timo@binsky.org> | 2022-08-26 22:13:48 +0300 |
commit | 5f77ef740385b444d1e5284d4a44a6c38933dd3c (patch) | |
tree | f38b36cb6d42f497288ec67c46157f4ed59861db | |
parent | 7b75e3ce2681d8f1693a0d7fd138474d9c61d99c (diff) |
implement live OTP token updates based on the custom settings
Signed-off-by: binsky08 <timo@binsky.org>
-rw-r--r-- | app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java | 10 | ||||
-rw-r--r-- | app/src/main/java/net/bierbaumer/otp_authenticator/TOTPHelper.java | 33 |
2 files changed, 36 insertions, 7 deletions
diff --git a/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java b/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java index 951772c..558d7fb 100644 --- a/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java +++ b/app/src/main/java/es/wolfi/app/passman/fragments/CredentialEditFragment.java @@ -222,17 +222,15 @@ public class CredentialEditFragment extends Fragment implements View.OnClickList otpPeriod = otpObj.getInt("period"); } - int finalOtpDigits = otpDigits; - int finalOtpPeriod = otpPeriod; - otp_digits.setText(String.valueOf(finalOtpDigits)); - otp_period.setText(String.valueOf(finalOtpPeriod)); + otp_digits.setText(String.valueOf(otpDigits)); + otp_period.setText(String.valueOf(otpPeriod)); if (otpObj.has("secret") && otpObj.getString("secret").length() > 4) { String otpSecret = otpObj.getString("secret"); otp_secret.setText(otpSecret); handler = new Handler(); - otp_refresh = TOTPHelper.run(handler, otp_progress, credential_otp, finalOtpDigits, finalOtpPeriod, otpSecret); + otp_refresh = TOTPHelper.runAndUpdate(handler, otp_progress, credential_otp, otp_digits, otp_period, otp_secret); } } catch (JSONException e) { e.printStackTrace(); @@ -300,7 +298,7 @@ public class CredentialEditFragment extends Fragment implements View.OnClickList return new View.OnClickListener() { @Override public void onClick(View view) { - if(otp_edit_extended.getVisibility() == View.VISIBLE) { + if (otp_edit_extended.getVisibility() == View.VISIBLE) { otp_edit_extended.setVisibility(View.INVISIBLE); otpEditCollapseExtendedButton.setRotation(-90); } else { diff --git a/app/src/main/java/net/bierbaumer/otp_authenticator/TOTPHelper.java b/app/src/main/java/net/bierbaumer/otp_authenticator/TOTPHelper.java index 46b1403..015eecc 100644 --- a/app/src/main/java/net/bierbaumer/otp_authenticator/TOTPHelper.java +++ b/app/src/main/java/net/bierbaumer/otp_authenticator/TOTPHelper.java @@ -20,6 +20,7 @@ package net.bierbaumer.otp_authenticator; import android.animation.ObjectAnimator; import android.os.Handler; import android.view.animation.LinearInterpolator; +import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; @@ -71,7 +72,7 @@ public class TOTPHelper { } public static Runnable run(Handler handler, ProgressBar otp_progress, TextView credential_otp, - int finalOtpDigits, int finalOtpPeriod, String otpSecret) { + int finalOtpDigits, int finalOtpPeriod, String otpSecret) { return new Runnable() { @Override public void run() { @@ -88,4 +89,34 @@ public class TOTPHelper { } }; } + + public static Runnable runAndUpdate(Handler handler, ProgressBar otp_progress, TextView credential_otp, + EditText otpDigits, EditText otpPeriod, EditText otpSecret) { + return new Runnable() { + @Override + public void run() { + String finalOtpSecret = otpSecret.getText().toString(); + + if (!finalOtpSecret.isEmpty() + && !otpPeriod.getText().toString().isEmpty() + && !otpDigits.getText().toString().isEmpty()) { + int finalOtpPeriod = Integer.parseInt(otpPeriod.getText().toString()); + int finalOtpDigits = Integer.parseInt(otpDigits.getText().toString()); + + otp_progress.setMax(finalOtpPeriod * 100); + int progress = (int) (System.currentTimeMillis() / 1000) % finalOtpPeriod; + otp_progress.setProgress(progress * 100); + + ObjectAnimator animation = ObjectAnimator.ofInt(otp_progress, "progress", (progress + 1) * 100); + animation.setDuration(1000); + animation.setInterpolator(new LinearInterpolator()); + animation.start(); + + credential_otp.setText(TOTPHelper.generate(new Base32().decode(finalOtpSecret), finalOtpDigits, finalOtpPeriod)); + } + + handler.postDelayed(this, 1000); + } + }; + } } |