/* * Copyright (C) 2014 The Android Open Source Project * * 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 com.example.android.wearable.timer.util; /** Helper class to format the timer. Based on com.android.deskclock.timer.CountingTimerView. */ public final class TimerFormat { private static final String TWO_DIGITS = "%02d"; private static final String ONE_DIGIT = "%01d"; private static final String NEG_TWO_DIGITS = "-%02d"; private static final String NEG_ONE_DIGIT = "-%01d"; private static String mHours; private static String mMinutes; private static String mSeconds; private TimerFormat() { } /** * Update the time to display. Separates that time into the hours, minutes, seconds. * Copied and shortened from com.android.deskclock.timer.CountingTimerView. * * @param time new time to display - in milliseconds */ private static void setTime(long time) { boolean neg = false; boolean showNeg = false; String format; if (time < 0) { time = -time; neg = showNeg = true; } long seconds = time / 1000; long hundreds = (time - seconds * 1000) / 10; long minutes = seconds / 60; seconds = seconds - minutes * 60; long hours = minutes / 60; minutes = minutes - hours * 60; if (hours > 999) { hours = 0; } // The time can be between 0 and -1 seconds, but the "truncated" equivalent time of hours // and minutes and seconds could be zero, so since we do not show fractions of seconds // when counting down, do not show the minus sign. if (hours == 0 && minutes == 0 && seconds == 0) { showNeg = false; } // Normalize and check if it is 'time' to invalidate if (!neg && hundreds != 0) { seconds++; if (seconds == 60) { seconds = 0; minutes++; if (minutes == 60) { minutes = 0; hours++; } } } // Hours may be empty if (hours >= 10) { format = showNeg ? NEG_TWO_DIGITS : TWO_DIGITS; mHours = String.format(format, hours); } else if (hours > 0) { format = showNeg ? NEG_ONE_DIGIT : ONE_DIGIT; mHours = String.format(format, hours); } else { mHours = null; } // Minutes are never empty and when hours are non-empty, must be two digits if (minutes >= 10 || hours > 0) { format = (showNeg && hours == 0) ? NEG_TWO_DIGITS : TWO_DIGITS; mMinutes = String.format(format, minutes); } else { format = (showNeg && hours == 0) ? NEG_ONE_DIGIT : ONE_DIGIT; mMinutes = String.format(format, minutes); } // Seconds are always two digits mSeconds = String.format(TWO_DIGITS, seconds); } /** * Based on com.android.deskclock.timer.CountingTimerView. * * @param time the time to format. * @return nicely formatted time. */ public static String getTimeString(long time) { setTime(time); if (mHours == null) { return String.format("%s:%s", mMinutes, mSeconds); } return String.format("%s:%s:%s", mHours, mMinutes, mSeconds); } }