Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman-android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbinsky08 <timo@binsky.org>2022-08-26 22:13:48 +0300
committerbinsky08 <timo@binsky.org>2022-08-26 22:13:48 +0300
commit5f77ef740385b444d1e5284d4a44a6c38933dd3c (patch)
treef38b36cb6d42f497288ec67c46157f4ed59861db
parent7b75e3ce2681d8f1693a0d7fd138474d9c61d99c (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.java10
-rw-r--r--app/src/main/java/net/bierbaumer/otp_authenticator/TOTPHelper.java33
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);
+ }
+ };
+ }
}