diff options
author | Daniel Sandler <dsandler@google.com> | 2010-01-04 16:14:28 -0600 |
---|---|---|
committer | Daniel Sandler <dsandler@google.com> | 2010-01-05 14:46:27 -0500 |
commit | 01d49d700e55c3c32b8b1bc2c816be6cc76e6409 (patch) | |
tree | 8f576167547291fdea94bea27bd265aafd608db3 | |
parent | 31e5ba9c7f1205ce4413619752e1ad9e33c51ce1 (diff) | |
download | Basic-eclair-release.tar.gz |
Fix http://b/2352067 .android-2.1_r2.1p2android-2.1_r2.1pandroid-2.1_r2eclair-releaseeclair-passion-release
Time.month ranges over 0..11, not 1..12. Fixed code to deal
properly with this.
Additionally, months with 31 days will crash. Fixed that too.
While we're at it, fix http://b/2354796 (the seconds arc
wasn't synchronized with wall-clock seconds).
Finally, added a bit of additional crash defense in case of
other exceptional situations (e.g. leap seconds, API bugs,
solar flares...)
Change-Id: If42c8fd408cf6619a16541a9661b39e33c5d47a5
-rw-r--r-- | src/com/android/wallpaper/polarclock/PolarClockWallpaper.java | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/com/android/wallpaper/polarclock/PolarClockWallpaper.java b/src/com/android/wallpaper/polarclock/PolarClockWallpaper.java index d8d1766..a73efbb 100644 --- a/src/com/android/wallpaper/polarclock/PolarClockWallpaper.java +++ b/src/com/android/wallpaper/polarclock/PolarClockWallpaper.java @@ -68,6 +68,7 @@ public class PolarClockWallpaper extends WallpaperService { public abstract int getBackgroundColor(); + // forAngle should be on [0.0,1.0) but 1.0 must be tolerated public abstract int getSecondColor(float forAngle); public abstract int getMinuteColor(float forAngle); @@ -224,26 +225,31 @@ public class PolarClockWallpaper extends WallpaperService { @Override public int getSecondColor(float forAngle) { + if (forAngle >= 1.0f || forAngle < 0.0f) forAngle = 0.0f; return mColors[((int) (forAngle * COLORS_CACHE_COUNT))]; } @Override public int getMinuteColor(float forAngle) { + if (forAngle >= 1.0f || forAngle < 0.0f) forAngle = 0.0f; return mColors[((int) (forAngle * COLORS_CACHE_COUNT))]; } @Override public int getHourColor(float forAngle) { + if (forAngle >= 1.0f || forAngle < 0.0f) forAngle = 0.0f; return mColors[((int) (forAngle * COLORS_CACHE_COUNT))]; } @Override public int getDayColor(float forAngle) { + if (forAngle >= 1.0f || forAngle < 0.0f) forAngle = 0.0f; return mColors[((int) (forAngle * COLORS_CACHE_COUNT))]; } @Override public int getMonthColor(float forAngle) { + if (forAngle >= 1.0f || forAngle < 0.0f) forAngle = 0.0f; return mColors[((int) (forAngle * COLORS_CACHE_COUNT))]; } @@ -292,7 +298,6 @@ public class PolarClockWallpaper extends WallpaperService { private boolean mVariableLineWidth; private boolean mWatcherRegistered; - private float mStartTime; private Time mCalendar; private final Paint mPaint = new Paint(); @@ -353,7 +358,6 @@ public class PolarClockWallpaper extends WallpaperService { mCalendar = new Time(); mCalendar.setToNow(); - mStartTime = mCalendar.second * 1000.0f; final Paint paint = mPaint; paint.setAntiAlias(true); @@ -415,7 +419,6 @@ public class PolarClockWallpaper extends WallpaperService { } mCalendar = new Time(); mCalendar.setToNow(); - mStartTime = mCalendar.second * 1000.0f; } else { if (mWatcherRegistered) { mWatcherRegistered = false; @@ -469,7 +472,8 @@ public class PolarClockWallpaper extends WallpaperService { final Time calendar = mCalendar; final Paint paint = mPaint; - calendar.setToNow(); + final long millis = System.currentTimeMillis(); + calendar.set(millis); calendar.normalize(false); int s = width / 2; @@ -492,9 +496,8 @@ public class PolarClockWallpaper extends WallpaperService { if (mShowSeconds) { // Draw seconds - angle = ((mStartTime + SystemClock.elapsedRealtime()) % 60000) / 60000.0f; - if (angle < 0) angle = -angle; - + angle = (float) (millis % 60000) / 60000.0f; + //Log.d("PolarClock", "millis=" + millis + ", angle=" + angle); paint.setColor(mPalette.getSecondColor(angle)); if (mVariableLineWidth) { @@ -548,7 +551,7 @@ public class PolarClockWallpaper extends WallpaperService { size -= (SMALL_GAP + lastRingThickness); rect.set(-size, -size, size, size); - angle = (calendar.month - 1) / 11.0f; + angle = (calendar.month) / 11.0f; // NB: month is already on [0..11] paint.setColor(mPalette.getMonthColor(angle)); |