From a8179865d6d302bf58040abc603746b2f5df4add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Sch=C3=A4ttgen?= Date: Tue, 16 Aug 2016 23:02:12 +0200 Subject: [PATCH] Added timers to update --- .../java/me/impy/aegis/KeyProfileAdapter.java | 62 ++++++++++++++++++- app/src/main/res/layout/card_keyprofile.xml | 27 ++++---- 2 files changed, 74 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/me/impy/aegis/KeyProfileAdapter.java b/app/src/main/java/me/impy/aegis/KeyProfileAdapter.java index ba585ccc..937bb627 100644 --- a/app/src/main/java/me/impy/aegis/KeyProfileAdapter.java +++ b/app/src/main/java/me/impy/aegis/KeyProfileAdapter.java @@ -1,5 +1,6 @@ package me.impy.aegis; +import android.os.Handler; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -7,27 +8,79 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import java.security.Key; import java.util.ArrayList; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; -public class KeyProfileAdapter extends RecyclerView.Adapter { +import me.impy.aegis.crypto.OTP; + +public class KeyProfileAdapter extends RecyclerView.Adapter { private ArrayList mKeyProfiles; + private final List lstHolders; + + private Handler mHandler = new Handler(); + private Runnable updateRemainingTimeRunnable = new Runnable() { + @Override + public void run() { + synchronized (lstHolders) { + for (KeyProfileHolder holder : lstHolders) { + holder.updateCode(); + } + } + } + }; public static class KeyProfileHolder extends RecyclerView.ViewHolder { TextView profileName; TextView profileCode; + KeyProfile keyProfile; KeyProfileHolder(View itemView) { super(itemView); profileName = (TextView) itemView.findViewById(R.id.profile_name); profileCode = (TextView) itemView.findViewById(R.id.profile_code); } + + public void setData(KeyProfile profile) { + this.keyProfile = profile; + profileName.setText(profile.Name); + profileCode.setText(profile.Code); + } + + public void updateCode() { + if (this.keyProfile == null) { + return; + } + String otp = ""; + try { + otp = OTP.generateOTP(this.keyProfile.KeyInfo); + } catch (Exception e) { + e.printStackTrace(); + } + profileCode.setText(otp.substring(0, 3) + " " + otp.substring(3)); + } } // Provide a suitable constructor (depends on the kind of dataset) public KeyProfileAdapter(ArrayList keyProfiles) { mKeyProfiles = keyProfiles; + lstHolders = new ArrayList<>(); + startUpdateTimer(); + } + + private void startUpdateTimer() { + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + mHandler.post(updateRemainingTimeRunnable); + } + //TODO: Replace delay with seconds that are left + }, 0, 5000); } // Create new views (invoked by the layout manager) @@ -44,8 +97,11 @@ public class KeyProfileAdapter extends RecyclerView.Adapter + android:layout_alignParentStart="false"> - - + android:layout_alignParentLeft="true" + android:textSize="36sp" + android:textColor="?android:attr/textColorPrimary"/> + + +