- Add interface for Token
- Add interface for TokenPersistence
- Update other classes to use interface to a greater extent
---
.../org/fedorahosted/freeotp/InternalToken.java | 10 +---
.../freeotp/InternalTokenPersistence.java | 4 +-
.../main/java/org/fedorahosted/freeotp/Token.java | 56 ++++++++++++++++++++++
.../org/fedorahosted/freeotp/TokenAdapter.java | 12 ++---
.../java/org/fedorahosted/freeotp/TokenLayout.java | 8 ++--
.../org/fedorahosted/freeotp/TokenPersistence.java | 40 ++++++++++++++++
6 files changed, 109 insertions(+), 21 deletions(-)
create mode 100644 app/src/main/java/org/fedorahosted/freeotp/Token.java
create mode 100644 app/src/main/java/org/fedorahosted/freeotp/TokenPersistence.java
diff --git a/app/src/main/java/org/fedorahosted/freeotp/InternalToken.java
b/app/src/main/java/org/fedorahosted/freeotp/InternalToken.java
index bec97de..103f21a 100644
--- a/app/src/main/java/org/fedorahosted/freeotp/InternalToken.java
+++ b/app/src/main/java/org/fedorahosted/freeotp/InternalToken.java
@@ -33,15 +33,7 @@ import android.net.Uri;
import com.google.android.apps.authenticator.Base32String;
import com.google.android.apps.authenticator.Base32String.DecodingException;
-public class InternalToken {
- public static class TokenUriInvalidException extends Exception {
- private static final long serialVersionUID = -1108624734612362345L;
- }
-
- public static enum TokenType {
- HOTP, TOTP
- }
-
+public class InternalToken implements Token {
private String issuerInt;
private String issuerExt;
private String issuerAlt;
diff --git a/app/src/main/java/org/fedorahosted/freeotp/InternalTokenPersistence.java
b/app/src/main/java/org/fedorahosted/freeotp/InternalTokenPersistence.java
index 78af8c8..883a139 100644
--- a/app/src/main/java/org/fedorahosted/freeotp/InternalTokenPersistence.java
+++ b/app/src/main/java/org/fedorahosted/freeotp/InternalTokenPersistence.java
@@ -32,7 +32,7 @@ import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
-public class InternalTokenPersistence {
+public class InternalTokenPersistence implements TokenPersistence {
private static final String NAME = "tokens";
private static final String ORDER = "tokenOrder";
private final SharedPreferences prefs;
@@ -120,7 +120,7 @@ public class InternalTokenPersistence {
setTokenOrder(order).remove(key).apply();
}
- public void save(InternalToken token) {
+ public void save(Token token) {
prefs.edit().putString(token.getID(), gson.toJson(token)).apply();
}
diff --git a/app/src/main/java/org/fedorahosted/freeotp/Token.java
b/app/src/main/java/org/fedorahosted/freeotp/Token.java
new file mode 100644
index 0000000..2709bd2
--- /dev/null
+++ b/app/src/main/java/org/fedorahosted/freeotp/Token.java
@@ -0,0 +1,56 @@
+/*
+ * FreeOTP
+ *
+ * Authors: Nathaniel McCallum <npmccallum(a)redhat.com>
+ *
+ * Copyright (C) 2013 Nathaniel McCallum, Red Hat
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.fedorahosted.freeotp;
+
+import android.net.Uri;
+
+public interface Token {
+ public static class TokenUriInvalidException extends Exception {
+ private static final long serialVersionUID = -1108624734612362345L;
+ }
+
+ public static enum TokenType {
+ HOTP, TOTP
+ }
+
+ public String getID();
+
+ public String getIssuer();
+
+ public void setIssuer(String issuer);
+
+ public String getLabel();
+
+ public void setLabel(String label);
+
+ public int getDigits();
+
+ // NOTE: This may change internal data. You MUST save the token immediately.
+ public TokenCode generateCodes();
+
+ public TokenType getType();
+
+ public Uri getImage();
+
+ public void setImage(Uri image);
+
+ public boolean isInternal();
+}
diff --git a/app/src/main/java/org/fedorahosted/freeotp/TokenAdapter.java
b/app/src/main/java/org/fedorahosted/freeotp/TokenAdapter.java
index b2f035e..2e521f8 100644
--- a/app/src/main/java/org/fedorahosted/freeotp/TokenAdapter.java
+++ b/app/src/main/java/org/fedorahosted/freeotp/TokenAdapter.java
@@ -39,12 +39,12 @@ import java.util.HashMap;
import java.util.Map;
public class TokenAdapter extends BaseReorderableAdapter {
- private final InternalTokenPersistence mTokenPersistence;
+ private final TokenPersistence mTokenPersistence;
private final LayoutInflater mLayoutInflater;
private final ClipboardManager mClipMan;
private final Map<String, TokenCode> mTokenCodes;
- public TokenAdapter(Context ctx, InternalTokenPersistence tokenPersistence) {
+ public TokenAdapter(Context ctx, TokenPersistence tokenPersistence) {
mTokenPersistence = tokenPersistence;
mLayoutInflater = (LayoutInflater)
ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mClipMan = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE);
@@ -68,7 +68,7 @@ public class TokenAdapter extends BaseReorderableAdapter {
}
@Override
- public InternalToken getItem(int position) {
+ public Token getItem(int position) {
return mTokenPersistence.get(position);
}
@@ -87,7 +87,7 @@ public class TokenAdapter extends BaseReorderableAdapter {
protected void bindView(View view, final int position) {
final Context ctx = view.getContext();
TokenLayout tl = (TokenLayout) view;
- InternalToken token = getItem(position);
+ Token token = getItem(position);
int menu = token.isInternal() ? R.menu.editable_token : R.menu.token;
@@ -117,10 +117,10 @@ public class TokenAdapter extends BaseReorderableAdapter {
tl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- InternalTokenPersistence tp = TokenAdapter.this.mTokenPersistence;
+ TokenPersistence tp = TokenAdapter.this.mTokenPersistence;
// Increment the token.
- InternalToken token = tp.get(position);
+ Token token = tp.get(position);
TokenCode codes = token.generateCodes();
tp.save(token);
diff --git a/app/src/main/java/org/fedorahosted/freeotp/TokenLayout.java
b/app/src/main/java/org/fedorahosted/freeotp/TokenLayout.java
index a4660ad..f2dbbd0 100644
--- a/app/src/main/java/org/fedorahosted/freeotp/TokenLayout.java
+++ b/app/src/main/java/org/fedorahosted/freeotp/TokenLayout.java
@@ -26,7 +26,7 @@ public class TokenLayout extends FrameLayout implements
View.OnClickListener, Ru
private PopupMenu mPopupMenu;
private TokenCode mCodes;
- private InternalToken.TokenType mType;
+ private Token.TokenType mType;
private String mPlaceholder;
private long mStartTime;
@@ -58,7 +58,7 @@ public class TokenLayout extends FrameLayout implements
View.OnClickListener, Ru
mMenu.setOnClickListener(this);
}
- public void bind(InternalToken token, int menu, PopupMenu.OnMenuItemClickListener
micl) {
+ public void bind(Token token, int menu, PopupMenu.OnMenuItemClickListener micl) {
mCodes = null;
// Setup menu.
@@ -106,7 +106,7 @@ public class TokenLayout extends FrameLayout implements
View.OnClickListener, Ru
view.startAnimation(a);
}
- public void start(InternalToken.TokenType type, TokenCode codes, boolean animate) {
+ public void start(Token.TokenType type, TokenCode codes, boolean animate) {
mCodes = codes;
mType = type;
@@ -147,7 +147,7 @@ public class TokenLayout extends FrameLayout implements
View.OnClickListener, Ru
// Update the fields
mCode.setText(code);
mProgressInner.setProgress(mCodes.getCurrentProgress());
- if (mType != InternalToken.TokenType.HOTP)
+ if (mType != Token.TokenType.HOTP)
mProgressOuter.setProgress(mCodes.getTotalProgress());
postDelayed(this, 100);
diff --git a/app/src/main/java/org/fedorahosted/freeotp/TokenPersistence.java
b/app/src/main/java/org/fedorahosted/freeotp/TokenPersistence.java
new file mode 100644
index 0000000..889b9fb
--- /dev/null
+++ b/app/src/main/java/org/fedorahosted/freeotp/TokenPersistence.java
@@ -0,0 +1,40 @@
+/*
+ * FreeOTP
+ *
+ * Authors: Nathaniel McCallum <npmccallum(a)redhat.com>
+ *
+ * Copyright (C) 2013 Nathaniel McCallum, Red Hat
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.fedorahosted.freeotp;
+
+import java.lang.reflect.Type;
+import java.util.LinkedList;
+import java.util.List;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import com.google.gson.reflect.TypeToken;
+
+public interface TokenPersistence {
+ public Token addWithToast(Context ctx, String uri);
+ public int length();
+ public Token get(int position);
+ public void add(InternalToken token) throws Token.TokenUriInvalidException;
+ public void move(int fromPosition, int toPosition);
+ public void delete(int position);
+ public void save(Token token);
+ public boolean isMovable();
+}
--
1.9.1