| /* |
| * 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); |
| |
| } |
| } |