package com.wigwamlabs.veckify; import android.os.Handler; import java.util.Calendar; class TimeUpdater implements Runnable { private final Handler mHandler; private final Callback mCallback; TimeUpdater(Handler handler, Callback callback) { mHandler = handler; mCallback = callback; } void start() { mHandler.postDelayed(this, updateCurrentTime()); } void stop() { mHandler.removeCallbacks(this); } @Override public void run() { final long timeToNextMinuteMs = updateCurrentTime(); mHandler.postDelayed(this, timeToNextMinuteMs); } private long updateCurrentTime() { final Calendar cal = Calendar.getInstance(); // calculate current time and time to next minute final int secs = cal.get(Calendar.SECOND); int secsToNextMinute = 60 - secs; if (secsToNextMinute < 2) { // allow for some slack in scheduling cal.add(Calendar.MINUTE, 1); secsToNextMinute += 60; } mCallback.onTimeUpdated(cal); return secsToNextMinute * 1000; } interface Callback { void onTimeUpdated(Calendar cal); } }