1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.example.android.wearable.timer.util; 18 19 /** Helper class to format the timer. Based on com.android.deskclock.timer.CountingTimerView. */ 20 public final class TimerFormat { 21 22 private static final String TWO_DIGITS = "%02d"; 23 24 private static final String ONE_DIGIT = "%01d"; 25 26 private static final String NEG_TWO_DIGITS = "-%02d"; 27 28 private static final String NEG_ONE_DIGIT = "-%01d"; 29 30 private static String mHours; 31 32 private static String mMinutes; 33 34 private static String mSeconds; 35 TimerFormat()36 private TimerFormat() { 37 38 } 39 40 /** 41 * Update the time to display. Separates that time into the hours, minutes, seconds. 42 * Copied and shortened from com.android.deskclock.timer.CountingTimerView. 43 * 44 * @param time new time to display - in milliseconds 45 */ setTime(long time)46 private static void setTime(long time) { 47 boolean neg = false; 48 boolean showNeg = false; 49 String format; 50 if (time < 0) { 51 time = -time; 52 neg = showNeg = true; 53 } 54 long seconds = time / 1000; 55 long hundreds = (time - seconds * 1000) / 10; 56 long minutes = seconds / 60; 57 seconds = seconds - minutes * 60; 58 long hours = minutes / 60; 59 minutes = minutes - hours * 60; 60 if (hours > 999) { 61 hours = 0; 62 } 63 // The time can be between 0 and -1 seconds, but the "truncated" equivalent time of hours 64 // and minutes and seconds could be zero, so since we do not show fractions of seconds 65 // when counting down, do not show the minus sign. 66 if (hours == 0 && minutes == 0 && seconds == 0) { 67 showNeg = false; 68 } 69 70 // Normalize and check if it is 'time' to invalidate 71 if (!neg && hundreds != 0) { 72 seconds++; 73 if (seconds == 60) { 74 seconds = 0; 75 minutes++; 76 if (minutes == 60) { 77 minutes = 0; 78 hours++; 79 } 80 } 81 } 82 83 // Hours may be empty 84 if (hours >= 10) { 85 format = showNeg ? NEG_TWO_DIGITS : TWO_DIGITS; 86 mHours = String.format(format, hours); 87 } else if (hours > 0) { 88 format = showNeg ? NEG_ONE_DIGIT : ONE_DIGIT; 89 mHours = String.format(format, hours); 90 } else { 91 mHours = null; 92 } 93 94 // Minutes are never empty and when hours are non-empty, must be two digits 95 if (minutes >= 10 || hours > 0) { 96 format = (showNeg && hours == 0) ? NEG_TWO_DIGITS : TWO_DIGITS; 97 mMinutes = String.format(format, minutes); 98 } else { 99 format = (showNeg && hours == 0) ? NEG_ONE_DIGIT : ONE_DIGIT; 100 mMinutes = String.format(format, minutes); 101 } 102 103 // Seconds are always two digits 104 mSeconds = String.format(TWO_DIGITS, seconds); 105 } 106 107 /** 108 * Based on com.android.deskclock.timer.CountingTimerView. 109 * 110 * @param time the time to format. 111 * @return nicely formatted time. 112 */ getTimeString(long time)113 public static String getTimeString(long time) { 114 setTime(time); 115 if (mHours == null) { 116 return String.format("%s:%s", mMinutes, mSeconds); 117 } 118 return String.format("%s:%s:%s", mHours, mMinutes, mSeconds); 119 120 } 121 } 122