From: Nathaniel McCallum Date: Mon, 2 Dec 2013 23:18:10 +0000 (-0500) Subject: Resurrect refresh icon / circle progress bar X-Git-Url: http://pileus.org/git/?p=~andy%2Ffreeotp;a=commitdiff_plain;h=2a2678dc6b607dd11e4ac6debb5b308c4fa95fb1 Resurrect refresh icon / circle progress bar --- diff --git a/res/drawable-hdpi/generate.png b/res/drawable-hdpi/generate.png new file mode 100755 index 0000000..0f3ceec Binary files /dev/null and b/res/drawable-hdpi/generate.png differ diff --git a/res/drawable-mdpi/generate.png b/res/drawable-mdpi/generate.png new file mode 100755 index 0000000..ca28ba3 Binary files /dev/null and b/res/drawable-mdpi/generate.png differ diff --git a/res/drawable-xhdpi/generate.png b/res/drawable-xhdpi/generate.png new file mode 100755 index 0000000..a80b9ab Binary files /dev/null and b/res/drawable-xhdpi/generate.png differ diff --git a/res/layout/token.xml b/res/layout/token.xml index 9f5cd3d..d6ad3ef 100644 --- a/res/layout/token.xml +++ b/res/layout/token.xml @@ -19,52 +19,44 @@ - limitations under the License. --> - - - - + android:background="@drawable/token" > + android:layout_height="96dp" + android:orientation="vertical" > + + - - - - + + + + + + + diff --git a/src/org/fedorahosted/freeotp/CircleProgressBar.java b/src/org/fedorahosted/freeotp/CircleProgressBar.java new file mode 100644 index 0000000..b1c26cc --- /dev/null +++ b/src/org/fedorahosted/freeotp/CircleProgressBar.java @@ -0,0 +1,85 @@ +/* + * FreeOTP + * + * Authors: Nathaniel McCallum + * + * 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.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.Rect; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.widget.ProgressBar; + +public class CircleProgressBar extends ProgressBar { + private Paint paint; + private RectF rectf; + private Rect rect; + + public CircleProgressBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setup(); + } + + public CircleProgressBar(Context context, AttributeSet attrs) { + super(context, attrs); + setup(); + } + + public CircleProgressBar(Context context) { + super(context); + setup(); + } + + private void setup() { + paint = new Paint(); + rectf = new RectF(); + rect = new Rect(); + + paint.setARGB(0x99, 0x33, 0x33, 0x33); + paint.setAntiAlias(true); + paint.setStyle(Style.FILL_AND_STROKE); + } + + @Override + public synchronized void setProgress(int progress) { + super.setProgress(progress); + if (paint != null) { + int percent = progress * 100 / getMax(); + if (percent > 25 || progress == 0) + paint.setARGB(0x99, 0x33, 0x33, 0x33); + else + paint.setARGB(0x99, 0xff, 0xe0 * percent / 25, 0x00); + } + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + getDrawingRect(rect); + rect.left += getPaddingLeft() + 2; + rect.top += getPaddingTop() + 2; + rect.right -= getPaddingRight() + 2; + rect.bottom -= getPaddingBottom() + 2; + + rectf.set(rect); + canvas.drawArc(rectf, -90, getProgress() * 360 / getMax(), true, paint); + } +} diff --git a/src/org/fedorahosted/freeotp/Token.java b/src/org/fedorahosted/freeotp/Token.java index f087297..9acecb4 100644 --- a/src/org/fedorahosted/freeotp/Token.java +++ b/src/org/fedorahosted/freeotp/Token.java @@ -228,10 +228,10 @@ public class Token { long time = System.currentTimeMillis(); if (mType == TokenType.TOTP) - return (int) (time % (mPeriod * 1000) / mPeriod); + return 1000 - (int) (time % (mPeriod * 1000) / mPeriod); long state = (time - mLastCode) / 60; - return (int) (state > 1000 ? 1000 : state); + return 1000 - (int) (state > 1000 ? 1000 : state); } public Uri toUri() { diff --git a/src/org/fedorahosted/freeotp/UrgencyProgressBar.java b/src/org/fedorahosted/freeotp/UrgencyProgressBar.java deleted file mode 100644 index d9fe2f0..0000000 --- a/src/org/fedorahosted/freeotp/UrgencyProgressBar.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * FreeOTP - * - * Authors: Nathaniel McCallum - * - * 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.content.Context; -import android.graphics.Color; -import android.graphics.PorterDuff.Mode; -import android.util.AttributeSet; -import android.widget.ProgressBar; - -public class UrgencyProgressBar extends ProgressBar { - public UrgencyProgressBar(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public UrgencyProgressBar(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public UrgencyProgressBar(Context context) { - super(context); - } - - @Override - public synchronized void setProgress(int progress) { - super.setProgress(progress); - - int percent = progress * 100 / getMax(); - if (percent > 33 || progress == 0) - getProgressDrawable().clearColorFilter(); - else { - int green = 0xe0 * percent / 33; - getProgressDrawable().setColorFilter(Color.RED | (green << 8), Mode.SRC_IN); - } - } - - -} diff --git a/src/org/fedorahosted/freeotp/adapters/TokenAdapter.java b/src/org/fedorahosted/freeotp/adapters/TokenAdapter.java index 4824e20..8126aca 100644 --- a/src/org/fedorahosted/freeotp/adapters/TokenAdapter.java +++ b/src/org/fedorahosted/freeotp/adapters/TokenAdapter.java @@ -33,6 +33,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; +import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; @@ -44,6 +45,7 @@ public class TokenAdapter extends TokenPersistenceBaseAdapter { TextView label; TextView issuer; ProgressBar progress; + ImageView image; } private static class Ticker extends Handler { @@ -60,11 +62,18 @@ public class TokenAdapter extends TokenPersistenceBaseAdapter { return; ViewHolder holder = (ViewHolder) view.getTag(); - int progress = 1000 - holder.token.getProgress(); holder.code.setText(holder.token.getCode()); + + int progress = holder.token.getProgress(); holder.progress.setProgress(progress); if (progress > 0 && progress < 950) view.setEnabled(true); + + if (holder.token.getType() == TokenType.HOTP && progress == 0) { + holder.progress.setVisibility(View.GONE); + holder.image.setVisibility(View.VISIBLE); + } + start(); } @@ -107,6 +116,8 @@ public class TokenAdapter extends TokenPersistenceBaseAdapter { ViewHolder holder = (ViewHolder) v.getTag(); holder.token.increment(); holder.code.setText(holder.token.getCode()); + holder.progress.setVisibility(View.VISIBLE); + holder.image.setVisibility(View.GONE); save(holder.token); v.setEnabled(false); } @@ -114,10 +125,15 @@ public class TokenAdapter extends TokenPersistenceBaseAdapter { } view.setOnClickListener(ocl); - if (holder.token.getType() == TokenType.TOTP) + if (holder.token.getType() == TokenType.TOTP) { view.setBackgroundResource(R.drawable.token_normal); - else + holder.progress.setVisibility(View.VISIBLE); + holder.image.setVisibility(View.GONE); + } else { view.setBackgroundResource(R.drawable.token); + holder.progress.setVisibility(View.GONE); + holder.image.setVisibility(View.VISIBLE); + } } @Override @@ -129,6 +145,7 @@ public class TokenAdapter extends TokenPersistenceBaseAdapter { holder.label = (TextView) view.findViewById(R.id.label); holder.issuer = (TextView) view.findViewById(R.id.issuer); holder.progress = (ProgressBar) view.findViewById(R.id.progress); + holder.image = (ImageView) view.findViewById(R.id.image); view.setTag(holder); new Ticker(view).start();