summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk5
-rw-r--r--AndroidManifest.xml22
-rw-r--r--assets/fonts/Clockopia.ttfbin6880 -> 0 bytes
-rw-r--r--assets/fonts/Roboto-Thin.ttfbin0 -> 110408 bytes
-rw-r--r--proguard.flags8
-rw-r--r--res/anim/dim.xml4
-rw-r--r--res/anim/hide.xml7
-rw-r--r--res/anim/undim.html4
-rw-r--r--res/anim/undim_instant.xml4
-rw-r--r--res/anim/unhide.html7
-rw-r--r--res/drawable-hdpi/appwidget_clock_dial.pngbin3757 -> 7701 bytes
-rw-r--r--res/drawable-hdpi/appwidget_clock_hour.pngbin1285 -> 1760 bytes
-rw-r--r--res/drawable-hdpi/appwidget_clock_minute.pngbin1345 -> 1851 bytes
-rw-r--r--res/drawable-hdpi/appwidget_clock_second.pngbin0 -> 1529 bytes
-rw-r--r--res/drawable-hdpi/clock_analog_dial.pngbin0 -> 17134 bytes
-rw-r--r--res/drawable-hdpi/clock_analog_hour.pngbin0 -> 2584 bytes
-rw-r--r--res/drawable-hdpi/clock_analog_minute.pngbin0 -> 2762 bytes
-rw-r--r--res/drawable-hdpi/clock_analog_second.pngbin0 -> 2370 bytes
-rw-r--r--res/drawable-hdpi/ic_backspace_normal.pngbin0 -> 1104 bytes
-rw-r--r--res/drawable-hdpi/ic_clock_brightness.pngbin1107 -> 1484 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_add.pngbin534 -> 667 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_clock.pngbin0 -> 1638 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_clock_activated.pngbin0 -> 1638 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_clock_normal.pngbin0 -> 1543 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_stopwatch.pngbin0 -> 1734 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_stopwatch_activated.pngbin0 -> 1734 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_stopwatch_normal.pngbin0 -> 1676 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_timer.pngbin0 -> 1201 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_timer_activated.pngbin0 -> 1201 bytes
-rw-r--r--res/drawable-hdpi/ic_tab_timer_normal.pngbin0 -> 1304 bytes
-rw-r--r--res/drawable-hdpi/stat_notify_alarm.pngbin1244 -> 1534 bytes
-rw-r--r--res/drawable-mdpi/appwidget_clock_dial.pngbin2267 -> 4912 bytes
-rw-r--r--res/drawable-mdpi/appwidget_clock_hour.pngbin855 -> 1090 bytes
-rw-r--r--res/drawable-mdpi/appwidget_clock_minute.pngbin978 -> 1159 bytes
-rw-r--r--res/drawable-mdpi/appwidget_clock_second.pngbin0 -> 1052 bytes
-rw-r--r--res/drawable-mdpi/clock_analog_dial.pngbin0 -> 10167 bytes
-rw-r--r--res/drawable-mdpi/clock_analog_hour.pngbin0 -> 1564 bytes
-rw-r--r--res/drawable-mdpi/clock_analog_minute.pngbin0 -> 1686 bytes
-rw-r--r--res/drawable-mdpi/clock_analog_second.pngbin0 -> 1481 bytes
-rw-r--r--res/drawable-mdpi/ic_backspace_normal.pngbin0 -> 801 bytes
-rw-r--r--res/drawable-mdpi/ic_clock_brightness.pngbin750 -> 936 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_add.pngbin476 -> 602 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_clock.pngbin0 -> 1109 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_clock_activated.pngbin0 -> 1109 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_clock_normal.pngbin0 -> 1036 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_stopwatch.pngbin0 -> 1184 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_stopwatch_activated.pngbin0 -> 1184 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_stopwatch_normal.pngbin0 -> 1113 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_timer.pngbin0 -> 875 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_timer_activated.pngbin0 -> 875 bytes
-rw-r--r--res/drawable-mdpi/ic_tab_timer_normal.pngbin0 -> 935 bytes
-rw-r--r--res/drawable-mdpi/stat_notify_alarm.pngbin835 -> 1037 bytes
-rw-r--r--res/drawable-xhdpi/appwidget_clock_dial.pngbin5547 -> 12436 bytes
-rw-r--r--res/drawable-xhdpi/appwidget_clock_hour.pngbin1735 -> 2452 bytes
-rw-r--r--res/drawable-xhdpi/appwidget_clock_minute.pngbin1866 -> 2582 bytes
-rw-r--r--res/drawable-xhdpi/appwidget_clock_second.pngbin0 -> 2199 bytes
-rw-r--r--res/drawable-xhdpi/clock_analog_dial.pngbin0 -> 24148 bytes
-rw-r--r--res/drawable-xhdpi/clock_analog_hour.pngbin0 -> 3739 bytes
-rw-r--r--res/drawable-xhdpi/clock_analog_minute.pngbin0 -> 3954 bytes
-rw-r--r--res/drawable-xhdpi/clock_analog_second.pngbin0 -> 3405 bytes
-rw-r--r--res/drawable-xhdpi/ic_backspace_normal.pngbin0 -> 1389 bytes
-rw-r--r--res/drawable-xhdpi/ic_clock_brightness.pngbin1515 -> 2072 bytes
-rw-r--r--res/drawable-xhdpi/ic_menu_add.pngbin610 -> 789 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_clock.pngbin0 -> 2379 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_clock_activated.pngbin0 -> 2379 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_clock_normal.pngbin0 -> 2166 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_stopwatch.pngbin0 -> 2411 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_stopwatch_activated.pngbin0 -> 2411 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_stopwatch_normal.pngbin0 -> 2226 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_timer.pngbin0 -> 1701 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_timer_activated.pngbin0 -> 1701 bytes
-rw-r--r--res/drawable-xhdpi/ic_tab_timer_normal.pngbin0 -> 1758 bytes
-rw-r--r--res/drawable-xhdpi/stat_notify_alarm.pngbin1750 -> 2132 bytes
-rw-r--r--res/drawable/clock_tab.xml26
-rw-r--r--res/drawable/stopwatch_tab.xml26
-rw-r--r--res/drawable/timer_tab.xml26
-rw-r--r--res/layout/alarm_alert.xml119
-rw-r--r--res/layout/alarm_alert_fullscreen.xml17
-rw-r--r--res/layout/alarm_time.xml12
-rw-r--r--res/layout/clock_fragment.xml135
-rw-r--r--res/layout/desk_clock.xml77
-rw-r--r--res/layout/desk_clock_time_date.xml36
-rw-r--r--res/layout/help.xml27
-rw-r--r--res/layout/lap_view.xml52
-rw-r--r--res/layout/snooze_length_picker.xml38
-rw-r--r--res/layout/stopwatch_fragment.xml184
-rw-r--r--res/layout/three_keys_view.xml41
-rw-r--r--res/layout/time_setup_view.xml136
-rw-r--r--res/layout/timer_fragment.xml89
-rw-r--r--res/layout/timer_list_item.xml121
-rw-r--r--res/menu/desk_clock_menu.xml7
-rw-r--r--res/menu/settings_menu.xml23
-rw-r--r--res/mipmap-hdpi/ic_launcher_alarmclock.pngbin10897 -> 7381 bytes
-rw-r--r--res/mipmap-mdpi/ic_launcher_alarmclock.pngbin5989 -> 4333 bytes
-rw-r--r--res/mipmap-xhdpi/ic_launcher_alarmclock.pngbin16473 -> 10986 bytes
-rw-r--r--res/values-af/strings.xml29
-rw-r--r--res/values-am/strings.xml29
-rw-r--r--res/values-ar/strings.xml29
-rw-r--r--res/values-be/strings.xml29
-rw-r--r--res/values-bg/strings.xml29
-rw-r--r--res/values-ca/strings.xml29
-rw-r--r--res/values-cs/strings.xml29
-rw-r--r--res/values-da/strings.xml29
-rw-r--r--res/values-de/strings.xml29
-rw-r--r--res/values-el/strings.xml29
-rw-r--r--res/values-en-rGB/strings.xml29
-rw-r--r--res/values-es-rUS/strings.xml29
-rw-r--r--res/values-es/strings.xml29
-rw-r--r--res/values-et/strings.xml29
-rw-r--r--res/values-fa/strings.xml29
-rw-r--r--res/values-fi/strings.xml29
-rw-r--r--res/values-fr/strings.xml29
-rw-r--r--res/values-hi/strings.xml29
-rw-r--r--res/values-hr/strings.xml29
-rw-r--r--res/values-hu/strings.xml29
-rw-r--r--res/values-in/strings.xml29
-rw-r--r--res/values-it/strings.xml29
-rw-r--r--res/values-iw/strings.xml29
-rw-r--r--res/values-ja/strings.xml29
-rw-r--r--res/values-ko/strings.xml29
-rw-r--r--res/values-lt/strings.xml29
-rw-r--r--res/values-lv/strings.xml29
-rw-r--r--res/values-ms/strings.xml29
-rw-r--r--res/values-nb/strings.xml29
-rw-r--r--res/values-nl/strings.xml29
-rw-r--r--res/values-pl/strings.xml29
-rw-r--r--res/values-pt-rPT/strings.xml29
-rw-r--r--res/values-pt/strings.xml29
-rw-r--r--res/values-rm/strings.xml51
-rw-r--r--res/values-ro/strings.xml29
-rw-r--r--res/values-ru/strings.xml29
-rw-r--r--res/values-sk/strings.xml29
-rw-r--r--res/values-sl/strings.xml29
-rw-r--r--res/values-sr/strings.xml29
-rw-r--r--res/values-sv/strings.xml29
-rw-r--r--res/values-sw/strings.xml29
-rw-r--r--res/values-sw600dp-land/dimens.xml1
-rw-r--r--res/values-th/strings.xml29
-rw-r--r--res/values-tl/strings.xml29
-rw-r--r--res/values-tr/strings.xml29
-rw-r--r--res/values-uk/strings.xml29
-rw-r--r--res/values-vi/strings.xml29
-rw-r--r--res/values-zh-rCN/strings.xml31
-rw-r--r--res/values-zh-rTW/strings.xml29
-rw-r--r--res/values-zu/strings.xml29
-rw-r--r--res/values/colors.xml5
-rw-r--r--res/values/dimens.xml9
-rw-r--r--res/values/ids.xml19
-rw-r--r--res/values/strings.xml352
-rw-r--r--res/values/styles.xml94
-rw-r--r--res/xml/settings.xml95
-rw-r--r--src/com/android/deskclock/AlarmAlert.java4
-rw-r--r--src/com/android/deskclock/AlarmAlertFullScreen.java4
-rw-r--r--src/com/android/deskclock/AlarmClock.java8
-rw-r--r--src/com/android/deskclock/AnalogClock.java274
-rw-r--r--src/com/android/deskclock/CircleTimerView.java243
-rw-r--r--src/com/android/deskclock/ClockFragment.java137
-rw-r--r--src/com/android/deskclock/DeskClock.java753
-rw-r--r--src/com/android/deskclock/DeskClockFragment.java44
-rw-r--r--src/com/android/deskclock/DeskClockFragmentOld.java560
-rw-r--r--src/com/android/deskclock/DigitalClock.java37
-rw-r--r--src/com/android/deskclock/HelpActivity.java31
-rw-r--r--src/com/android/deskclock/OldDigitalClock.java182
-rw-r--r--src/com/android/deskclock/Screensaver.java24
-rw-r--r--src/com/android/deskclock/SettingsActivity.java102
-rw-r--r--src/com/android/deskclock/SnoozeLengthDialog.java105
-rw-r--r--src/com/android/deskclock/StopwatchFragment.java470
-rw-r--r--src/com/android/deskclock/TimerFragment.java270
-rw-r--r--src/com/android/deskclock/TimerListItem.java86
-rw-r--r--src/com/android/deskclock/TimerSetupView.java142
-rw-r--r--src/com/android/deskclock/TimerView.java143
-rw-r--r--src/com/android/deskclock/timer/TimerFragment.java403
-rw-r--r--src/com/android/deskclock/timer/TimerListItem.java94
-rw-r--r--src/com/android/deskclock/timer/TimerObj.java206
-rw-r--r--src/com/android/deskclock/timer/TimerReceiver.java101
-rw-r--r--src/com/android/deskclock/timer/TimerSetupView.java144
-rw-r--r--src/com/android/deskclock/timer/TimerView.java145
177 files changed, 7023 insertions, 962 deletions
diff --git a/Android.mk b/Android.mk
index 5892f3525..1d6117f45 100644
--- a/Android.mk
+++ b/Android.mk
@@ -4,6 +4,7 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13
+LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_SRC_FILES := $(call all-java-files-under, src)
@@ -11,7 +12,9 @@ LOCAL_PACKAGE_NAME := DeskClock
LOCAL_OVERRIDES_PACKAGES := AlarmClock
-LOCAL_SDK_VERSION := current
+LOCAL_SDK_VERSION := 16
+
+LOCAL_PROGUARD_FLAG_FILES := proguard.flags
include $(BUILD_PACKAGE)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b451784c2..069766606 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -23,9 +23,10 @@
<activity android:name="DeskClock"
android:label="@string/app_label"
- android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar"
+ android:theme="@style/DeskClock"
android:icon="@mipmap/ic_launcher_alarmclock"
android:launchMode="singleInstance"
+ android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|keyboard|navigation">
>
@@ -49,8 +50,19 @@
android:targetActivity="com.android.deskclock.AlarmClock"
android:exported="true" />
+ <activity android:name="HelpActivity"
+ android:label="@string/help"
+ android:taskAffinity=""
+ android:excludeFromRecents="true"
+ >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ </intent-filter>
+ </activity>
+
<activity android:name="SettingsActivity"
android:label="@string/settings"
+ android:theme="@style/SettingsTheme"
android:taskAffinity=""
android:excludeFromRecents="true"
>
@@ -59,19 +71,19 @@
</intent-filter>
</activity>
- <activity android:name="SetAlarm"
+ <activity android:name="SetAlarm"
android:label="@string/set_alarm"
android:theme="@style/SetAlarmTheme"
android:configChanges="orientation|keyboardHidden|keyboard|navigation" />
<activity android:name="AlarmAlert"
android:excludeFromRecents="true"
- android:theme="@android:style/Theme.Holo.Dialog"
+ android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar"
android:launchMode="singleInstance"
android:taskAffinity=""
android:configChanges="orientation|keyboardHidden|keyboard|navigation"/>
- <!-- This activity is basically the same as AlarmAlert
+ <!-- This activity is basically the same as AlarmAlert
but full-screen so that it can turn the display on. -->
<activity android:name="AlarmAlertFullScreen"
android:excludeFromRecents="true"
@@ -123,7 +135,7 @@
</receiver>
<receiver android:name="com.android.alarmclock.AnalogAppWidgetProvider" android:label="@string/analog_gadget"
- android:icon="@mipmap/ic_widget_analog_clock">
+ android:icon="@mipmap/ic_widget_analog_clock">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
diff --git a/assets/fonts/Clockopia.ttf b/assets/fonts/Clockopia.ttf
deleted file mode 100644
index 123ea4ff8..000000000
--- a/assets/fonts/Clockopia.ttf
+++ /dev/null
Binary files differ
diff --git a/assets/fonts/Roboto-Thin.ttf b/assets/fonts/Roboto-Thin.ttf
new file mode 100644
index 000000000..19e2b54b5
--- /dev/null
+++ b/assets/fonts/Roboto-Thin.ttf
Binary files differ
diff --git a/proguard.flags b/proguard.flags
new file mode 100644
index 000000000..848eb3258
--- /dev/null
+++ b/proguard.flags
@@ -0,0 +1,8 @@
+-keepclassmembers class com.android.deskclock.StopwatchFragment {
+ *** stopWatchOnClickRight(...);
+ *** stopWatchOnClickLeft(...);
+}
+
+-keepclassmembers class com.android.deskclock.DeskClock {
+ *** clockButtonsOnClick(...);
+} \ No newline at end of file
diff --git a/res/anim/dim.xml b/res/anim/dim.xml
index 72529c933..1f89c5136 100644
--- a/res/anim/dim.xml
+++ b/res/anim/dim.xml
@@ -1,6 +1,6 @@
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromAlpha="0.0"
- android:toAlpha="1.0"
+ android:fromAlpha="1.0"
+ android:toAlpha="0.2"
android:duration="500"
android:fillAfter="true"
android:interpolator="@android:anim/decelerate_interpolator"
diff --git a/res/anim/hide.xml b/res/anim/hide.xml
new file mode 100644
index 000000000..7482070af
--- /dev/null
+++ b/res/anim/hide.xml
@@ -0,0 +1,7 @@
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fromAlpha="1.0"
+ android:toAlpha="0.0"
+ android:duration="200"
+ android:fillAfter="true"
+ android:interpolator="@android:anim/decelerate_interpolator"
+ />
diff --git a/res/anim/undim.html b/res/anim/undim.html
index d0ba9ada6..72529c933 100644
--- a/res/anim/undim.html
+++ b/res/anim/undim.html
@@ -1,6 +1,6 @@
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromAlpha="1.0"
- android:toAlpha="0.0"
+ android:fromAlpha="0.0"
+ android:toAlpha="1.0"
android:duration="500"
android:fillAfter="true"
android:interpolator="@android:anim/decelerate_interpolator"
diff --git a/res/anim/undim_instant.xml b/res/anim/undim_instant.xml
index ce20f1e8e..c526daea6 100644
--- a/res/anim/undim_instant.xml
+++ b/res/anim/undim_instant.xml
@@ -1,6 +1,6 @@
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromAlpha="1.0"
- android:toAlpha="0.0"
+ android:fromAlpha="0.2"
+ android:toAlpha="1.0"
android:duration="0"
android:fillAfter="true"
/>
diff --git a/res/anim/unhide.html b/res/anim/unhide.html
new file mode 100644
index 000000000..4b986563f
--- /dev/null
+++ b/res/anim/unhide.html
@@ -0,0 +1,7 @@
+<alpha xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fromAlpha="0.0"
+ android:toAlpha="1.0"
+ android:duration="200"
+ android:fillAfter="true"
+ android:interpolator="@android:anim/decelerate_interpolator"
+ />
diff --git a/res/drawable-hdpi/appwidget_clock_dial.png b/res/drawable-hdpi/appwidget_clock_dial.png
index 10b254326..d65190cea 100644
--- a/res/drawable-hdpi/appwidget_clock_dial.png
+++ b/res/drawable-hdpi/appwidget_clock_dial.png
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_clock_hour.png b/res/drawable-hdpi/appwidget_clock_hour.png
index d984de4d6..8579d4b08 100644
--- a/res/drawable-hdpi/appwidget_clock_hour.png
+++ b/res/drawable-hdpi/appwidget_clock_hour.png
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_clock_minute.png b/res/drawable-hdpi/appwidget_clock_minute.png
index 106f6781a..67d8d409b 100644
--- a/res/drawable-hdpi/appwidget_clock_minute.png
+++ b/res/drawable-hdpi/appwidget_clock_minute.png
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_clock_second.png b/res/drawable-hdpi/appwidget_clock_second.png
new file mode 100644
index 000000000..5b9ebe2ca
--- /dev/null
+++ b/res/drawable-hdpi/appwidget_clock_second.png
Binary files differ
diff --git a/res/drawable-hdpi/clock_analog_dial.png b/res/drawable-hdpi/clock_analog_dial.png
new file mode 100644
index 000000000..b5e6d4b64
--- /dev/null
+++ b/res/drawable-hdpi/clock_analog_dial.png
Binary files differ
diff --git a/res/drawable-hdpi/clock_analog_hour.png b/res/drawable-hdpi/clock_analog_hour.png
new file mode 100644
index 000000000..d89e46371
--- /dev/null
+++ b/res/drawable-hdpi/clock_analog_hour.png
Binary files differ
diff --git a/res/drawable-hdpi/clock_analog_minute.png b/res/drawable-hdpi/clock_analog_minute.png
new file mode 100644
index 000000000..2d230f674
--- /dev/null
+++ b/res/drawable-hdpi/clock_analog_minute.png
Binary files differ
diff --git a/res/drawable-hdpi/clock_analog_second.png b/res/drawable-hdpi/clock_analog_second.png
new file mode 100644
index 000000000..d1684969e
--- /dev/null
+++ b/res/drawable-hdpi/clock_analog_second.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_backspace_normal.png b/res/drawable-hdpi/ic_backspace_normal.png
new file mode 100644
index 000000000..1c850f5d5
--- /dev/null
+++ b/res/drawable-hdpi/ic_backspace_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_clock_brightness.png b/res/drawable-hdpi/ic_clock_brightness.png
index fce454f00..1cbf9eb3e 100644
--- a/res/drawable-hdpi/ic_clock_brightness.png
+++ b/res/drawable-hdpi/ic_clock_brightness.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_add.png b/res/drawable-hdpi/ic_menu_add.png
index 2dd91b92e..9950b9c65 100644
--- a/res/drawable-hdpi/ic_menu_add.png
+++ b/res/drawable-hdpi/ic_menu_add.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_clock.png b/res/drawable-hdpi/ic_tab_clock.png
new file mode 100644
index 000000000..847ebbcd7
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_clock.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_clock_activated.png b/res/drawable-hdpi/ic_tab_clock_activated.png
new file mode 100644
index 000000000..18b5127a8
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_clock_activated.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_clock_normal.png b/res/drawable-hdpi/ic_tab_clock_normal.png
new file mode 100644
index 000000000..4fdde1bb5
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_clock_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_stopwatch.png b/res/drawable-hdpi/ic_tab_stopwatch.png
new file mode 100644
index 000000000..3f0e7faba
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_stopwatch.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_stopwatch_activated.png b/res/drawable-hdpi/ic_tab_stopwatch_activated.png
new file mode 100644
index 000000000..7efb8e771
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_stopwatch_activated.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_stopwatch_normal.png b/res/drawable-hdpi/ic_tab_stopwatch_normal.png
new file mode 100644
index 000000000..152e0f166
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_stopwatch_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_timer.png b/res/drawable-hdpi/ic_tab_timer.png
new file mode 100644
index 000000000..12a8d1eef
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_timer.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_timer_activated.png b/res/drawable-hdpi/ic_tab_timer_activated.png
new file mode 100644
index 000000000..598cb95af
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_timer_activated.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_tab_timer_normal.png b/res/drawable-hdpi/ic_tab_timer_normal.png
new file mode 100644
index 000000000..edbee70e4
--- /dev/null
+++ b/res/drawable-hdpi/ic_tab_timer_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/stat_notify_alarm.png b/res/drawable-hdpi/stat_notify_alarm.png
index cdeb74bc1..8139af42e 100644
--- a/res/drawable-hdpi/stat_notify_alarm.png
+++ b/res/drawable-hdpi/stat_notify_alarm.png
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_clock_dial.png b/res/drawable-mdpi/appwidget_clock_dial.png
index 6faaa4b77..a18874047 100644
--- a/res/drawable-mdpi/appwidget_clock_dial.png
+++ b/res/drawable-mdpi/appwidget_clock_dial.png
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_clock_hour.png b/res/drawable-mdpi/appwidget_clock_hour.png
index 530222ec2..73348101c 100644
--- a/res/drawable-mdpi/appwidget_clock_hour.png
+++ b/res/drawable-mdpi/appwidget_clock_hour.png
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_clock_minute.png b/res/drawable-mdpi/appwidget_clock_minute.png
index c0d67d0a7..1c781ac6b 100644
--- a/res/drawable-mdpi/appwidget_clock_minute.png
+++ b/res/drawable-mdpi/appwidget_clock_minute.png
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_clock_second.png b/res/drawable-mdpi/appwidget_clock_second.png
new file mode 100644
index 000000000..c749ff6c4
--- /dev/null
+++ b/res/drawable-mdpi/appwidget_clock_second.png
Binary files differ
diff --git a/res/drawable-mdpi/clock_analog_dial.png b/res/drawable-mdpi/clock_analog_dial.png
new file mode 100644
index 000000000..c3af5d467
--- /dev/null
+++ b/res/drawable-mdpi/clock_analog_dial.png
Binary files differ
diff --git a/res/drawable-mdpi/clock_analog_hour.png b/res/drawable-mdpi/clock_analog_hour.png
new file mode 100644
index 000000000..0899f6f6b
--- /dev/null
+++ b/res/drawable-mdpi/clock_analog_hour.png
Binary files differ
diff --git a/res/drawable-mdpi/clock_analog_minute.png b/res/drawable-mdpi/clock_analog_minute.png
new file mode 100644
index 000000000..a3b15d020
--- /dev/null
+++ b/res/drawable-mdpi/clock_analog_minute.png
Binary files differ
diff --git a/res/drawable-mdpi/clock_analog_second.png b/res/drawable-mdpi/clock_analog_second.png
new file mode 100644
index 000000000..49b8bc0fb
--- /dev/null
+++ b/res/drawable-mdpi/clock_analog_second.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_backspace_normal.png b/res/drawable-mdpi/ic_backspace_normal.png
new file mode 100644
index 000000000..5748e1b6a
--- /dev/null
+++ b/res/drawable-mdpi/ic_backspace_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_clock_brightness.png b/res/drawable-mdpi/ic_clock_brightness.png
index b7a3bd4c9..df44c2922 100644
--- a/res/drawable-mdpi/ic_clock_brightness.png
+++ b/res/drawable-mdpi/ic_clock_brightness.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_add.png b/res/drawable-mdpi/ic_menu_add.png
index 5f24279c0..70efb1352 100644
--- a/res/drawable-mdpi/ic_menu_add.png
+++ b/res/drawable-mdpi/ic_menu_add.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_clock.png b/res/drawable-mdpi/ic_tab_clock.png
new file mode 100644
index 000000000..f4bb5cc6f
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_clock.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_clock_activated.png b/res/drawable-mdpi/ic_tab_clock_activated.png
new file mode 100644
index 000000000..19b75c93d
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_clock_activated.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_clock_normal.png b/res/drawable-mdpi/ic_tab_clock_normal.png
new file mode 100644
index 000000000..c4f2b9d8f
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_clock_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_stopwatch.png b/res/drawable-mdpi/ic_tab_stopwatch.png
new file mode 100644
index 000000000..867ffa281
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_stopwatch.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_stopwatch_activated.png b/res/drawable-mdpi/ic_tab_stopwatch_activated.png
new file mode 100644
index 000000000..0d33af8f7
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_stopwatch_activated.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_stopwatch_normal.png b/res/drawable-mdpi/ic_tab_stopwatch_normal.png
new file mode 100644
index 000000000..995bca54e
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_stopwatch_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_timer.png b/res/drawable-mdpi/ic_tab_timer.png
new file mode 100644
index 000000000..fd63d0059
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_timer.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_timer_activated.png b/res/drawable-mdpi/ic_tab_timer_activated.png
new file mode 100644
index 000000000..3c372cd88
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_timer_activated.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_tab_timer_normal.png b/res/drawable-mdpi/ic_tab_timer_normal.png
new file mode 100644
index 000000000..3b1f2c868
--- /dev/null
+++ b/res/drawable-mdpi/ic_tab_timer_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/stat_notify_alarm.png b/res/drawable-mdpi/stat_notify_alarm.png
index c61626c3a..7f9ea3e1f 100644
--- a/res/drawable-mdpi/stat_notify_alarm.png
+++ b/res/drawable-mdpi/stat_notify_alarm.png
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_clock_dial.png b/res/drawable-xhdpi/appwidget_clock_dial.png
index 5aacb1f92..f285cbac2 100644
--- a/res/drawable-xhdpi/appwidget_clock_dial.png
+++ b/res/drawable-xhdpi/appwidget_clock_dial.png
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_clock_hour.png b/res/drawable-xhdpi/appwidget_clock_hour.png
index a7946ebff..47f857de7 100644
--- a/res/drawable-xhdpi/appwidget_clock_hour.png
+++ b/res/drawable-xhdpi/appwidget_clock_hour.png
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_clock_minute.png b/res/drawable-xhdpi/appwidget_clock_minute.png
index 863f15827..29d78bd47 100644
--- a/res/drawable-xhdpi/appwidget_clock_minute.png
+++ b/res/drawable-xhdpi/appwidget_clock_minute.png
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_clock_second.png b/res/drawable-xhdpi/appwidget_clock_second.png
new file mode 100644
index 000000000..380e56ac4
--- /dev/null
+++ b/res/drawable-xhdpi/appwidget_clock_second.png
Binary files differ
diff --git a/res/drawable-xhdpi/clock_analog_dial.png b/res/drawable-xhdpi/clock_analog_dial.png
new file mode 100644
index 000000000..29f599251
--- /dev/null
+++ b/res/drawable-xhdpi/clock_analog_dial.png
Binary files differ
diff --git a/res/drawable-xhdpi/clock_analog_hour.png b/res/drawable-xhdpi/clock_analog_hour.png
new file mode 100644
index 000000000..4c650b7ef
--- /dev/null
+++ b/res/drawable-xhdpi/clock_analog_hour.png
Binary files differ
diff --git a/res/drawable-xhdpi/clock_analog_minute.png b/res/drawable-xhdpi/clock_analog_minute.png
new file mode 100644
index 000000000..46fe618e2
--- /dev/null
+++ b/res/drawable-xhdpi/clock_analog_minute.png
Binary files differ
diff --git a/res/drawable-xhdpi/clock_analog_second.png b/res/drawable-xhdpi/clock_analog_second.png
new file mode 100644
index 000000000..964f0d2df
--- /dev/null
+++ b/res/drawable-xhdpi/clock_analog_second.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_backspace_normal.png b/res/drawable-xhdpi/ic_backspace_normal.png
new file mode 100644
index 000000000..3ad8d1b8a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_backspace_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_clock_brightness.png b/res/drawable-xhdpi/ic_clock_brightness.png
index c48b293ce..9468869cc 100644
--- a/res/drawable-xhdpi/ic_clock_brightness.png
+++ b/res/drawable-xhdpi/ic_clock_brightness.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_add.png b/res/drawable-xhdpi/ic_menu_add.png
index 3218509fd..424465bd9 100644
--- a/res/drawable-xhdpi/ic_menu_add.png
+++ b/res/drawable-xhdpi/ic_menu_add.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_clock.png b/res/drawable-xhdpi/ic_tab_clock.png
new file mode 100644
index 000000000..c3fe07e1a
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_clock.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_clock_activated.png b/res/drawable-xhdpi/ic_tab_clock_activated.png
new file mode 100644
index 000000000..f67dbb9fb
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_clock_activated.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_clock_normal.png b/res/drawable-xhdpi/ic_tab_clock_normal.png
new file mode 100644
index 000000000..accb92008
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_clock_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_stopwatch.png b/res/drawable-xhdpi/ic_tab_stopwatch.png
new file mode 100644
index 000000000..fc3849d26
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_stopwatch.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_stopwatch_activated.png b/res/drawable-xhdpi/ic_tab_stopwatch_activated.png
new file mode 100644
index 000000000..9e9db86fe
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_stopwatch_activated.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_stopwatch_normal.png b/res/drawable-xhdpi/ic_tab_stopwatch_normal.png
new file mode 100644
index 000000000..8774a48ae
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_stopwatch_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_timer.png b/res/drawable-xhdpi/ic_tab_timer.png
new file mode 100644
index 000000000..7c8a7670c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_timer.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_timer_activated.png b/res/drawable-xhdpi/ic_tab_timer_activated.png
new file mode 100644
index 000000000..373b9d892
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_timer_activated.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tab_timer_normal.png b/res/drawable-xhdpi/ic_tab_timer_normal.png
new file mode 100644
index 000000000..2706efd9d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_tab_timer_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/stat_notify_alarm.png b/res/drawable-xhdpi/stat_notify_alarm.png
index 658d04fea..ddb3a1545 100644
--- a/res/drawable-xhdpi/stat_notify_alarm.png
+++ b/res/drawable-xhdpi/stat_notify_alarm.png
Binary files differ
diff --git a/res/drawable/clock_tab.xml b/res/drawable/clock_tab.xml
new file mode 100644
index 000000000..6fc277912
--- /dev/null
+++ b/res/drawable/clock_tab.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+ <selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_focused="true" android:state_pressed="false"
+ android:drawable="@drawable/ic_tab_clock_activated" />
+ <item android:state_focused="true" android:state_pressed="true"
+ android:drawable="@drawable/ic_tab_clock_activated" />
+ <item android:state_focused="false" android:state_pressed="true"
+ android:drawable="@drawable/ic_tab_clock_activated" />
+ <item android:state_selected="true"
+ android:drawable="@drawable/ic_tab_clock_activated" />
+ <item android:drawable="@drawable/ic_tab_clock_normal" />
+</selector>
diff --git a/res/drawable/stopwatch_tab.xml b/res/drawable/stopwatch_tab.xml
new file mode 100644
index 000000000..9404da01d
--- /dev/null
+++ b/res/drawable/stopwatch_tab.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+ <selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_focused="true" android:state_pressed="false"
+ android:drawable="@drawable/ic_tab_stopwatch_activated" />
+ <item android:state_focused="true" android:state_pressed="true"
+ android:drawable="@drawable/ic_tab_stopwatch_activated" />
+ <item android:state_focused="false" android:state_pressed="true"
+ android:drawable="@drawable/ic_tab_stopwatch_activated" />
+ <item android:state_selected="true"
+ android:drawable="@drawable/ic_tab_stopwatch_activated" />
+ <item android:drawable="@drawable/ic_tab_stopwatch_normal" />
+</selector>
diff --git a/res/drawable/timer_tab.xml b/res/drawable/timer_tab.xml
new file mode 100644
index 000000000..75daefe05
--- /dev/null
+++ b/res/drawable/timer_tab.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+ <selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_focused="true" android:state_pressed="false"
+ android:drawable="@drawable/ic_tab_timer_activated" />
+ <item android:state_focused="true" android:state_pressed="true"
+ android:drawable="@drawable/ic_tab_timer_activated" />
+ <item android:state_focused="false" android:state_pressed="true"
+ android:drawable="@drawable/ic_tab_timer_activated" />
+ <item android:state_selected="true"
+ android:drawable="@drawable/ic_tab_timer_activated" />
+ <item android:drawable="@drawable/ic_tab_timer_normal" />
+</selector>
diff --git a/res/layout/alarm_alert.xml b/res/layout/alarm_alert.xml
index 87423d983..8c3f1a9d3 100644
--- a/res/layout/alarm_alert.xml
+++ b/res/layout/alarm_alert.xml
@@ -14,106 +14,81 @@
limitations under the License.
-->
-<RelativeLayout
+<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:paddingTop="?android:attr/actionBarSize"
+ android:background="@color/black"
>
- <LinearLayout android:id="@+id/topPanel"
+ <TextView android:id="@+id/alertTitle"
+ android:singleLine="true"
+ android:ellipsize="end"
+ style="@style/header"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:orientation="vertical">
-
- <LinearLayout android:id="@+id/title_template"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:gravity="center_vertical|left"
- android:minHeight="@dimen/alert_dialog_title_height"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip">
-
- <TextView android:id="@+id/alertTitle"
- style="?android:attr/windowTitleStyle"
- android:singleLine="true"
- android:ellipsize="end"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
-
- </LinearLayout>
-
- <View android:id="@+id/titleDivider"
- android:layout_width="match_parent"
- android:layout_height="2dip"
- android:background="@android:color/holo_blue_light" />
-
- </LinearLayout>
+ android:layout_height="wrap_content" />
<com.android.deskclock.DigitalClock
android:id="@+id/digitalClock"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
- android:paddingTop="24dip"
- android:paddingLeft="24dip"
- android:paddingRight="20dip"
- android:paddingBottom="80dp"
+ android:paddingTop="8dip"
+ android:paddingBottom="24dp"
android:baselineAligned="true"
- android:layout_below="@id/topPanel"
- android:layout_centerHorizontal="true"
>
-
- <com.android.deskclock.AndroidClockTextView
- android:id="@+id/timeDisplay"
+ <TextView
+ android:id="@+id/timeDisplayHours"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textSize="80dp"
- android:layout_alignParentRight="true"
- android:textColor="?android:attr/textColorPrimary"
- android:layout_marginRight="44dip"/>
-
- <com.android.deskclock.AndroidClockTextView
- useClockTypeface="false"
+ android:paddingRight="@dimen/time_margin_right"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/big_bold"
+ android:textColor="@color/clock_white"/>
+ <TextView
+ android:id="@+id/timeDisplayMinutes"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@style/big_thin"
+ android:singleLine="true"
+ android:ellipsize="none"
+ android:textColor="@color/clock_white" />
+ <TextView
android:id="@+id/am_pm"
- android:layout_width="40dip"
android:layout_height="wrap_content"
- android:textStyle="bold"
- android:textSize="20dp"
- android:layout_alignParentRight="true"
- android:layout_alignBaseline="@id/timeDisplay"
- android:textColor="?android:attr/textColorPrimary"/>
-
+ style="@style/label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ android:textColor="@color/clock_white"
+ />
</com.android.deskclock.DigitalClock>
<Button
android:id="@+id/snooze"
- style="?android:attr/buttonBarButtonStyle"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_below="@id/topPanel"
- android:layout_alignBottom="@id/digitalClock"
- android:paddingBottom="16dp"
- android:gravity="bottom|center_horizontal"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:paddingTop="70dip"
+ android:paddingBottom="70dp"
+ style="@style/medium_bold"
+ android:textColor="@color/clock_white"
+ android:background="?android:attr/selectableItemBackground"
android:text="@string/alarm_alert_snooze_text" />
- <View
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
- android:layout_below="@id/snooze"
- android:background="?android:attr/dividerHorizontal" />
-
<Button
android:id="@+id/dismiss"
- style="?android:attr/buttonBarButtonStyle"
android:layout_width="match_parent"
- android:layout_height="48dp"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
+ android:textColor="@color/clock_white"
+ style="@style/medium_bold"
+ android:background="?android:attr/selectableItemBackground"
android:gravity="center"
- android:layout_below="@id/divider"
android:text="@string/alarm_alert_dismiss_text" />
-</RelativeLayout>
+</LinearLayout>
diff --git a/res/layout/alarm_alert_fullscreen.xml b/res/layout/alarm_alert_fullscreen.xml
index 106ad4758..8a4e1e4ee 100644
--- a/res/layout/alarm_alert_fullscreen.xml
+++ b/res/layout/alarm_alert_fullscreen.xml
@@ -18,18 +18,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
- >
- <FrameLayout
+ android:background="@color/black"
+ android:layout_gravity="center">
+ <include layout="@layout/alarm_alert"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:background="@drawable/alarm_alert_fullscreen_bg"
- >
- <include layout="@layout/alarm_alert"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- />
- </FrameLayout>
+ android:layout_height="match_parent" />
</FrameLayout> \ No newline at end of file
diff --git a/res/layout/alarm_time.xml b/res/layout/alarm_time.xml
index 899f38de8..09b5122c4 100644
--- a/res/layout/alarm_time.xml
+++ b/res/layout/alarm_time.xml
@@ -4,9 +4,9 @@
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.
@@ -46,7 +46,7 @@
<!-- A layout that displays the time. Shows time, am/pm (if 12-hour),
and an optional line below, used for day/days of week -->
- <com.android.deskclock.DigitalClock android:id="@+id/digitalClock"
+ <com.android.deskclock.OldDigitalClock android:id="@+id/digitalClock"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
@@ -62,7 +62,7 @@
android:layout_height="wrap_content"
android:baselineAligned="true">
- <com.android.deskclock.AndroidClockTextView
+ <com.android.deskclock.AndroidClockTextView
android:id="@+id/timeDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -70,7 +70,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
useClockTypeface="false"/>
- <com.android.deskclock.AndroidClockTextView
+ <com.android.deskclock.AndroidClockTextView
android:id="@+id/am_pm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -101,6 +101,6 @@
android:textColor="?android:attr/textColorTertiary"
/>
- </com.android.deskclock.DigitalClock>
+ </com.android.deskclock.OldDigitalClock>
</LinearLayout>
diff --git a/res/layout/clock_fragment.xml b/res/layout/clock_fragment.xml
new file mode 100644
index 000000000..13c908fbc
--- /dev/null
+++ b/res/layout/clock_fragment.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingTop="?android:attr/actionBarSize">
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="#00000000"
+ android:visibility="visible"
+ android:clickable="false"
+ />
+
+ <!-- the top padding accounts for the status bar area -->
+
+ <LinearLayout
+ android:id="@+id/desk_clock"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ >
+
+ <!-- nightmode button, the time, the date, and the next alarm -->
+ <LinearLayout
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:layout_marginLeft="@dimen/time_margin_left"
+ >
+ <TextView android:id="@+id/nextAlarm"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="@dimen/font_margin_adjust"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textSize="@dimen/next_alarm_text_size"
+ android:layout_marginTop="@dimen/next_alarm_margin_top"
+ android:drawablePadding="4dip"
+ android:drawableLeft="@drawable/ic_lock_idle_alarm"
+ android:textColor="@color/white"
+ android:background="?android:attr/listChoiceBackgroundIndicator"
+ />
+ <include layout="@layout/desk_clock_time_date"
+ android:id="@+id/digital_clock"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginTop="@dimen/time_margin_top"
+ android:layout_marginBottom="@dimen/time_margin_bottom"
+ />
+ <com.android.deskclock.AnalogClock
+ android:id="@+id/analog_clock"
+ android:layout_width="@dimen/analog_clock_diameter"
+ android:layout_height="@dimen/analog_clock_diameter"
+ android:layout_gravity="center"
+ android:dial="@drawable/clock_analog_dial"
+ android:hand_hour="@drawable/clock_analog_hour"
+ android:hand_minute="@drawable/clock_analog_minute"
+ android:layout_marginTop="@dimen/time_margin_top"
+ android:layout_marginBottom="@dimen/time_margin_bottom"/>
+
+ <ListView
+ android:id="@+id/cities"
+ android:layout_width="match_parent"
+ android:layout_height="1dip" />
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="#28ffffff" />
+ <LinearLayout
+ android:id="@+id/clock_buttons"
+ android:gravity="bottom"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <Button
+ android:id="@+id/alarms_button"
+ android:text="@string/button_alarms"
+ android:onClick="clockButtonsOnClick"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_height="wrap_content" />
+ <View
+ android:layout_height="match_parent"
+ android:layout_marginTop="8dip"
+ android:layout_marginBottom="8dip"
+ android:layout_width="1dip"
+ android:background="#28ffffff" />
+ <Button
+ android:id="@+id/cities_button"
+ android:text="@string/button_cities"
+ android:onClick="clockButtonsOnClick"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_height="wrap_content" />
+ <View
+ android:layout_height="match_parent"
+ android:layout_marginTop="8dip"
+ android:layout_marginBottom="8dip"
+ android:layout_width="1dip"
+ android:background="#28ffffff" />
+ <Button
+ android:id="@+id/menu_button"
+ android:contentDescription="@string/button_menu"
+ style="@style/button"
+ android:background="?android:attr/selectableItemBackground"
+ android:text="@string/button_menu"
+ android:onClick="clockButtonsOnClick"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+ </LinearLayout>
+</FrameLayout>
diff --git a/res/layout/desk_clock.xml b/res/layout/desk_clock.xml
index 7f15a17e6..16bff34f4 100644
--- a/res/layout/desk_clock.xml
+++ b/res/layout/desk_clock.xml
@@ -14,80 +14,7 @@
limitations under the License.
-->
-<!-- This is the alarm clock in desk dock mode. It shows the time in large
- type, plus information about active alarms and charge status. It can
- also show some additional status information (e.g. weather data).
- Buttons are provided to access alarms, music, and other useful functions.
- -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:id="@+id/window_touch"
- >
-
- <View
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#00000000"
- android:visibility="visible"
- android:clickable="false"
- />
-
- <!-- the top padding accounts for the status bar area -->
- <LinearLayout
- android:id="@+id/desk_clock"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:paddingTop="25dip"
- >
-
- <!-- nightmode button, the time, the date, and the next alarm -->
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:gravity="center_vertical|right"
- >
- <include layout="@layout/desk_clock_time_date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/time_margin_top"
- android:layout_marginBottom="@dimen/time_margin_bottom"
- android:gravity="right"
- />
- <TextView android:id="@+id/nextAlarm"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/time_margin_right"
- android:padding="@dimen/font_margin_adjust"
- android:gravity="right"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/next_alarm_text_size"
- android:layout_marginTop="@dimen/next_alarm_margin_top"
- android:drawablePadding="4dip"
- android:drawableLeft="@drawable/ic_lock_idle_alarm"
- android:textColor="@color/white"
- android:background="?android:attr/listChoiceBackgroundIndicator"
- />
- </LinearLayout>
-
- <include layout="@layout/desk_clock_battery"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_weight="0"
- android:layout_marginLeft="4dip"
- />
-
- </LinearLayout>
-
- <View android:id="@+id/window_tint"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#CC000000"
- android:visibility="visible"
- android:clickable="false"
- />
-
-</FrameLayout>
+ android:id="@+id/desk_clock_pager" />
diff --git a/res/layout/desk_clock_time_date.xml b/res/layout/desk_clock_time_date.xml
index d2d590a42..42e9a68e2 100644
--- a/res/layout/desk_clock_time_date.xml
+++ b/res/layout/desk_clock_time_date.xml
@@ -18,7 +18,6 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/time_date"
android:orientation="vertical"
- android:gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
@@ -29,33 +28,31 @@
android:layout_marginBottom="@dimen/time_margin_bottom"
>
- <com.android.deskclock.AndroidClockTextView
- android:id="@+id/timeDisplay"
+ <TextView
+ android:id="@+id/timeDisplayHours"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="@dimen/time_margin_right"
android:singleLine="true"
android:ellipsize="none"
- android:textSize="@dimen/time_text_size"
- android:textColor="@color/time_text_color"
- android:gravity="left"
- />
-
- <com.android.deskclock.AndroidClockTextView
+ style="@style/big_bold"
+ android:textColor="@color/clock_white"/>
+ <TextView
+ android:id="@+id/timeDisplayMinutes"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ style="@style/big_thin"
+ android:singleLine="true"
+ android:ellipsize="none"
+ android:textColor="@color/clock_white" />
+ <TextView
android:id="@+id/am_pm"
- android:layout_width="@dimen/time_margin_right"
android:layout_height="wrap_content"
- android:layout_alignRight="@id/timeDisplay"
- android:layout_alignBaseline="@id/timeDisplay"
- android:paddingLeft="4dip"
- android:layout_marginTop="@dimen/ampm_margin_top"
- android:textAppearance="?android:attr/textAppearanceMedium"
+ style="@style/label"
android:singleLine="true"
android:ellipsize="none"
- android:gravity="left|bottom"
- android:textSize="@dimen/ampm_text_size"
- android:textColor="@color/ampm_text_color"
- useClockTypeface="false"
+ android:gravity="top"
+ android:textColor="@color/clock_white"
/>
</com.android.deskclock.DigitalClock>
@@ -64,6 +61,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/time_margin_right"
+ android:layout_marginLeft="@dimen/time_margin_left"
android:paddingRight="@dimen/font_margin_adjust"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="@dimen/date_text_size"
diff --git a/res/layout/help.xml b/res/layout/help.xml
new file mode 100644
index 000000000..14e7f4e75
--- /dev/null
+++ b/res/layout/help.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <TextView
+ android:text="@string/menu_item_help"
+ android:layout_width="match_parent"
+ android:gravity="center"
+ android:textSize="36dip"
+ android:layout_height="match_parent"/>
+</LinearLayout>
diff --git a/res/layout/lap_view.xml b/res/layout/lap_view.xml
new file mode 100644
index 000000000..09c8aa09b
--- /dev/null
+++ b/res/layout/lap_view.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_marginTop="4dip"
+ android:layout_marginBottom="4dip"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
+ <TextView
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_gray"
+ android:layout_marginRight="8dip"
+ android:layout_weight="1"
+ android:gravity="left"
+ style="@style/body"
+ android:textAllCaps="false"
+ android:id="@+id/lap_number" />
+ <TextView
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_gray"
+ android:layout_weight="5"
+ android:gravity="left"
+ style="@style/body"
+ android:textAllCaps="false"
+ android:id="@+id/lap_time" />
+ <TextView
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_gray"
+ android:layout_weight="5"
+ android:gravity="left"
+ style="@style/body"
+ android:textAllCaps="false"
+ android:id="@+id/lap_total" />
+</LinearLayout>
+
diff --git a/res/layout/snooze_length_picker.xml b/res/layout/snooze_length_picker.xml
new file mode 100644
index 000000000..da979b86a
--- /dev/null
+++ b/res/layout/snooze_length_picker.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2012, Google Inc.
+ *
+ * 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.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:gravity="center_horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent" >
+
+ <NumberPicker android:id="@+id/minutes_picker"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:focusable="true"
+ android:focusableInTouchMode="true" />
+
+ <TextView android:id="@+id/title"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:gravity="center_vertical"
+ android:layout_marginLeft="16dip"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent" />
+
+</LinearLayout>
diff --git a/res/layout/stopwatch_fragment.xml b/res/layout/stopwatch_fragment.xml
new file mode 100644
index 000000000..cf33b66ce
--- /dev/null
+++ b/res/layout/stopwatch_fragment.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingTop="?android:attr/actionBarSize"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_marginLeft="32dip"
+ android:layout_marginRight="32dip"
+ android:layout_weight="5" >
+
+ <com.android.deskclock.timer.TimerView
+ android:id="@+id/stopwatch_time_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
+ <TextView
+ android:id="@+id/hours"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/big_bold"
+ android:text="@string/zero"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/hours_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:layout_gravity="top"
+ android:text="@string/hours_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/minutes"
+ android:singleLine="true"
+ android:ellipsize="none"
+ android:text="@string/zero"
+ style="@style/big_bold"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/minutes_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:text="@string/minutes_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/seconds"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/big_thin"
+ android:text="@string/zero"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/seconds_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:layout_gravity="top"
+ android:text="@string/seconds_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/hundreds_seconds"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/small_light"
+ android:text="@string/zero"
+ android:textColor="@color/clock_white"/>
+
+ </com.android.deskclock.timer.TimerView>
+ <com.android.deskclock.CircleTimerView
+ android:id="@+id/stopwatch_time"
+ android:background="@null"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+ </FrameLayout>
+ <LinearLayout
+ android:id="@+id/laps_title"
+ android:layout_width="match_parent"
+ android:layout_marginTop="16dip"
+ android:layout_marginLeft="32dip"
+ android:layout_marginRight="32dip"
+ android:layout_height="wrap_content" >
+ <TextView
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_white"
+ android:layout_weight="1"
+ android:gravity="left"
+ style="@style/body_bold"
+ android:layout_marginRight="8dip"
+ android:text="@string/sw_lap_number" />
+ <TextView
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_white"
+ android:layout_weight="5"
+ android:gravity="left"
+ style="@style/body_bold"
+ android:text="@string/sw_lap_time" />
+ <TextView
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:textColor="@color/clock_white"
+ android:layout_weight="5"
+ android:gravity="left"
+ style="@style/body_bold"
+ android:text="@string/sw_lap_total" />
+ </LinearLayout>
+
+ <ListView
+ android:id="@+id/laps_list"
+ android:layout_weight="2"
+ android:layout_marginLeft="32dip"
+ android:layout_marginRight="32dip"
+ android:layout_width="match_parent"
+ android:layout_height="0dip" />
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="#28ffffff" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <Button
+ android:id="@+id/stopwatch_left_button"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_height="wrap_content" />
+ <View
+ android:layout_height="match_parent"
+ android:layout_marginTop="8dip"
+ android:layout_marginBottom="8dip"
+ android:layout_width="1dip"
+ android:background="#28ffffff" />
+ <Button
+ android:id="@+id/stopwatch_share_button"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:text="@string/sw_share_button"
+ android:layout_height="wrap_content" />
+ <View
+ android:id="@+id/stopwatch_button_seperator"
+ android:layout_height="match_parent"
+ android:layout_width="1dip"
+ android:layout_marginTop="8dip"
+ android:layout_marginBottom="8dip"
+ android:background="#28ffffff" />
+ <Button
+ android:id="@+id/stopwatch_right_button"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_weight="1"
+ android:layout_width="0dip"
+ style="@style/button"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout/three_keys_view.xml b/res/layout/three_keys_view.xml
new file mode 100644
index 000000000..fa94da236
--- /dev/null
+++ b/res/layout/three_keys_view.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <Button
+ android:id="@+id/key_left"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_height="wrap_content" />
+ <Button
+ android:id="@+id/key_middle"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:layout_height="wrap_content" />
+ <Button
+ android:id="@+id/key_right"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_weight="1"
+ android:layout_width="0dip"
+ style="@style/button"
+ android:layout_height="wrap_content" />
+</LinearLayout>
+ \ No newline at end of file
diff --git a/res/layout/time_setup_view.xml b/res/layout/time_setup_view.xml
new file mode 100644
index 000000000..39af63e64
--- /dev/null
+++ b/res/layout/time_setup_view.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <com.android.deskclock.timer.TimerView
+ android:id="@+id/timer_time_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="16dip"
+ android:layout_gravity="center">
+ <TextView
+ android:id="@+id/hours"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/medium_bold"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/hours_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:layout_gravity="top"
+ android:text="@string/hours_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/minutes"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/medium_bold"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/minutes_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:text="@string/minutes_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/seconds"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/medium_light"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/seconds_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:layout_gravity="top"
+ android:text="@string/seconds_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/hundreds_seconds"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/small_light"
+ android:text="@string/zero"
+ android:textColor="@color/clock_white"/>
+
+ </com.android.deskclock.timer.TimerView>
+ <ImageButton
+ android:id="@+id/delete"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_width="0dip"
+ android:gravity="center"
+ android:src="@drawable/ic_backspace_normal"
+ android:contentDescription="@string/timer_delete"
+ android:layout_weight="2"
+ android:layout_height="match_parent" />
+ </LinearLayout>
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="#28ffffff" />
+ <Space
+ android:layout_weight="1"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ />
+ <include layout="@layout/three_keys_view"
+ android:id="@+id/first" />
+ <Space
+ android:layout_weight="1"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ />
+
+ <include layout="@layout/three_keys_view"
+ android:id="@+id/second"/>
+ <Space
+ android:layout_weight="1"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ />
+
+ <include layout="@layout/three_keys_view"
+ android:id="@+id/third"/>
+ <Space
+ android:layout_weight="1"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ />
+
+ <include layout="@layout/three_keys_view"
+ android:id="@+id/fourth" />
+ <Space
+ android:layout_weight="1"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ />
+ </LinearLayout>
+ \ No newline at end of file
diff --git a/res/layout/timer_fragment.xml b/res/layout/timer_fragment.xml
new file mode 100644
index 000000000..15f34fc48
--- /dev/null
+++ b/res/layout/timer_fragment.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:paddingTop="?android:attr/actionBarSize">
+
+ <LinearLayout
+ android:id="@+id/timers_list_page"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <ListView
+ android:id="@+id/timers_list"
+ android:layout_weight="1"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"/>
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="#28ffffff" />
+
+ <Button
+ android:id="@+id/timer_add_timer"
+ android:text="@string/timer_add_timer"
+ android:layout_width="match_parent"
+ style="@style/button"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/new_timer_page"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="8dip"
+ android:layout_marginRight="8dip"
+ android:orientation="vertical">
+ <com.android.deskclock.timer.TimerSetupView
+ android:id="@+id/timer_setup"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1" />
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="#28ffffff" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <Button
+ android:id="@+id/timer_clear"
+ android:text="@string/timer_clear"
+ android:layout_width="match_parent"
+ style="@style/button"
+ android:layout_weight="1"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_height="wrap_content" />
+ <View
+ android:layout_height="match_parent"
+ android:layout_marginTop="8dip"
+ android:layout_marginBottom="8dip"
+ android:layout_width="1dip"
+ android:background="#28ffffff" />
+ <Button
+ android:id="@+id/timer_start"
+ android:text="@string/timer_start"
+ android:layout_width="match_parent"
+ style="@style/button"
+ android:layout_weight="1"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+ </LinearLayout>
+</LinearLayout>
+ \ No newline at end of file
diff --git a/res/layout/timer_list_item.xml b/res/layout/timer_list_item.xml
new file mode 100644
index 000000000..49f1c3bd1
--- /dev/null
+++ b/res/layout/timer_list_item.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<!-- timer item in the list of active timers -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="300dip">
+ <com.android.deskclock.CircleTimerView
+ android:id="@+id/timer_time"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+
+ <com.android.deskclock.timer.TimerView
+ android:id="@+id/timer_time_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center">
+ <TextView
+ android:id="@+id/hours"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/medium_bold"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/hours_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:layout_gravity="top"
+ android:text="@string/hours_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/minutes"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/medium_bold"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/minutes_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:text="@string/minutes_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/seconds"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/medium_light"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/seconds_label"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/label"
+ android:layout_gravity="top"
+ android:text="@string/seconds_label"
+ android:textColor="@color/clock_white"/>
+
+ <TextView
+ android:id="@+id/hundreds_seconds"
+ android:singleLine="true"
+ android:ellipsize="none"
+ style="@style/small_light"
+ android:visibility="gone"
+ android:textColor="@color/clock_white"/>
+
+ </com.android.deskclock.timer.TimerView>
+ </FrameLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+ <Button
+ android:id="@+id/timer_delete"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:background="?android:attr/selectableItemBackground"
+ android:text="@string/timer_delete"
+ android:layout_height="wrap_content" />
+ <Button
+ android:id="@+id/timer_plus_one"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ style="@style/button"
+ android:text="@string/timer_plus_one"
+ android:layout_height="wrap_content" />
+ <Button
+ android:id="@+id/timer_stop"
+ android:background="?android:attr/selectableItemBackground"
+ android:layout_weight="1"
+ android:layout_width="0dip"
+ android:text="@string/timer_stop"
+ style="@style/button"
+ android:layout_height="wrap_content" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/res/menu/desk_clock_menu.xml b/res/menu/desk_clock_menu.xml
index 6165f19f2..5231b7a7b 100644
--- a/res/menu/desk_clock_menu.xml
+++ b/res/menu/desk_clock_menu.xml
@@ -15,8 +15,11 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/menu_item_dock_settings"
- android:title="@string/menu_item_dock_settings"
+ <item android:id="@+id/menu_item_settings"
+ android:title="@string/menu_item_settings"
+ android:icon="@android:drawable/ic_menu_preferences"/>
+ <item android:id="@+id/menu_item_help"
+ android:title="@string/menu_item_help"
android:icon="@android:drawable/ic_menu_preferences"/>
</menu>
diff --git a/res/menu/settings_menu.xml b/res/menu/settings_menu.xml
new file mode 100644
index 000000000..399e39328
--- /dev/null
+++ b/res/menu/settings_menu.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@+id/menu_item_help"
+ android:title="@string/menu_item_help"
+ android:icon="@android:drawable/ic_menu_preferences"/>
+</menu>
+
+
diff --git a/res/mipmap-hdpi/ic_launcher_alarmclock.png b/res/mipmap-hdpi/ic_launcher_alarmclock.png
index 616c3d638..e52866a98 100644
--- a/res/mipmap-hdpi/ic_launcher_alarmclock.png
+++ b/res/mipmap-hdpi/ic_launcher_alarmclock.png
Binary files differ
diff --git a/res/mipmap-mdpi/ic_launcher_alarmclock.png b/res/mipmap-mdpi/ic_launcher_alarmclock.png
index 0feb59d25..f07ff69ea 100644
--- a/res/mipmap-mdpi/ic_launcher_alarmclock.png
+++ b/res/mipmap-mdpi/ic_launcher_alarmclock.png
Binary files differ
diff --git a/res/mipmap-xhdpi/ic_launcher_alarmclock.png b/res/mipmap-xhdpi/ic_launcher_alarmclock.png
index 845dada46..c1c8d1ca8 100644
--- a/res/mipmap-xhdpi/ic_launcher_alarmclock.png
+++ b/res/mipmap-xhdpi/ic_launcher_alarmclock.png
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 0543829cf..97e8b9740 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Kies \'n horlosie"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Wyserhorlosie"</string>
+ <string name="help" msgid="7786263119482654015">"hulp"</string>
<string name="settings" msgid="5849739030579520686">"Instellings"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Wekker in stilmodus"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Lui wekker selfs al is die foon in stilmodus"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Horlosieskerm"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Weerinligting is nie nou beskikbaar nie."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Dok-instellings"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Klankterugspeel-diens vir wekkers word in Clock gestel."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Laai tans luitoon…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Stel wekker"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Wekker gestel: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Tydhouer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Horlosie"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stophorlosie"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Wekkers"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Stede"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Kieslys"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Instellings"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Hulp"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Laat wag"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Hervat"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Begin"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stop"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Rondte"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Stel terug"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Deel"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Rondtetyd"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Totaal"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Voeg 1 minuut by"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Kanselleer"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Tyd is op."</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 77d455440..52e099064 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"ሰዓት ምረጥ"</string>
<string name="analog_gadget" msgid="1670505720837152766">"አናሎግ ሰዓት"</string>
+ <string name="help" msgid="7786263119482654015">"እገዛ"</string>
<string name="settings" msgid="5849739030579520686">"ቅንብሮች"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"ማንቂያ በፀጥታ ሁነታ"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"ስልኩ በፀጥታ ሁኔታ ላይ እያለ እንኳ ማንቂያ አጫውት"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"ሰዓት ማሳያ"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"የአየር ጠባይ መረጃ አሁን አይገኝም፡፡"</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"ቅንብሮችን ትከል"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"በጠረጴዛ ሰዓት ለተዘጋጁ ማንቂያ ደውሎች የዳግም አጫዋት አገልግሎት ድምፅ አሰማ።"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"የስልክ ጥሪ ድምፅ በመስቀል ላይ...."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"የማንቂያ ደወልአዘጋጅ"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"የማንቂያ ደወል ተዘጋጅቷል፡<xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"ሰዓት ቆጣሪ"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"ሰዓት"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"የሩጫ ሰዓት"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"ማንቂያዎች"</string>
+ <string name="button_cities" msgid="4555761857494501363">"ከተማዎች"</string>
+ <string name="button_menu" msgid="3258774294299940405">"ምናሌ"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"ቅንብሮች"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"እገዛ"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"ለአፍታ አቁም"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"ከቆመብት ቀጥል"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"ጀምር"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"አቁም"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"ዙር"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"ዳግም አስጀምር"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"አጋራ"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"የዙር ጊዜ"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"ጠቅላላ"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1 ደቂቃ አክል"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"ሰርዝ"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"ጊዜው አብቅቷል።"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 0ad384d90..074cd726c 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">"، "</string>
<string name="clock_instructions" msgid="2656876819515011590">"اختيار ساعة"</string>
<string name="analog_gadget" msgid="1670505720837152766">"ساعة عادية"</string>
+ <string name="help" msgid="7786263119482654015">"مساعدة"</string>
<string name="settings" msgid="5849739030579520686">"الإعدادات"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"المنبه في الوضع صامت"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"تشغيل المنبه حتى ولو كان الجهاز في الوضع صامت"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"عرض الساعة"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"معلومات الطقس غير متاحة في الوقت الحالي."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"إعدادات الإرساء"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"خدمة تشغيل الصوت بالنسبة إلى التنبيهات التي تم تعيينها في الساعة."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"جارٍ تحميل نغمة الرنين…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"ضبط المنبه"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"ضبط المنبه: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"موقت"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"الساعة"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"ساعة توقيف"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"التنبيهات"</string>
+ <string name="button_cities" msgid="4555761857494501363">"المدن"</string>
+ <string name="button_menu" msgid="3258774294299940405">"القائمة"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"الإعدادات"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"مساعدة"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"إيقاف مؤقت"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"استئناف"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"بدء"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"إيقاف"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"المختبر"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"إعادة ضبط"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"مشاركة"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"وقت المختبر"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"إجمالاً"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"إضافة دقيقة واحدة"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"إلغاء"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"انتهى الوقت."</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 86633cf20..f4c0f60a3 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Выбраць гадзіннiк"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Аналагавы гадзіннік"</string>
+ <string name="help" msgid="7786263119482654015">"даведка"</string>
<string name="settings" msgid="5849739030579520686">"Налады"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Будзільнік у бязгучным рэжыме"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Будзільнік гучыць, нават калі прылада працуе ў бязгучным рэжыме"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Экран гадзінніка"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Iнфармацыя пра надвор\'е зараз недаступная."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Налады док-станцыі"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Служба прайгравання для сігналаў, усталяваных у Clock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Загрузка мелодыі..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Усталяваць будзільнік"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Усталёўка будзільніка: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Гадзіннік"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Секундамер"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Будзільнікі"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Гарады"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Меню"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Налады"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Даведка"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Паўза"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Працягваць"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Пачаць"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Спыніць"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Абарот"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Скінуць"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Адправіць"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Час абароту"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Усяго"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Дадаць 1 хвiлiну"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Адмена"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Час выйшаў."</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 18761b78a..e83cd11d2 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Избор на часовник"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Аналогов часовник"</string>
+ <string name="help" msgid="7786263119482654015">"помощ"</string>
<string name="settings" msgid="5849739030579520686">"Настройки"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Будилник в тих режим"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Будилникът да звъни дори когато устройството е в тих режим"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Показване на часовника"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"В момента няма информация за времето."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Настройки за докинг станция"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Услуга за възпроизвеждане на звук за будилниците, зададени в часовника."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Мелодията се зарежда..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Навиване на будилника"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Будилникът е настроен: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Часовник"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Хронометър"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Будилници"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Градове"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Меню"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Настройки"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Помощ"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Поставяне на пауза"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Възобновяване"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Старт"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Стоп"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Междинно време"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Нулиране"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Споделяне"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"№"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Междинно време"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Общо"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Добавяне на 1 минута"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Отказ"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Времето изтече."</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 0cc8853a0..f997a1612 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Tria un rellotge"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Rellotge analògic"</string>
+ <string name="help" msgid="7786263119482654015">"ajuda"</string>
<string name="settings" msgid="5849739030579520686">"Configuració"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarma en mode silenciós"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Reprodueix l\'alarma fins i tot quan el dispositiu està en mode silenciós"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Visualització del rellotge"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"La informació meteorològica no està disponible en aquest moment."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Configuració de la base"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Reproducció d\'alarmes definides al rellotge."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"S\'està carregant el to..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Defineix l\'alarma"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarma definida: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Temporitzador"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Rellotge"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Cronòmetre"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmes"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Ciutats"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menú"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Configuració"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Ajuda"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Atura"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Reprèn"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Inicia"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Atura"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Restableix"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Comparteix"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"Núm."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Temps per volta"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Afegeix 1 minut"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Cancel·la"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"S\'ha esgotat el temps."</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index cd1aeeea4..b5f4df3b6 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Vyberte hodiny"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analogové hodiny"</string>
+ <string name="help" msgid="7786263119482654015">"nápověda"</string>
<string name="settings" msgid="5849739030579520686">"Nastavení"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Budík v tichém režimu"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Aktivovat budík i v případě, že je zařízení v tichém režimu."</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Zobrazení hodin"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Informace o počasí nejsou momentálně k dispozici."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Nastavení doku"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Služba přehrávání zvuku budíků nastavených v aplikaci Hodiny."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Načítání vyzváněcího tónu..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Nastavit budík"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Nastavení budíku: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Časovač"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Hodiny"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopky"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Budíky"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Města"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Nabídka"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Nastavení"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Nápověda"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pozastavit"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Obnovit"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Spustit"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Zastavit"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Úsek"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Resetovat"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Sdílet"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"č."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Čas úseku"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Celkem"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Přidat 1 minutu"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Zrušit"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Čas vypršel."</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 1f6feb82e..2cebc6a2d 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Vælg et ur"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analogt ur"</string>
+ <string name="help" msgid="7786263119482654015">"hjælp"</string>
<string name="settings" msgid="5849739030579520686">"Indstillinger"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm i lydløs tilstand"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Afspil alarm, selvom enheden er i lydløs tilstand"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Urvisning"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Vejroplysninger er ikke tilgængelige lige nu."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Indstillinger for dockingstation"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Tjenesten til afspilning af alarmlyd, der er angivet i uret."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Indlæser ringetone..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Indstil alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarmen er indstillet til: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Ur"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopur"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmer"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Byer"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Indstillinger"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Hjælp"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Genoptag"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Start"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stop"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Omgang"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Nulstil"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Del"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Omgangstid"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"I alt"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Tilføj 1 minut"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Annuller"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Tiden er gået."</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 02119f486..6b5922cce 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Uhr wählen"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analoguhr"</string>
+ <string name="help" msgid="7786263119482654015">"Hilfe"</string>
<string name="settings" msgid="5849739030579520686">"Einstellungen"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Auch im Lautlos-Modus"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Wecker klingelt auch im Lautlos-Modus"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Uhrendisplay"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Wetterinformationen sind derzeit nicht verfügbar."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Dock-Einstellungen"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Tonwiedergabedienst für in der Weckfunktion eingestellte Wecker"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Klingelton wird geladen..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Wecker einstellen"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Wecker eingestellt: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Uhr"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stoppuhr"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Wecker"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Städte"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menü"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Einstellungen"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Hilfe"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Anhalten"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Fortsetzen"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Starten"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stoppen"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Runde"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Zurücksetzen"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Teilen"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"Nr."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Rundenzeit"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Gesamt"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1 Minute hinzufügen"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Abbrechen"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Die Zeit ist abgelaufen!"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index c6c14a9a4..c6c072807 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Επιλέξτε ένα ρολόι"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Αναλογικό ρολόι"</string>
+ <string name="help" msgid="7786263119482654015">"βοήθεια"</string>
<string name="settings" msgid="5849739030579520686">"Ρυθμίσεις"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Ξυπνητήρι σε αθόρυβη λειτουργία"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Αναπαραγωγή ήχου ξυπνητηριού ακόμα και όταν η συσκευή βρίσκεται σε αθόρυβη λειτουργία"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Οθόνη ρολογιού"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Οι πληροφορίες καιρού δεν είναι διαθέσιμες αυτήν τη στιγμή."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Ρυθμίσεις βάσης σύνδεσης"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Η υπηρεσία αναπαραγωγής ήχου για ειδοποιήσεις έχει ρυθμιστεί στο Ρολόι."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Φόρτωση ήχου κλήσης"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Ορισμός ξυπνητηριού"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Το ξυπνητήρι ορίστηκε: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Χρονόμετρο"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Ρολόι"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Χρονόμετρο"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Ειδοποιήσεις"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Πόλεις"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Μενού"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Ρυθμίσεις"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Βοήθεια"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Παύση"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Συνέχιση"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Εκκίνηση"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Διακοπή"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Γύρος"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Επαναφορά"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Κοινή χρήση"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Χρόνος γύρου"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Σύνολο"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Προσθήκη 1 λεπτού"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Ακύρωση"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Ο χρόνος έχει τελειώσει"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index fee655d36..4756fee7a 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Choose a clock"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analogue clock"</string>
+ <string name="help" msgid="7786263119482654015">"help"</string>
<string name="settings" msgid="5849739030579520686">"Settings"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm in silent mode"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Play alarm even when the device is in silent mode"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Clock display"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Weather information isn\'t available at the moment."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Dock settings"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Sound playback service for alarms set in Clock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Loading ringtone…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Set alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarm set: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Clock"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopwatch"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarms"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Cities"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Settings"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Help"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Resume"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Start"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stop"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Lap"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Reset"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Share"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Lap Time"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Add 1 minute"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Cancel"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Time\'s up."</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f877ff842..7009ea7e5 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Seleccionar un reloj"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Reloj analógico"</string>
+ <string name="help" msgid="7786263119482654015">"ayuda"</string>
<string name="settings" msgid="5849739030579520686">"Configuración"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarma en modo silencio"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Reproducir alarma aun cuando el dispositivo se encuentre en modo silencioso"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Visualización del reloj"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"La información meteorológica no está disponible en este momento."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Configuración de la base"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Servicio de reproducción de sonidos para alarmas configuradas en Reloj"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Cargando tono..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Establecer alarma"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarma: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Reloj"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Cronómetro"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmas"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Ciudades"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menú"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Configuración"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Ayuda"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Reanudar"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Comenzar"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Detener"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Vuelta"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Restablecer"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Compartir"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"N.°"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Duración"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Agregar 1 minuto"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Cancelar"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Se acabó el tiempo."</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 7f049d624..080a2aae5 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Seleccionar un reloj"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Reloj analógico"</string>
+ <string name="help" msgid="7786263119482654015">"ayuda"</string>
<string name="settings" msgid="5849739030579520686">"Ajustes"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarma en modo silencio"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Reproducir alarma incluso en modo silencio"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Reloj"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"La información meteorológica no está disponible en este momento."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Ajustes del conector"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Reproducción de alarmas definidas en Reloj"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Cargando tono…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Establecer alarma"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarma establecida: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Reloj"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Cronómetro"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmas"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Ciudades"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menú"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Ajustes"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Ayuda"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Reanudar"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Iniciar"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Detener"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Duración"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Restablecer"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Compartir"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Duración"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Añadir 1 minuto"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Cancelar"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Tiempo agotado"</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index a711ed5e8..c5b41730a 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Valige kell"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analoogkell"</string>
+ <string name="help" msgid="7786263119482654015">"abi"</string>
<string name="settings" msgid="5849739030579520686">"Seaded"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Äratus on hääletus režiimis"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Esita äratus ka siis, kui seade on hääletus režiimis"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Kella ekraan"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Ilmateade ei ole praegu saadaval."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Doki seaded"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Kellas äratuste jaoks määratud heli taasesitamise teenus."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Helina laadimine ..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Äratuse määramine"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Määratud äratus: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Taimer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Kell"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopper"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmid"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Linnad"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menüü"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Seaded"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Abi"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Peata"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Jätka"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Alusta"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Peata"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Ring"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Lähtesta"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Jaga"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"Nr"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Ringi aeg"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Kokku"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Lisa 1 minut"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Tühista"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Aeg on läbi."</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index be56d9bee..1b78d6678 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">"، "</string>
<string name="clock_instructions" msgid="2656876819515011590">"انتخاب یک ساعت"</string>
<string name="analog_gadget" msgid="1670505720837152766">"ساعت آنالوگ"</string>
+ <string name="help" msgid="7786263119482654015">"راهنما"</string>
<string name="settings" msgid="5849739030579520686">"تنظیمات"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"زنگ ساعت در حالت بی صدا"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"پخش زنگ هشدار حتی در زمانی که تلفن در حالت ساکت است"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"نمایش ساعت"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"اطلاعات آب و هوا در حال حاضر در دسترس نیست."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"تنظیمات جایگاه"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"نمظیم سرویس بازپخش صدا برای هشدارها در \"ساعت رومیزی\"."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"در حال بارگیری آهنگ زنگ..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"تنظیم زنگ ساعت"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"تنظیم زنگ ساعت: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"تایمر"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"ساعت"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"کرونومتر"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"زنگ‌های ساعت"</string>
+ <string name="button_cities" msgid="4555761857494501363">"شهرها"</string>
+ <string name="button_menu" msgid="3258774294299940405">"منو"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"تنظیمات"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"راهنما"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"توقف موقت"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"ازسرگیری"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"شروع"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"توقف"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"دور"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"بازنشانی"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"اشتراک‏‌گذاری"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"زمان دور"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"مجموع"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"افزودن ۱ دقیقه"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"لغو"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"وقت تمام است!"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 5ed9e8ec1..2fca991eb 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Valitse kello"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analoginen kello"</string>
+ <string name="help" msgid="7786263119482654015">"ohje"</string>
<string name="settings" msgid="5849739030579520686">"Asetukset"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Herätys äänettömässä tilassa"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Soita herätys myös puhelimen ollessa äänettömässä tilassa"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Kellon näyttö"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Säätietoja ei ole saatavilla juuri nyt."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Telakointiasetukset"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Äänentoistopalvelu Kelloon asetetuille hälytyksille."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Ladataan soittoääntä..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Aseta herätys"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Herätys asetettu: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Ajastin"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Kello"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Sekuntikello"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Herätykset"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Kaupungit"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Valikko"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Asetukset"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Ohje"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Keskeytä"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Jatka"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Käynnistä"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Pysäytä"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Kierros"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Nollaa"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Jaa"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Kierrosaika"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Yhteensä"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Lisää 1 minuutti"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Peruuta"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Aika loppui."</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index e4354962c..1152b0e77 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Sélectionner une horloge"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Horloge analogique"</string>
+ <string name="help" msgid="7786263119482654015">"aide"</string>
<string name="settings" msgid="5849739030579520686">"Paramètres"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarme mode silencieux"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Faire sonner l\'alarme même lorsque l\'appareil est en mode silencieux"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Affichage de l\'horloge"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Les informations météo ne sont pas disponibles actuellement."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Paramètres station d\'accueil"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Service de retour audio pour les alarmes définies via l\'Horloge de bureau."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Chargement de la sonnerie..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Régler l\'alarme"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarme réglée : <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Minuteur"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Horloge"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Chronomètre"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmes"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Villes"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Paramètres"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Aide"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Reprendre"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Démarrer"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Arrêter"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Intervalle"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Réinitialiser"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Partager"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"n°"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Durée de l\'intervalle"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Ajouter 1 minute"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Annuler"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Temps écoulé."</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index b169e59cc..b442164df 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"कोई घड़ी चुनें"</string>
<string name="analog_gadget" msgid="1670505720837152766">"एनालॉग घड़ी"</string>
+ <string name="help" msgid="7786263119482654015">"सहायता"</string>
<string name="settings" msgid="5849739030579520686">"सेटिंग"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"मौन मोड में अलार्म"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"उपकरण मौन मोड में हो, तब भी अलार्म बजाएं"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"घड़ी का प्रदर्शन"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"मौसम की जानकारी अभी उपलब्ध नहीं है."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"डॉक सेटिंग"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"घड़ी में सेट अलार्म के लिए ध्वनि प्लेबैक सेवा."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"रिंगटोन लोड कर रहा है…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"अलार्म सेट करें"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"अलार्म सेट: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"टाइमर"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"घड़ी"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"स्टॉपवॉच"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"अलार्म"</string>
+ <string name="button_cities" msgid="4555761857494501363">"शहर"</string>
+ <string name="button_menu" msgid="3258774294299940405">"मेनू"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"सेटिंग"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"सहायता"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"पॉज़ करें"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"फिर से शुरू करें"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"प्रारंभ करें"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"रोकें"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"लैप"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"रीसेट करें"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"साझा करें"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"लैप समय"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"कुल"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1 मिनट जोड़ें"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"रद्द करें"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"समय समाप्त."</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 4374a40ba..0e2a3f3d7 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Odaberite sat"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analogni sat"</string>
+ <string name="help" msgid="7786263119482654015">"pomoć"</string>
<string name="settings" msgid="5849739030579520686">"Postavke"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm u bešumnom načinu rada"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Reproduciraj alarm čak i kad je uređaj u bešumnom načinu rada"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Prikaz sata"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Trenutačno nisu dostupne informacije o prognozi vremena."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Postavke priključne stanice"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Usluga reprodukcije zvuka za alarme postavljena je u aplikaciji Sat."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Učitavanje melodije zvona…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Postavi alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarm postavljen na: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Mjerač vremena"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Sat"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Kronometar"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmi"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Gradovi"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Izbornik"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Postavke"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Pomoć"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pauziraj"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Nastavi"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Kreni"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Zaustavi"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Krug"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Poništi"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Dijeli"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Vrijeme kruga"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Ukupno"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Dodaj 1 minutu"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Otkaži"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Vrijeme je isteklo."</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 8df9012fb..cbeec9ecb 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Válasszon egy órát"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analóg óra"</string>
+ <string name="help" msgid="7786263119482654015">"súgó"</string>
<string name="settings" msgid="5849739030579520686">"Beállítások"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Ébresztés néma üzemmódban"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Legyen ébresztés néma üzemmódban is."</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Óra megjelenítése"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Most nem érhetők el időjárási adatok."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Dokkolási beállítások"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Hanglejátszó szolgáltatás az Órában beállított riasztásokhoz."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Csengőhang betöltése..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Ébresztés beállítása"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Ébresztés időpontja: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Időzítő"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Óra"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopperóra"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Ébresztések"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Városok"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menü"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Beállítások"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Súgó"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Szüneteltetés"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Folytatás"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Indítás"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Leállítás"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Kör"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Alaphelyzet"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Megosztás"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Köridő"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Összes"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1 perc hozzáadása"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Mégse"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Az idő lejárt!"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index b4e216969..b14e50fe3 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Pilih jam"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Jam analog"</string>
+ <string name="help" msgid="7786263119482654015">"bantuan"</string>
<string name="settings" msgid="5849739030579520686">"Setelan"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm dalam mode senyap"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Bunyikan alarm meskipun perangkat dalam mode senyap"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Tampilan jam"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Saat ini informasi cuaca tidak tersedia."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Setelan dok"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Layanan pemutaran suara untuk alarm yang disetel di Clock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Memuat nada dering…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Setel alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarm disetel: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Pewaktu"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Jam"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopwatch"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarm"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Kota"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Setelan"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Bantuan"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Jeda"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Lanjutkan"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Mulai"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Berhenti"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Putaran"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Setel ulang"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Bagikan"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Waktu Putaran"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Tambah 1 menit"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Batal"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Waktu habis."</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0009e93bb..dd63e461c 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Scegli un orologio"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Orologio analogico"</string>
+ <string name="help" msgid="7786263119482654015">"guida"</string>
<string name="settings" msgid="5849739030579520686">"Impostazioni"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Allarme in mod. silenz."</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Riproduci allarme anche con dispositivo in modalità Silenzioso"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Visualizzazione orologio"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Le informazioni meteo non sono al momento disponibili."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Impostazioni dock"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Servizio di riproduzione dei suoni per gli allarmi impostati in Orologio."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Caricamento suoneria..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Imposta allarme"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Allarme impostato: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Orologio"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Cronometro"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Allarmi"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Città"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Impostazioni"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Guida"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Riprendi"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Inizia"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Interrompi"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Giro"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Reimposta"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Condividi"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"N."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Tempo giro"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Totale"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Aggiungi un minuto"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Annulla"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Tempo scaduto."</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 7920e8ca5..0651543c4 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"בחר שעון"</string>
<string name="analog_gadget" msgid="1670505720837152766">"שעון אנלוגי"</string>
+ <string name="help" msgid="7786263119482654015">"עזרה"</string>
<string name="settings" msgid="5849739030579520686">"הגדרות"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"התראה במצב שקט"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"השמע התראות גם כאשר הטלפון במצב שקט"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"תצוגת שעון"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"לא זמינים כרגע נתונים על מזג האוויר."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"הגדרות עגינה"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"שירות השמעת צלילים עבור התראות נקבע ב-Clock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"טוען צלצול..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"הגדר צלצול"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"הוגדרה התראה: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"טיימר"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"שעון"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"שעון עצר"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"התראות"</string>
+ <string name="button_cities" msgid="4555761857494501363">"ערים"</string>
+ <string name="button_menu" msgid="3258774294299940405">"תפריט"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"הגדרות"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"עזרה"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"השהה"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"המשך"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"התחל"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"עצור"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"הקפה"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"אפס"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"שתף"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"זמן הקפה"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"סה\"כ"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"הוסף דקה"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"בטל"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"הזמן נגמר."</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 767ea5fd1..a0de326c8 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">"、 "</string>
<string name="clock_instructions" msgid="2656876819515011590">"時計の選択"</string>
<string name="analog_gadget" msgid="1670505720837152766">"アナログ時計"</string>
+ <string name="help" msgid="7786263119482654015">"ヘルプ"</string>
<string name="settings" msgid="5849739030579520686">"設定"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"マナーモード中のアラーム"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"マナーモード中もアラームを鳴らす"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"時計のディスプレイ"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"現在、天気情報をご利用いただけません。"</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"ホルダーの設定"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"時計で設定したアラーム用のサウンド再生サービスです。"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"着信音を読み込み中..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"アラームを設定"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"アラーム設定時刻: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"タイマー"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"時計"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"ストップウォッチ"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"アラーム"</string>
+ <string name="button_cities" msgid="4555761857494501363">"都市"</string>
+ <string name="button_menu" msgid="3258774294299940405">"メニュー"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"設定"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"ヘルプ"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"一時停止"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"再開"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"開始"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"停止"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"ラップ"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"リセット"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"共有"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"回数"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"ラップタイム"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"合計時間"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1分延長"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"キャンセル"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"タイムアップ"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 36aa4f05b..43bde859e 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"시계 선택"</string>
<string name="analog_gadget" msgid="1670505720837152766">"아날로그 시계"</string>
+ <string name="help" msgid="7786263119482654015">"도움말"</string>
<string name="settings" msgid="5849739030579520686">"설정"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"무음 모드에서 알람 설정"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"무음 모드에서도 알람이 울리도록 설정"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"시계 디스플레이"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"현재 날씨 정보를 이용할 수 없습니다."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"도킹 설정"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"시계에서 설정한 알람 사운드 재생 서비스"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"벨소리 로드 중…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"알람 설정"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"알람 설정: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"타이머"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"시계"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"스톱워치"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"알람"</string>
+ <string name="button_cities" msgid="4555761857494501363">"도시"</string>
+ <string name="button_menu" msgid="3258774294299940405">"메뉴"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"설정"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"도움말"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"일시중지"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"다시 시작"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"시작"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"중지"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"랩"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"재설정"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"공유"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"랩 타임"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"합계"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1분 추가"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"취소"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"시간이 다 되었습니다."</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index ec380f87e..a00061837 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Pasirinkite laikrodį"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analoginis laikrodis"</string>
+ <string name="help" msgid="7786263119482654015">"pagalba"</string>
<string name="settings" msgid="5849739030579520686">"Nustatymai"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Signalas tyliuoju režimu"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Leisti signalą, net jei įrenginys veikia tylos režimu"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Laikrodžio pateiktis"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Šiuo metu informacija apie orus negalima."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Doko nustatymai"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Garso atkūrimo paslauga, skirta laikrodžio nustatytiems signalams."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Įkeliamas skambėjimo tonas..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Nustatyti signalą"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Nustatytas signalas: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Laikmatis"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Laikrodis"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Chronometras"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Signalai"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Miestai"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Meniu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Nustatymai"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Pagalba"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pristabdyti"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Atnaujinti"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Pradėti"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stabdyti"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Ratas"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Nustatyti iš naujo"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Bendrinti"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"nr."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Rato laikas"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Iš viso"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Pridėti 1 minutę"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Atšaukti"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Laikas baigėsi."</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index a361f894b..984251dc6 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Izvēlieties pulksteni"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analogais pulkstenis"</string>
+ <string name="help" msgid="7786263119482654015">"palīdzība"</string>
<string name="settings" msgid="5849739030579520686">"Iestatījumi"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Signāls klusuma režīmā"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Atskaņot signālu arī tad, ja ierīcē iestatīts klusuma režīms"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Pulksteņa attēlojums"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Informācija par laikapstākļiem pašlaik nav pieejama."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Doka iestatījumi"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Skaņas atskaņošanas pakalpojums lietotnē Pulkstenis iestatītajiem signāliem"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Notiek zvana signāla ielāde…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Iestatīt signālu"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Signāls ir iestatīts uz: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Taimeris"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Pulkstenis"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Hronometrs"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Signāli"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Pilsētas"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Izvēlne"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Iestatījumi"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Palīdzība"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pārtraukt"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Atsākt"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Sākt"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Apturēt"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Aplis"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Atiestatīt"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Kopīgot"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"Nr."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Apļa laiks"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Kopā"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Pievienot 1 minūti"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Atcelt"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Laiks ir beidzies!"</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 98d0ad60c..1d9d8ee16 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Pilih jam"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Jam analog"</string>
+ <string name="help" msgid="7786263119482654015">"bantuan"</string>
<string name="settings" msgid="5849739030579520686">"Tetapan"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Penggera dalam mod senyap"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Mainkan penggera walaupun peranti berada dalam mod senyap"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Paparan jam"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Maklumat cuaca tidak tersedia sekarang."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Tetapan dok"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Perkhidmatan main balik bunyi untuk penggera ditetapkan dalam Jam."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Memuatkan nada dering..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Tetapkan penggera"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Penggera ditetapkan: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Pemasa"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Jam"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Jam randik"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Penggera"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Bandar"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Tetapan"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Bantuan"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Jeda"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Sambung semula"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Mula"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Berhenti"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Pusingan"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Tetapkan semula"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Kongsi"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Masa Pusingan"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Jumlah"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Tambah 1 minit"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Batal"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Masa tamat."</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1168d6f04..9b966d89a 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Velg en klokke"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analog klokke"</string>
+ <string name="help" msgid="7786263119482654015">"hjelp"</string>
<string name="settings" msgid="5849739030579520686">"Innstillinger"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm i stillemodus"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Spill av alarm selv når enheten er i stillemodus"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Klokkeskjerm"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Værinformasjonen er ikke tilgjengelig for øyeblikket."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Innstillinger for forankringsstasjon"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Lydavspillingstjeneste for alarmer som er angitt i Klokke."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Laster inn ringetone ..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Still inn alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarm stilt inn: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Tidtaker"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Klokke"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stoppeklokke"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmer"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Byer"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Meny"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Innstillinger"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Hjelp"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pause"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Gjenoppta"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Start"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stopp"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Runde"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Tilbakestill"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Del"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Rundetid"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Totalt"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Legg til 1 minutt"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Avbryt"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Tiden er ute."</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index c2871a178..83f62a094 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Een klok selecteren"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analoge klok"</string>
+ <string name="help" msgid="7786263119482654015">"help"</string>
<string name="settings" msgid="5849739030579520686">"Instellingen"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm in stille modus"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Alarm afspelen, zelfs als stille modus van apparaat is geactiveerd"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Klokweergave"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Weersinformatie is momenteel niet beschikbaar."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Dockinstellingen"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Service geluidsweergave voor alarmen ingesteld in Klok."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Beltoon laden…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Alarm instellen"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarm is ingesteld: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Klok"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopwatch"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmen"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Plaatsen"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Instellingen"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Help"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pauze"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Hervatten"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Starten"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stoppen"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Ronde"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Opnieuw instellen"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Delen"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"Nummer"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Rondetijd"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Totaal"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1 minuut toevoegen"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Annuleren"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"De tijd is om!"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 84c8c05d5..69e37da1c 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Wybierz zegar."</string>
<string name="analog_gadget" msgid="1670505720837152766">"Zegar analogowy"</string>
+ <string name="help" msgid="7786263119482654015">"pomoc"</string>
<string name="settings" msgid="5849739030579520686">"Ustawienia"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm w trybie cichym"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Odtwórz alarm, nawet gdy urządzenie jest w trybie cichym"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Wyświetlanie zegara"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Informacje o pogodzie są w tej chwili niedostępne."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Ustawienia podstawki"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Usługa odtwarzania dźwięku alarmów ustawionych w zegarze"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Wczytywanie dzwonka…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Ustaw alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Ustawiony alarm: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Licznik"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Zegar"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stoper"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmy"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Miasta"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Ustawienia"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Pomoc"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Wstrzymaj"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Wznów"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Start"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Stop"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Okrążenie"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Resetuj"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Udostępnij"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"nr"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Czas okrążenia"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Łącznie"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Dodaj 1 minutę"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Anuluj"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Czas minął!"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 187cd0aad..d4c01acf7 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Escolha um relógio"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Relógio analógico"</string>
+ <string name="help" msgid="7786263119482654015">"ajuda"</string>
<string name="settings" msgid="5849739030579520686">"Definições"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarme em modo silencioso"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Fazer soar o alarme mesmo com o dispositivo em modo silencioso"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Apresentação do relógio"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Informações meteorológicas atualmente indisponíveis."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Definições da estação de ancoragem"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Serviço de reprodução de som para alarmes definidos no Despertador."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"A carregar toque..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Configurar alarme"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarme configurado para: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Relógio"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Cronómetro"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmes"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Cidades"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Definições"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Ajuda"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Retomar"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Iniciar"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Parar"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Repor"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Partilhar"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Tempo da Volta"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Adicionar 1 minuto"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Cancelar"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Terminou o tempo!"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index ef1baefb5..32fa56cb8 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Escolha um relógio"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Relógio analógico"</string>
+ <string name="help" msgid="7786263119482654015">"ajuda"</string>
<string name="settings" msgid="5849739030579520686">"Configurações"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Modo silencioso"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Tocar o alarme mesmo quando o dispositivo estiver no modo silencioso"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Exibição do relógio"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"As informações meteorológicas não estão disponíveis no momento."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Configurações de dock"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Serviço de reprodução de som para alarmes definidos no Relógio."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Carregando toque…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Definir alarme"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarme definido: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Temporizador"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Relógio"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Cronômetro"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmes"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Cidades"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Configurações"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Ajuda"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pausar"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Retomar"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Iniciar"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Parar"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Volta"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Zerar"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Compartilhar"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"nº"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Tempo da volta"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Adicionar um minuto"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Cancelar"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"O tempo acabou."</string>
</resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 420c1f575..2da2f95b1 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -61,6 +61,8 @@
<!-- no translation found for clock_instructions (2656876819515011590) -->
<skip />
<string name="analog_gadget" msgid="1670505720837152766">"Ura analoga"</string>
+ <!-- no translation found for help (7786263119482654015) -->
+ <skip />
<string name="settings" msgid="5849739030579520686">"Parameters"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Svegliarin en il modus silenzius"</string>
<!-- no translation found for alarm_in_silent_mode_summary (123772279768441207) -->
@@ -132,7 +134,6 @@
<skip />
<!-- no translation found for weather_fetch_failure (3425804832021006835) -->
<skip />
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Parameters da la basa"</string>
<!-- no translation found for alarm_klaxon_service_desc (2147506334302260256) -->
<skip />
<!-- no translation found for loading_ringtone (6523322777415268044) -->
@@ -141,4 +142,48 @@
<skip />
<!-- no translation found for control_set_alarm_with_existing (1128169496817859490) -->
<skip />
+ <!-- no translation found for menu_timer (6459070074762877114) -->
+ <skip />
+ <!-- no translation found for menu_clock (5612760670606829805) -->
+ <skip />
+ <!-- no translation found for menu_stopwatch (3396117705293574701) -->
+ <skip />
+ <!-- no translation found for button_alarms (8016103479617020265) -->
+ <skip />
+ <!-- no translation found for button_cities (4555761857494501363) -->
+ <skip />
+ <!-- no translation found for button_menu (3258774294299940405) -->
+ <skip />
+ <!-- no translation found for menu_item_settings (1413723516369078665) -->
+ <skip />
+ <!-- no translation found for menu_item_help (4570953476186849841) -->
+ <skip />
+ <!-- no translation found for sw_pause_button (2422084453454138042) -->
+ <skip />
+ <!-- no translation found for sw_resume_button (2569360966002022248) -->
+ <skip />
+ <!-- no translation found for sw_start_button (8373422516681242270) -->
+ <skip />
+ <!-- no translation found for sw_stop_button (8322958613123274451) -->
+ <skip />
+ <!-- no translation found for sw_lap_button (6992264696039004233) -->
+ <skip />
+ <!-- no translation found for sw_reset_button (6616804728322906117) -->
+ <skip />
+ <!-- no translation found for sw_share_button (4478648110382859382) -->
+ <skip />
+ <!-- no translation found for sw_lap_number (5284147827135227231) -->
+ <skip />
+ <!-- no translation found for sw_lap_time (8445539225664675846) -->
+ <skip />
+ <!-- no translation found for sw_lap_total (2575384748273693584) -->
+ <skip />
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <!-- no translation found for timer_add_one_button (1963943621548063189) -->
+ <skip />
+ <!-- no translation found for timer_dismiss_button (6161488380194869207) -->
+ <skip />
+ <!-- no translation found for timer_times_up (6157697208606617213) -->
+ <skip />
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 796bd2ef0..3631f6cda 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Alegeţi un ceas"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Ceas analogic"</string>
+ <string name="help" msgid="7786263119482654015">"ajutor"</string>
<string name="settings" msgid="5849739030579520686">"Setări"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarmă în modul Silenţios"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Doresc ca alarma să se declanşeze, chiar dacă dispozitivul se află în modul Silenţios"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Afişarea ceasului"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Informaţiile meteo nu sunt disponibile în acest moment."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Setări de andocare"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Serviciul de redare a sunetului pentru setarea alarmelor în aplicaţia Ceas."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Se încarcă tonul soneriei..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Setaţi alarma"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarmă setată: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Temporizator"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Ceas"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Cronometru"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarme"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Oraşe"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Meniu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Setări"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Ajutor"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Întrerupeţi"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Reluaţi"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Porniţi"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Opriţi"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Circuit"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Resetaţi"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Distribuiţi"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Durată circuit"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Total"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Adăugaţi 1 minut"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Anulaţi"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Timpul a expirat!"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index fe5683721..fd100716a 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Выберите часы"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Часы"</string>
+ <string name="help" msgid="7786263119482654015">"справка"</string>
<string name="settings" msgid="5849739030579520686">"Настройки"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Включать всегда"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Включать сигнал будильника, даже если устройство работает в беззвучном режиме"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Внешний вид"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Информация о погоде сейчас недоступна."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Настройки док-станции"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Служба воспроизведения сигналов в Часах."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Загрузка мелодии звонка..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Установить будильник"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Будильник установлен на <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Часы"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Секундомер"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Будильник"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Города"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Меню"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Настройки"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Справка"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Приостановить"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Продолжить"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Начать"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Остановить"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Круг"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Сбросить"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Поделиться"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"№"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Время круга"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Всего"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Добавить 1 минуту"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Отмена"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Время вышло."</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 8f638ed86..b5a697053 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Zvoľte hodiny"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analógové hodiny"</string>
+ <string name="help" msgid="7786263119482654015">"pomocník"</string>
<string name="settings" msgid="5849739030579520686">"Nastavenia"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Budík v tichom režime"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Aktivovať budík aj v prípade, ak je zariadenie v tichom režime"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Zobrazenie hodín"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Informácie o počasí nie sú momentálne k dispozícii."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Nastavenie doku"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Služba prehrávania zvuku budíkov nastavených v aplikácii Hodiny."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Prebieha načítavanie vyzváňacieho tónu..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Nastaviť budík"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Budík nastavený: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Časomiera"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Hodiny"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopky"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Budíky"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Mestá"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Ponuka"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Nastavenia"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Pomocník"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pozastaviť"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Obnoviť"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Spustiť"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Zastaviť"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Kolo"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Obnoviť"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Zdieľať"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"č."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Čas kola"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Celkom"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Pridať 1 minútu"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Zrušiť"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Čas vypršal."</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 1c98406f2..e549179aa 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Izberite uro"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analogna ura"</string>
+ <string name="help" msgid="7786263119482654015">"pomoč"</string>
<string name="settings" msgid="5849739030579520686">"Nastavitve"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm v tihem načinu"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Predvajaj alarm tudi, ko je naprava v tihem načinu"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Prikaz ure"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Vremenski podatki trenutno niso na voljo."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Nastavitve stojala"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Storitev predvajanja zvoka za alarme, nastavljene z namizno uro."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Nalaganje zvonjenja ..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Nastavi alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarm je nastavljen: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Časovnik"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Ura"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Štoparica"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmi"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Mesta"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Meni"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Nastavitve"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Pomoč"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Začasno ustavi"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Nadaljuj"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Začni"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Ustavi"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Krog"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Ponastavi"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Deli z drugimi"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"št."</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Čas za krog"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Skupaj"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Dodaj 1 minuto"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Prekliči"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Čas je potekel."</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5da974181..9479821ff 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Изаберите сат"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Аналогни сат"</string>
+ <string name="help" msgid="7786263119482654015">"помоћ"</string>
<string name="settings" msgid="5849739030579520686">"Подешавања"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Аларм у нечујном режиму"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Алармирај чак и када је уређај у нечујном режиму"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Приказ сата"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Информације о времену тренутно нису доступне."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Подешавања базне станице"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Услуга репродукције звука за аларме подешене у Сату."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Учитавање звука звона..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Подеси аларм"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Подешени аларм: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Мерач времена"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Сат"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Штоперица"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Аларми"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Градови"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Мени"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Подешавања"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Помоћ"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Паузирај"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Настави"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Покрени"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Заустави"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Круг"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Ресетуј"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Дели"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Пролазно време"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Укупно"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Додај 1 минут"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Откажи"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Време је истекло."</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 7a51d12ca..66a120961 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Välj en klocka"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analog klocka"</string>
+ <string name="help" msgid="7786263119482654015">"hjälp"</string>
<string name="settings" msgid="5849739030579520686">"Inställningar"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Alarm i tyst läge"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Alarmet ringer även när enheten är i tyst läge"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Klockvisning"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Väderinformationen är inte tillgänglig just nu."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Dockningsinställningar"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Ljuduppspelningstjänst för alarm som ställts in i DeskClock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Läser in ringsignal..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Ställ alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarmet ringer: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Klocka"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stoppur"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarm"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Orter"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Meny"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Inställningar"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Hjälp"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Pausa"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Återuppta"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Start"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Avbryt"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Varv"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Återställ"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Dela"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Varvtid"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Totalt"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Lägg till 1 minut"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Avbryt"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Tiden är ute!"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 269e6799b..f1888a34a 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Chagua saa"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Saa ya analojia"</string>
+ <string name="help" msgid="7786263119482654015">"msaada"</string>
<string name="settings" msgid="5849739030579520686">"Mipangilio"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Kengele iko katika hali kimya"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Cheza kengele hata wakati kifaa kipo katika hali kimya"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Onyesho la Saa"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Taarifa ya hali ya hewa haipatikani hivi sasa."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Mipangilio ya gati"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Huduma ya kuchezesha tena za kengele iliyowekwa kwenye Saa."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Inapakia mlio..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Weka kengele"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Kengele imewekwa: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Kipima wakati"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Saa"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Saa msito"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Kengele"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Miji"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menyu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Mipangilio"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Msaada"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Sitisha"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Endelea"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Anza"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Koma"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Lapu"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Weka upya"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Shiriki"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Muda wa Lapu"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Jumla"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Ongeza dakika 1"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Ghairi"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Muda umekwisha."</string>
</resources>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index 7a786d1d7..6425c9b62 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -25,6 +25,7 @@
<dimen name="date_text_size">15sp</dimen>
<dimen name="next_alarm_text_size">15sp</dimen>
<dimen name="time_margin_right">154dip</dimen>
+ <dimen name="time_margin_left">154dip</dimen>
<dimen name="time_margin_bottom">14dip</dimen>
<dimen name="time_margin_top">14dip</dimen>
<dimen name="ampm_margin_top">28dip</dimen>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 1a1aababb..c17c46097 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"เลือกนาฬิกา"</string>
<string name="analog_gadget" msgid="1670505720837152766">"นาฬิกาแอนะล็อก"</string>
+ <string name="help" msgid="7786263119482654015">"ความช่วยเหลือ"</string>
<string name="settings" msgid="5849739030579520686">"การตั้งค่า"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"การปลุกเมื่อปิดเสียงเรียกเข้า"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"เล่นเสียงปลุกแม้อุปกรณ์จะปิดเสียงเรียกเข้า"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"การแสดงนาฬิกา"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"ข้อมูลสภาพอากาศไม่พร้อมใช้งานในขณะนี้"</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"การตั้งค่าแท่นชาร์จ"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"บริการเล่นเสียงสำหรับการปลุกที่ตั้งไว้ใน Clock"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"กำลังโหลดเสียงเรียกเข้า..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"ตั้งปลุก"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"ปลุกเวลา: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"ตัวจับเวลา"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"นาฬิกา"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"นาฬิกาจับเวลา"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"การปลุก"</string>
+ <string name="button_cities" msgid="4555761857494501363">"เมือง"</string>
+ <string name="button_menu" msgid="3258774294299940405">"เมนู"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"การตั้งค่า"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"ความช่วยเหลือ"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"หยุดชั่วคราว"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"ดำเนินการต่อ"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"เริ่มต้น"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"หยุด"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"สิ้นสุดรอบ"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"รีเซ็ต"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"แบ่งปัน"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"เวลาที่ใช้ในแต่ละรอบ"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"รวม"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"เพิ่ม 1 นาที"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"ยกเลิก"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"หมดเวลา"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 74a1a5703..668bb06e0 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Pumili ng orasan"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analog na orasan"</string>
+ <string name="help" msgid="7786263119482654015">"tulong"</string>
<string name="settings" msgid="5849739030579520686">"Mga Setting"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Nasa silent mode ang alarm"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"I-play ang alarm kahit na nasa silent mode ang device"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Display ng orasan"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Hindi available sa ngayon ang impormasyon ng panahon."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Mga setting ng dock"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Serbisyo sa pag-playback ng tunog para sa mga alarm na nakatakda sa Clock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Nilo-load ang ringtone…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"I-set ang alarm"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Nakatakdang alarm: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Timer"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Orasan"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Stopwatch"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Mga Alarm"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Mga Lungsod"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Mga Setting"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Tulong"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"I-pause"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Ituloy"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Simulan"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Ihinto"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Lap"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"I-reset"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Ibahagi"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Lap Time"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Kabuuan"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Magdagdag ng 1 minuto"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Kanselahin"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Tapos na ang oras."</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index fea468305..a4ca84541 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Bir saat seçin"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Analog saat"</string>
+ <string name="help" msgid="7786263119482654015">"yardım"</string>
<string name="settings" msgid="5849739030579520686">"Ayarlar"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Sessiz modda alarm çal"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Alarm sessiz modda da çalsın"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Saat görüntüleme"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="PERCENT">%%</xliff:g><xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Hava durumu bilgileri şu anda kullanılamıyor."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Yuva ayarları"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Clock\'ta ayarlanmış alarmlar için ses çalma hizmeti"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Zil sesi yükleniyor..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Alarmı ayarla"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Alarm ayarı: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Zamanlayıcı"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Saat"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Kronometre"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Alarmlar"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Şehirler"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Menü"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Ayarlar"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Yardım"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Duraklat"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Devam Ettir"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Başlat"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Durdur"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Tur"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Sıfırla"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Paylaş"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Tur Süresi"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Toplam"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"1 dakika ekle"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"İptal"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Süre doldu."</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index c38075a1f..edca88f14 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Виберіть годинник"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Аналог. годинник"</string>
+ <string name="help" msgid="7786263119482654015">"довідка"</string>
<string name="settings" msgid="5849739030579520686">"Налаштув-ня"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Сигнал у беззвуч. режимі"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Відтворювати сигнал навіть у беззвучному режимі"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Показ годинника"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Інформація про погоду зараз не доступна."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Налашт. док-станції"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Служба відтворення звуків для набору сигналів у Годиннику."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Завантаж. мелодії…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Установити сигнал"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Сигнал установлено: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Таймер"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Годинник"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Секундомір"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Сигнали"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Міста"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Меню"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Налаштування"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Довідка"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Призупинити"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Відновити"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Почати"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Зупинити"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Коло"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Скинути"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Надіслати"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"№"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Час кола"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Усього"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Додати 1 хвилину"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Скасувати"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Час вийшов!"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 1cc3a463f..72ffccdd9 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Chọn đồng hồ"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Đồng hồ kim"</string>
+ <string name="help" msgid="7786263119482654015">"trợ giúp"</string>
<string name="settings" msgid="5849739030579520686">"Cài đặt"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"Báo thức ở chế độ im lặng"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Phát báo thức ngay cả khi thiết bị ở chế độ im lặng"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Hiển thị đồng hồ"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Hiện không có thông tin thời tiết."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Cài đặt đế"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Dịch vụ phát âm thanh cho báo thức đã đặt trong Clock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Đang tải nhạc chuông…"</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Đặt báo thức"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"Báo thức đã đặt: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Bộ hẹn giờ"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Đồng hồ"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Đồng hồ bấm giờ"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Báo thức"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Thành phố"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Trình đơn"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Cài đặt"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Trợ giúp"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Tạm dừng"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Tiếp tục"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Bắt đầu"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Ngừng"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Vòng chạy"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Đặt lại"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Chia sẻ"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Thời gian chạy"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Tổng số"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Thêm 1 phút"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Hủy"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Hết giờ."</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 3696fee30..5f5fa910c 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -36,7 +36,7 @@
<string name="time" msgid="8067216534232296518">"时间"</string>
<string name="alarm_alert_dismiss_text" msgid="4942914605480888820">"取消"</string>
<string name="alarm_alert_alert_silenced" msgid="2704775170733835993">"闹钟响铃时长为 <xliff:g id="MINUTES">%d</xliff:g> 分钟。"</string>
- <string name="alarm_alert_snooze_text" msgid="1774416052207651584">"暂停再响"</string>
+ <string name="alarm_alert_snooze_text" msgid="1774416052207651584">"稍后再响"</string>
<string name="alarm_alert_snooze_set" msgid="656470966696912087">"暂停 <xliff:g id="MINUTES">%d</xliff:g> 分钟。"</string>
<string-array name="alarm_set">
<item msgid="6450913786084215050">"已将闹钟设置为从现在起不到 1 分钟后提醒。"</item>
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"选择时钟"</string>
<string name="analog_gadget" msgid="1670505720837152766">"模拟时钟"</string>
+ <string name="help" msgid="7786263119482654015">"帮助"</string>
<string name="settings" msgid="5849739030579520686">"设置"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"静音模式下闹钟响"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"设备处于静音模式时,闹钟仍会响"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"时钟显示"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"目前无法提供天气信息。"</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"基座设置"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"在“时钟”内设置的闹钟铃声播放服务。"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"正在载入铃声..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"设置闹钟"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"设置的闹钟时间:<xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"计时器"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"时钟"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"秒表"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"闹钟"</string>
+ <string name="button_cities" msgid="4555761857494501363">"城市"</string>
+ <string name="button_menu" msgid="3258774294299940405">"菜单"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"设置"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"帮助"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"暂停"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"继续"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"开始"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"停止"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"一圈"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"重置"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"分享"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"一圈时间"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"总时间"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"增加 1 分钟"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"取消"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"时间到。"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 22ff0af3b..15e64fb2f 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">"、 "</string>
<string name="clock_instructions" msgid="2656876819515011590">"選擇時鐘"</string>
<string name="analog_gadget" msgid="1670505720837152766">"類比時鐘"</string>
+ <string name="help" msgid="7786263119482654015">"說明"</string>
<string name="settings" msgid="5849739030579520686">"設定"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"靜音模式下的鬧鐘"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"裝置處於靜音模式時,鬧鐘仍會響"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"時鐘顯示"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"目前無法取得天氣資訊。"</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"座架設定"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"在「時鐘」設定的鬧鐘鈴聲播放服務。"</string>
<string name="loading_ringtone" msgid="6523322777415268044">"正在載入鈴聲..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"設定鬧鐘"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"鬧鐘已設定為:<xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"計時器"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"時鐘"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"碼表"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"鬧鐘"</string>
+ <string name="button_cities" msgid="4555761857494501363">"城市"</string>
+ <string name="button_menu" msgid="3258774294299940405">"選單"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"設定"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"說明"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"暫停"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"繼續"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"開始"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"停止"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"單圈計時"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"重設"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"分享"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"單圈時間"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"總計"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"增加 1 分鐘"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"取消"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"時間到。"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 43aac0a6b..9432cc8ba 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -59,6 +59,7 @@
<string name="day_concat" msgid="971998564991636532">", "</string>
<string name="clock_instructions" msgid="2656876819515011590">"Khetha iwashi"</string>
<string name="analog_gadget" msgid="1670505720837152766">"Iwashi le-analogi"</string>
+ <string name="help" msgid="7786263119482654015">"usizo"</string>
<string name="settings" msgid="5849739030579520686">"Izilungiselelo"</string>
<string name="alarm_in_silent_mode_title" msgid="3892612644543516705">"I-alamu ikwimodi ethulile"</string>
<string name="alarm_in_silent_mode_summary" msgid="123772279768441207">"Dlala i-alamu ngisho noma idivayisi ikwimodi ethulile"</string>
@@ -122,9 +123,31 @@
<string name="desk_clock_button_description" msgid="4207371097361657274">"Ukubukeka kwewashi"</string>
<string name="battery_charging_level" msgid="5251483622085889693">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="weather_fetch_failure" msgid="3425804832021006835">"Ulwazi lwesimo sezulu alukho okwamanje."</string>
- <string name="menu_item_dock_settings" msgid="3524235151132971114">"Bophela zedokhu"</string>
<string name="alarm_klaxon_service_desc" msgid="2147506334302260256">"Insiza yokudlala komsindo we-alamu usethwe ku-Desk Clock."</string>
<string name="loading_ringtone" msgid="6523322777415268044">"Ilayisha iringithoni..."</string>
<string name="control_set_alarm" msgid="2194676418924016327">"Setha i-alamu"</string>
<string name="control_set_alarm_with_existing" msgid="1128169496817859490">"I-alamu isethelwe: <xliff:g id="TIME">%s</xliff:g>"</string>
+ <string name="menu_timer" msgid="6459070074762877114">"Isikali sesikhathi"</string>
+ <string name="menu_clock" msgid="5612760670606829805">"Iwashi"</string>
+ <string name="menu_stopwatch" msgid="3396117705293574701">"Iwashi lokuma"</string>
+ <string name="button_alarms" msgid="8016103479617020265">"Ama-alamu"</string>
+ <string name="button_cities" msgid="4555761857494501363">"Amadolobha"</string>
+ <string name="button_menu" msgid="3258774294299940405">"Imenyu"</string>
+ <string name="menu_item_settings" msgid="1413723516369078665">"Izilungiselelo"</string>
+ <string name="menu_item_help" msgid="4570953476186849841">"Usizo"</string>
+ <string name="sw_pause_button" msgid="2422084453454138042">"Misa okwesikhashana"</string>
+ <string name="sw_resume_button" msgid="2569360966002022248">"Qala futhi"</string>
+ <string name="sw_start_button" msgid="8373422516681242270">"Qala"</string>
+ <string name="sw_stop_button" msgid="8322958613123274451">"Misa"</string>
+ <string name="sw_lap_button" msgid="6992264696039004233">"Ilephu"</string>
+ <string name="sw_reset_button" msgid="6616804728322906117">"Setha kabusha"</string>
+ <string name="sw_share_button" msgid="4478648110382859382">"Yabelana"</string>
+ <string name="sw_lap_number" msgid="5284147827135227231">"#"</string>
+ <string name="sw_lap_time" msgid="8445539225664675846">"Isikhathi selephu"</string>
+ <string name="sw_lap_total" msgid="2575384748273693584">"Okuphelele"</string>
+ <!-- no translation found for sw_current_lap_number (4480685368717967660) -->
+ <skip />
+ <string name="timer_add_one_button" msgid="1963943621548063189">"Engeza imininithi elingu-1"</string>
+ <string name="timer_dismiss_button" msgid="6161488380194869207">"Khansela"</string>
+ <string name="timer_times_up" msgid="6157697208606617213">"Isikhathi siphelile."</string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index bc5b189e2..c10f23088 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -23,8 +23,13 @@
<color name="screen_saver_dim_color">#FF001634</color>
<color name="action_bar_button_text_color">#FFFFFF</color>
+ <color name="black">#ff000000</color>
<color name="white">#ffffffff</color>
<color name="red">#ffee0000</color>
<color name="grey">#ffaaaaaa</color>
<color name="transparent">#00000000</color>
+
+ <color name="clock_red">#ff4444</color>
+ <color name="clock_white">#ffffff</color>
+ <color name="clock_gray">#4dffffff</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index ae3bf5a08..9b84805c3 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -20,16 +20,19 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <dimen name="time_text_size">92dip</dimen>
+ <dimen name="time_text_size">120dip</dimen>
<dimen name="ampm_text_size">20dip</dimen>
<dimen name="date_text_size">15sp</dimen>
<dimen name="next_alarm_text_size">15sp</dimen>
- <dimen name="time_margin_right">48dip</dimen>
+ <dimen name="time_margin_right">8dip</dimen>
+ <dimen name="time_margin_left">8dip</dimen>
<dimen name="time_margin_bottom">14dip</dimen>
- <dimen name="time_margin_top">16dip</dimen>
+ <dimen name="time_margin_top">40dip</dimen>
<dimen name="ampm_margin_top">8dip</dimen>
<dimen name="font_margin_adjust">4dip</dimen>
<dimen name="next_alarm_margin_top">-4dip</dimen>
<dimen name="alarm_label_padding">8dip</dimen>
<dimen name="alert_dialog_title_height">64dip</dimen>
+
+ <dimen name="analog_clock_diameter">236dip</dimen>
</resources>
diff --git a/res/values/ids.xml b/res/values/ids.xml
new file mode 100644
index 000000000..fe91eeba2
--- /dev/null
+++ b/res/values/ids.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<resources>
+ <item type="id" name="numbers_key" />
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4e55558c3..71c2dd975 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4,9 +4,9 @@
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.
@@ -148,75 +148,61 @@
<!-- Label for analog clock gadget, shown in list of all gadgets -->
<string name="analog_gadget">Analog clock</string>
- <!-- Menu item title for general Alarm Clock Settings -->
- <string name="settings">Settings</string>
-
- <!-- Setting title for whether the alarm should play in silent mode.
- Usually, silent mode only affects the ringer, but this setting
- will make the alarms respect silent mode too. -->
- <string name="alarm_in_silent_mode_title">Alarm in silent mode</string>
+ <!-- Help activity name -->
+ <string name="help">help</string>
- <!-- Setting summary for whether the alarm should play in silent mode. -->
- <string name="alarm_in_silent_mode_summary">Play alarm even when the device is in silent mode</string>
+ <!-- Settings activity name -->
+ <string name="settings">Settings</string>
<!-- Setting title for changing the snooze duration. -->
- <string name="snooze_duration_title">Snooze duration</string>
-
- <!-- Entries listed in the ListPreference when invoking the snooze duration
- preference. -->
- <string-array name="snooze_duration_entries">
- <item>5 minutes</item>
- <item>10 minutes</item>
- <item>15 minutes</item>
- <item>20 minutes</item>
- <item>25 minutes</item>
- <item>30 minutes</item>
- </string-array>
-
- <!-- Values that are retrieved from the ListPreference. These must match
- the snooze_duration_entries above. -->
- <string-array name="snooze_duration_values">
- <item>5</item>
- <item>10</item>
- <item>15</item>
- <item>20</item>
- <item>25</item>
- <item>30</item>
- </string-array>
+ <string name="snooze_duration_title">Snooze length</string>
+
+ <plurals name="snooze_duration">
+ <!-- Duration for one minute -->
+ <item quantity="one">1 minute</item>
+ <!-- Duration for more than one minute -->
+ <item quantity="other"><xliff:g id="number" example="7">%d</xliff:g> minutes</item>
+ </plurals>
+
+ <plurals name="snooze_picker_label">
+ <!-- Duration for one minute -->
+ <item quantity="one">minute</item>
+ <!-- Duration for more than one minute -->
+ <item quantity="other">minutes</item>
+ </plurals>
<!-- Auto silence preference title -->
- <string name="auto_silence_title">Auto-silence</string>
+ <string name="auto_silence_title">Silence after</string>
<!-- Auto silence summary string set based on the preference value. -->
- <string name="auto_silence_summary">Alarms will silence after
- <xliff:g id="minutes">%d</xliff:g> minutes</string>
+ <string name="auto_silence_summary"><xliff:g id="minutes">%d</xliff:g> minutes</string>
<!-- Auto silence summary when turned off -->
- <string name="auto_silence_never">Off</string>
+ <string name="auto_silence_never">Never</string>
<!-- Entries listed in the ListPreference when invoking the auto silence
preference. -->
<string-array name="auto_silence_entries">
- <item>Off</item>
<item>5 minutes</item>
<item>10 minutes</item>
<item>15 minutes</item>
<item>20 minutes</item>
<item>25 minutes</item>
<item>30 minutes</item>
- </string-array>
+ <item>Never</item>
+ </string-array>
<!-- Values that are retrieved from the ListPreference. These must match
the auto_silence_entries above. -->
<string-array name="auto_silence_values" translatable="false">
- <item>-1</item> <!-- Off -->
<item>5</item>
<item>10</item>
<item>15</item>
<item>20</item>
<item>25</item>
<item>30</item>
- </string-array>
+ <item>-1</item> <!-- Off -->
+ </string-array>
<!-- Done button when editing an alarm. -->
<string name="done">Done</string>
@@ -230,9 +216,6 @@
<!-- Setting title for changing the alarm volume. -->
<string name="alarm_volume_title">Alarm volume</string>
- <!-- Setting summary for changing the alarm volume. -->
- <string name="alarm_volume_summary">Set the volume of alarms</string>
-
<!-- Summary for the alarm preference when silent is chosen. -->
<string name="silent_alarm_summary">Silent</string>
@@ -252,21 +235,18 @@
<!-- Dialog title of the volume and power setting. -->
<string name="volume_button_dialog_title">Button effect</string>
- <!-- The summary of the side button setting. -->
- <string name="volume_button_setting_summary">Set what these buttons do when pressed during an alarm</string>
-
<!-- Entries listed in the setting for the side-button action. -->
<string-array name="volume_button_setting_entries">
- <item>None</item>
<item>Snooze</item>
<item>Dismiss</item>
- </string-array>
+ <item>Do nothing</item>
+ </string-array>
<!-- Values for the side-button setting. -->
<string-array name="volume_button_setting_values">
- <item>0</item>
<item>1</item>
<item>2</item>
+ <item>0</item>
</string-array>
<!-- Title of the ringtone setting. -->
@@ -288,8 +268,6 @@
present on the device, we show nothing at all. -->
<string name="weather_fetch_failure">Weather information isn\'t available right now.</string>
- <string name="menu_item_dock_settings" msgid="9161438664257429372">Dock settings</string>
-
<!-- A description for the DeskClock alarm sound playback service.
[CHAR LIMIT=NONE] -->
<string name="alarm_klaxon_service_desc">Sound playback service for alarms set in Clock.</string>
@@ -302,8 +280,272 @@
<string name="control_set_alarm">Set alarm</string>
<!-- Label on the main screen control used to set alarm when there is already an existing alarm [CHAR LIMIT=30]-->
- <string name="control_set_alarm_with_existing">Alarm set: <xliff:g id="time">%s</xliff:g></string>
+ <string name="control_set_alarm_with_existing">Next alarm: <xliff:g id="time">%s</xliff:g></string>
+
+ <!-- ActionBar strings -->
+ <string name="menu_timer">Timer</string>
+ <string name="menu_clock">Clock</string>
+ <string name="menu_stopwatch">Stopwatch</string>
+
+ <!--- Clock view buttons strings-->
+ <string name="button_alarms">Alarms</string>
+ <string name="button_cities">Cities</string>
+ <string name="button_menu">Menu</string>
+ <string name="menu_item_settings">Settings</string>
+ <string name="menu_item_help">Help</string>
+
+ <!-- Stop Watch strings -->
+ <string name="sw_pause_button">Pause</string>
+ <string name="sw_resume_button">Resume</string>
+ <string name="sw_start_button">Start</string>
+ <string name="sw_stop_button">Stop</string>
+ <string name="sw_lap_button">Lap</string>
+ <string name="sw_reset_button">Reset</string>
+ <string name="sw_share_button">Share</string>
+ <string name="sw_lap_number">\#</string>
+ <string name="sw_lap_time">Lap Time</string>
+ <string name="sw_lap_total">Total</string>
+ <string name="sw_current_lap_number"><xliff:g id="number">%d</xliff:g></string>
+
+ <string name="hours_label">h</string>
+ <string name="minutes_label">m</string>
+ <string name="seconds_label">s</string>
+
+ <string name="zero">00:00:00</string>
+
+ <!-- Stopwatch share strings -->
+ <string name="sw_share_title">Sharing my times:</string>
+ <string name="sw_share_main">My time is <xliff:g id="time">%s</xliff:g></string>
+ <string name="sw_share_laps">Lap times:</string>
+
+ <!-- timer strings -->
+ <string name="timer_add_one_button">Add 1 minute</string>
+ <string name="timer_dismiss_button">Cancel</string>
+ <string name="timer_add_timer">Add Timer</string>
+ <string name="timer_clear">Clear</string>
+ <string name="timer_start">Start</string>
+ <string name="timer_delete">Delete</string>
+ <string name="timer_plus_one">+1 Min</string>
+ <string name="timer_stop">Stop</string>
+ <string name="timer_reset">Reset</string>
+
+ <string-array name="key_pad_numbers" translatable="true">
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ <item>4</item>
+ <item>5</item>
+ <item>6</item>
+ <item>7</item>
+ <item>8</item>
+ <item>9</item>
+ </string-array>
+
+ <!-- Settings strings -->
+ <string name="clock_settings">CLOCK</string>
+ <string name="clock_style">Style</string>
+ <string name="clock_style_title">Clock style</string>
+
+ <!-- Entries listed in the ListPreference when invoking the clock style
+ preference. -->
+ <string-array name="clock_style_entries">
+ <item>Analog</item>
+ <item>Digital</item>
+ <item>Text</item>
+ </string-array>
+
+ <!-- Values that are retrieved from the ListPreference. These must match
+ the clock_style_entries above. -->
+ <string-array name="clock_style_values">
+ <item>analog</item>
+ <item>digital</item>
+ <item>text</item>
+ </string-array>
+
+ <string name="automatic_home_clock">Automatic home clock</string>
+ <string name="automatic_home_clock_summary">While traveling outside regular time zone, add a clock for home</string>
+ <string name="home_time_zone">Home time zone</string>
+ <string name="home_time_zone_title">Home time zone</string>
+
+ <!-- Choices for timezones, must be kept in sync with timezone_values. CHAR LIMIT=25] -->
+ <string-array name="timezone_labels">
+ <item>"Marshall Islands"</item>
+ <item>"Midway Island"</item>
+ <item>"Hawaii"</item>
+ <item>"Alaska"</item>
+ <item>"Pacific Time"</item>
+ <item>"Tijuana"</item>
+ <item>"Arizona"</item>
+ <item>"Chihuahua"</item>
+ <item>"Mountain Time"</item>
+ <item>"Central America"</item>
+ <item>"Central Time"</item>
+ <item>"Mexico City"</item>
+ <item>"Saskatchewan"</item>
+ <item>"Bogota"</item>
+ <item>"Eastern Time"</item>
+ <item>"Venezuela"</item>
+ <item>"Atlantic Time (Barbados)"</item>
+ <item>"Atlantic Time (Canada)"</item>
+ <item>"Manaus"</item>
+ <item>"Santiago"</item>
+ <item>"Newfoundland"</item>
+ <item>"Brasilia"</item>
+ <item>"Buenos Aires"</item>
+ <item>"Greenland"</item>
+ <item>"Montevideo"</item>
+ <item>"Mid-Atlantic"</item>
+ <item>"Azores"</item>
+ <item>"Cape Verde Islands"</item>
+ <item>"Casablanca"</item>
+ <item>"London, Dublin"</item>
+ <item>"Amsterdam, Berlin"</item>
+ <item>"Belgrade"</item>
+ <item>"Brussels"</item>
+ <item>"Sarajevo"</item>
+ <item>"Windhoek"</item>
+ <item>"W. Africa Time"</item>
+ <item>"Amman, Jordan"</item>
+ <item>"Athens, Istanbul"</item>
+ <item>"Beirut, Lebanon"</item>
+ <item>"Cairo"</item>
+ <item>"Helsinki"</item>
+ <item>"Jerusalem"</item>
+ <item>"Minsk"</item>
+ <item>"Harare"</item>
+ <item>"Baghdad"</item>
+ <item>"Moscow"</item>
+ <item>"Kuwait"</item>
+ <item>"Nairobi"</item>
+ <item>"Tehran"</item>
+ <item>"Baku"</item>
+ <item>"Tbilisi"</item>
+ <item>"Yerevan"</item>
+ <item>"Dubai"</item>
+ <item>"Kabul"</item>
+ <item>"Islamabad, Karachi"</item>
+ <item>"Ural'sk"</item>
+ <item>"Yekaterinburg"</item>
+ <item>"Kolkata"</item>
+ <item>"Sri Lanka"</item>
+ <item>"Kathmandu"</item>
+ <item>"Astana"</item>
+ <item>"Yangon"</item>
+ <item>"Krasnoyarsk"</item>
+ <item>"Bangkok"</item>
+ <item>"Beijing"</item>
+ <item>"Hong Kong"</item>
+ <item>"Irkutsk"</item>
+ <item>"Kuala Lumpur"</item>
+ <item>"Perth"</item>
+ <item>"Taipei"</item>
+ <item>"Seoul"</item>
+ <item>"Tokyo, Osaka"</item>
+ <item>"Yakutsk"</item>
+ <item>"Adelaide"</item>
+ <item>"Darwin"</item>
+ <item>"Brisbane"</item>
+ <item>"Hobart"</item>
+ <item>"Sydney, Canberra"</item>
+ <item>"Vladivostok"</item>
+ <item>"Guam"</item>
+ <item>"Magadan"</item>
+ <item>"Auckland"</item>
+ <item>"Fiji"</item>
+ <item>"Tonga"</item>
+ </string-array>
+ <!-- Choices for timezones, must be kept in sync with timezone_values. -->
+
+ <string-array name="timezone_values" translatable="false">
+ <item>"Pacific/Majuro"</item>
+ <item>"Pacific/Midway"</item>
+ <item>"Pacific/Honolulu"</item>
+ <item>"America/Anchorage"</item>
+ <item>"America/Los_Angeles"</item>
+ <item>"America/Tijuana"</item>
+ <item>"America/Phoenix"</item>
+ <item>"America/Chihuahua"</item>
+ <item>"America/Denver"</item>
+ <item>"America/Costa_Rica"</item>
+ <item>"America/Chicago"</item>
+ <item>"America/Mexico_City"</item>
+ <item>"America/Regina"</item>
+ <item>"America/Bogota"</item>
+ <item>"America/New_York"</item>
+ <item>"America/Caracas"</item>
+ <item>"America/Barbados"</item>
+ <item>"America/Halifax"</item>
+ <item>"America/Manaus"</item>
+ <item>"America/Santiago"</item>
+ <item>"America/St_Johns"</item>
+ <item>"America/Sao_Paulo"</item>
+ <item>"America/Argentina/Buenos_Aires"</item>
+ <item>"America/Godthab"</item>
+ <item>"America/Montevideo"</item>
+ <item>"Atlantic/South_Georgia"</item>
+ <item>"Atlantic/Azores"</item>
+ <item>"Atlantic/Cape_Verde"</item>
+ <item>"Africa/Casablanca"</item>
+ <item>"Europe/London"</item>
+ <item>"Europe/Amsterdam"</item>
+ <item>"Europe/Belgrade"</item>
+ <item>"Europe/Brussels"</item>
+ <item>"Europe/Sarajevo"</item>
+ <item>"Africa/Windhoek"</item>
+ <item>"Africa/Brazzaville"</item>
+ <item>"Asia/Amman"</item>
+ <item>"Europe/Athens"</item>
+ <item>"Asia/Beirut"</item>
+ <item>"Africa/Cairo"</item>
+ <item>"Europe/Helsinki"</item>
+ <item>"Asia/Jerusalem"</item>
+ <item>"Europe/Minsk"</item>
+ <item>"Africa/Harare"</item>
+ <item>"Asia/Baghdad"</item>
+ <item>"Europe/Moscow"</item>
+ <item>"Asia/Kuwait"</item>
+ <item>"Africa/Nairobi"</item>
+ <item>"Asia/Tehran"</item>
+ <item>"Asia/Baku"</item>
+ <item>"Asia/Tbilisi"</item>
+ <item>"Asia/Yerevan"</item>
+ <item>"Asia/Dubai"</item>
+ <item>"Asia/Kabul"</item>
+ <item>"Asia/Karachi"</item>
+ <item>"Asia/Oral"</item>
+ <item>"Asia/Yekaterinburg"</item>
+ <item>"Asia/Calcutta"</item>
+ <item>"Asia/Colombo"</item>
+ <item>"Asia/Katmandu"</item>
+ <item>"Asia/Almaty"</item>
+ <item>"Asia/Rangoon"</item>
+ <item>"Asia/Krasnoyarsk"</item>
+ <item>"Asia/Bangkok"</item>
+ <item>"Asia/Shanghai"</item>
+ <item>"Asia/Hong_Kong"</item>
+ <item>"Asia/Irkutsk"</item>
+ <item>"Asia/Kuala_Lumpur"</item>
+ <item>"Australia/Perth"</item>
+ <item>"Asia/Taipei"</item>
+ <item>"Asia/Seoul"</item>
+ <item>"Asia/Tokyo"</item>
+ <item>"Asia/Yakutsk"</item>
+ <item>"Australia/Adelaide"</item>
+ <item>"Australia/Darwin"</item>
+ <item>"Australia/Brisbane"</item>
+ <item>"Australia/Hobart"</item>
+ <item>"Australia/Sydney"</item>
+ <item>"Asia/Vladivostok"</item>
+ <item>"Pacific/Guam"</item>
+ <item>"Asia/Magadan"</item>
+ <item>"Pacific/Auckland"</item>
+ <item>"Pacific/Fiji"</item>
+ <item>"Pacific/Tongatapu"</item>
+ </string-array>
+
+ <string name="alarm_settings">ALARMS</string>
+
</resources>
-
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 1a4fde3b5..e44730bd3 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -21,7 +21,34 @@
<item name="android:layout_gravity">center_horizontal</item>
</style>
- <style name="AlarmClockTheme" parent="android:Theme.Holo.DialogWhenLarge"/>
+ <style name="DeskClock" parent="android:Theme.Holo">
+ <item name="android:windowActionBarOverlay">true</item>
+ <item name="android:windowBackground">@color/black</item>
+ <item name="android:actionBarTabStyle">@style/DeskClockTabStyle</item>
+ <item name="android:actionBarTabBarStyle">@style/DeskClockTabBarStyle</item>
+ </style>
+
+ <style name="DeskClockTabStyle" parent="@android:style/Theme.Holo">
+ <item name="android:background">?android:attr/selectableItemBackground</item>
+ <item name="android:gravity">center</item>
+ </style>
+
+ <style name="DeskClockTabBarStyle" parent="@android:style/Theme.Holo">
+ <item name="android:background">@color/black</item>
+ <item name="android:showDividers">middle</item>
+ <item name="android:divider">?android:attr/dividerVertical</item>
+ <item name="android:dividerPadding">12dp</item>
+ <item name="android:gravity">center</item>
+ </style>
+
+ <style name="AlarmClockTheme" parent="android:Theme.Holo.DialogWhenLarge">
+ <item name="android:windowBackground">@color/black</item>
+ </style>
+
+ <style name="SettingsTheme" parent="android:Theme.Holo">
+ <item name="android:windowBackground">@color/black</item>
+ </style>
+
<style name="SetAlarmTheme" parent="android:Theme.Holo.DialogWhenLarge"/>
<style name="AlarmAlertFullScreenWindowTitle">
@@ -67,4 +94,69 @@
<item name="android:layout_width">68dip</item>
<item name="android:layout_height">68dip</item>
</style>
+
+ <style name="small_bold">
+ <item name="android:textSize">48sp</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:fontFamily">sans-serif</item>
+ </style>
+
+ <style name="medium_bold">
+ <item name="android:textSize">60sp</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:fontFamily">sans-serif</item>
+ </style>
+
+ <style name="small_light">
+ <item name="android:textSize">48sp</item>
+ <item name="android:fontFamily">sans-serif-light</item>
+ </style>
+
+ <style name="medium_light">
+ <item name="android:textSize">60sp</item>
+ <item name="android:fontFamily">sans-serif-light</item>
+ </style>
+
+ <style name="label">
+ <item name="android:textSize">12sp</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ </style>
+
+ <style name="header">
+ <item name="android:textSize">24sp</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ </style>
+
+ <style name="big_bold">
+ <item name="android:textSize">120sp</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:fontFamily">sans-serif</item>
+ </style>
+
+ <style name="big_thin">
+ <item name="android:textSize">120sp</item>
+ <item name="android:fontFamily">sans-serif-thin</item>
+ </style>
+
+ <style name="body">
+ <item name="android:textSize">16sp</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ </style>
+
+ <style name="body_bold">
+ <item name="android:textSize">16sp</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ </style>
+
+ <style name="button">
+ <item name="android:textSize">22sp</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:fontFamily">sans-serif-condensed</item>
+ </style>
</resources>
diff --git a/res/xml/settings.xml b/res/xml/settings.xml
index 0b6d522b0..2dc2c3e69 100644
--- a/res/xml/settings.xml
+++ b/res/xml/settings.xml
@@ -17,50 +17,55 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/settings">
+ <PreferenceCategory
+ android:title="@string/clock_settings">
+ <ListPreference
+ android:key="clock_style"
+ android:title="@string/clock_style"
+ android:entries="@array/clock_style_entries"
+ android:entryValues="@array/clock_style_values"
+ android:defaultValue="analog"
+ android:dialogTitle="@string/clock_style_title" />
+ <CheckBoxPreference
+ android:key="automatic_home_clock"
+ android:title="@string/automatic_home_clock"
+ android:summary="@string/automatic_home_clock_summary"
+ android:defaultValue="true" />
+ <ListPreference
+ android:key="home_time_zone"
+ android:entries="@array/timezone_labels"
+ android:entryValues="@array/timezone_values"
+ android:dialogTitle="@string/home_time_zone_title"
+ android:title="@string/home_time_zone" />
+ </PreferenceCategory>
+
+ <PreferenceCategory
+ android:title="@string/alarm_settings">
+ <ListPreference
+ android:key="auto_silence"
+ android:title="@string/auto_silence_title"
+ android:entries="@array/auto_silence_entries"
+ android:entryValues="@array/auto_silence_values"
+ android:defaultValue="10"
+ android:dialogTitle="@string/auto_silence_title" />
+
+ <com.android.deskclock.SnoozeLengthDialog
+ android:key="snooze_duration"
+ android:title="@string/snooze_duration_title"
+ android:defaultValue="10"/>
+
+ <VolumePreference
+ android:title="@string/alarm_volume_title"
+ android:dialogTitle="@string/alarm_volume_title"
+ android:persistent="false"
+ android:streamType="alarm" />
- <CheckBoxPreference
- android:key="alarm_in_silent_mode"
- android:title="@string/alarm_in_silent_mode_title"
- android:summary="@string/alarm_in_silent_mode_summary" />
-
- <VolumePreference
- android:title="@string/alarm_volume_title"
- android:summary="@string/alarm_volume_summary"
- android:dialogTitle="@string/alarm_volume_title"
- android:persistent="false"
- android:streamType="alarm" />
-
- <ListPreference
- android:key="snooze_duration"
- android:title="@string/snooze_duration_title"
- android:entries="@array/snooze_duration_entries"
- android:entryValues="@array/snooze_duration_values"
- android:defaultValue="10"
- android:dialogTitle="@string/snooze_duration_title" />
-
- <ListPreference
- android:key="auto_silence"
- android:title="@string/auto_silence_title"
- android:entries="@array/auto_silence_entries"
- android:entryValues="@array/auto_silence_values"
- android:defaultValue="10"
- android:dialogTitle="@string/auto_silence_title" />
-
- <ListPreference
- android:key="volume_button_setting"
- android:title="@string/volume_button_setting_title"
- android:dialogTitle="@string/volume_button_dialog_title"
- android:entries="@array/volume_button_setting_entries"
- android:entryValues="@array/volume_button_setting_values"
- android:summary="@string/volume_button_setting_summary"
- android:defaultValue="1" />
-
- <com.android.deskclock.AlarmPreference
- android:key="default_ringtone"
- android:title="@string/default_ringtone_setting_title"
- android:ringtoneType="alarm"
- android:showDefault="false"
- android:persistent="false"
- android:showSilent="true" />
-
+ <ListPreference
+ android:key="volume_button_setting"
+ android:title="@string/volume_button_setting_title"
+ android:dialogTitle="@string/volume_button_dialog_title"
+ android:entries="@array/volume_button_setting_entries"
+ android:entryValues="@array/volume_button_setting_values"
+ android:defaultValue="1" />
+ </PreferenceCategory>
</PreferenceScreen>
diff --git a/src/com/android/deskclock/AlarmAlert.java b/src/com/android/deskclock/AlarmAlert.java
index 4c7cc8f40..fa1a757cd 100644
--- a/src/com/android/deskclock/AlarmAlert.java
+++ b/src/com/android/deskclock/AlarmAlert.java
@@ -60,7 +60,7 @@ public class AlarmAlert extends AlarmAlertFullScreen {
super.onCreate(icicle);
/* Disable custom title, this will already be shown as a dialog */
- findViewById(R.id.topPanel).setVisibility(View.GONE);
+ // findViewById(R.id.topPanel).setVisibility(View.GONE);
// Listen for the screen turning off so that when the screen comes back
// on, the user does not need to unlock the phone to dismiss the alarm.
@@ -85,7 +85,7 @@ public class AlarmAlert extends AlarmAlertFullScreen {
protected int getLayoutResId() {
return R.layout.alarm_alert;
}
-
+
private boolean checkRetryCount() {
if (mKeyguardRetryCount++ >= MAX_KEYGUARD_CHECKS) {
Log.e("Tried to read keyguard status too many times, bailing...");
diff --git a/src/com/android/deskclock/AlarmAlertFullScreen.java b/src/com/android/deskclock/AlarmAlertFullScreen.java
index 884cb92c5..242067d55 100644
--- a/src/com/android/deskclock/AlarmAlertFullScreen.java
+++ b/src/com/android/deskclock/AlarmAlertFullScreen.java
@@ -55,7 +55,7 @@ public class AlarmAlertFullScreen extends Activity {
// Receives the ALARM_KILLED action from the AlarmKlaxon,
// and also ALARM_SNOOZE_ACTION / ALARM_DISMISS_ACTION from other applications
- private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
@@ -117,7 +117,7 @@ public class AlarmAlertFullScreen extends Activity {
protected int getLayoutResId() {
return R.layout.alarm_alert_fullscreen;
}
-
+
private void updateLayout() {
LayoutInflater inflater = LayoutInflater.from(this);
diff --git a/src/com/android/deskclock/AlarmClock.java b/src/com/android/deskclock/AlarmClock.java
index ab38c0ce7..4765d644b 100644
--- a/src/com/android/deskclock/AlarmClock.java
+++ b/src/com/android/deskclock/AlarmClock.java
@@ -77,8 +77,8 @@ public class AlarmClock extends Activity implements OnItemClickListener {
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View ret = mFactory.inflate(R.layout.alarm_time, parent, false);
- DigitalClock digitalClock =
- (DigitalClock) ret.findViewById(R.id.digitalClock);
+ OldDigitalClock digitalClock =
+ (OldDigitalClock) ret.findViewById(R.id.digitalClock);
digitalClock.setLive(false);
return ret;
}
@@ -102,8 +102,8 @@ public class AlarmClock extends Activity implements OnItemClickListener {
}
});
- DigitalClock digitalClock =
- (DigitalClock) view.findViewById(R.id.digitalClock);
+ OldDigitalClock digitalClock =
+ (OldDigitalClock) view.findViewById(R.id.digitalClock);
// set the alarm text
final Calendar c = Calendar.getInstance();
diff --git a/src/com/android/deskclock/AnalogClock.java b/src/com/android/deskclock/AnalogClock.java
new file mode 100644
index 000000000..3491d09ff
--- /dev/null
+++ b/src/com/android/deskclock/AnalogClock.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright (C) 2006 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.android.deskclock;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.BroadcastReceiver;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.text.format.DateUtils;
+import android.text.format.Time;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.RemoteViews.RemoteView;
+
+import java.util.TimeZone;
+
+/**
+ * This widget display an analogic clock with two hands for hours and
+ * minutes.
+ */
+public class AnalogClock extends View {
+ private Time mCalendar;
+
+ private final Drawable mHourHand;
+ private final Drawable mMinuteHand;
+ private final Drawable mSecondHand;
+ private final Drawable mDial;
+
+ private final int mDialWidth;
+ private final int mDialHeight;
+
+ private boolean mAttached;
+
+ private final Handler mHandler = new Handler();
+ private float mSeconds;
+ private float mMinutes;
+ private float mHour;
+ private boolean mChanged;
+ private final Context mContext;
+
+ public AnalogClock(Context context) {
+ this(context, null);
+ }
+
+ public AnalogClock(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public AnalogClock(Context context, AttributeSet attrs,
+ int defStyle) {
+ super(context, attrs, defStyle);
+ mContext = context;
+ Resources r = mContext.getResources();
+
+ mDial = r.getDrawable(R.drawable.clock_analog_dial);
+ mHourHand = r.getDrawable(R.drawable.clock_analog_hour);
+ mMinuteHand = r.getDrawable(R.drawable.clock_analog_minute);
+ mSecondHand = r.getDrawable(R.drawable.clock_analog_second);
+
+ mCalendar = new Time();
+
+ mDialWidth = mDial.getIntrinsicWidth();
+ mDialHeight = mDial.getIntrinsicHeight();
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ if (!mAttached) {
+ mAttached = true;
+ IntentFilter filter = new IntentFilter();
+
+ filter.addAction(Intent.ACTION_TIME_TICK);
+ filter.addAction(Intent.ACTION_TIME_CHANGED);
+ filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
+
+ getContext().registerReceiver(mIntentReceiver, filter, null, mHandler);
+ }
+
+ // NOTE: It's safe to do these after registering the receiver since the receiver always runs
+ // in the main thread, therefore the receiver can't run before this method returns.
+
+ // The time zone may have changed while the receiver wasn't registered, so update the Time
+ mCalendar = new Time();
+
+ // Make sure we update to the current time
+ onTimeChanged();
+
+ // tick the seconds
+ post(mClockTick);
+
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ if (mAttached) {
+ getContext().unregisterReceiver(mIntentReceiver);
+ removeCallbacks(mClockTick);
+ mAttached = false;
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+
+ int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+ int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+ int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+ int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+
+ float hScale = 1.0f;
+ float vScale = 1.0f;
+
+ if (widthMode != MeasureSpec.UNSPECIFIED && widthSize < mDialWidth) {
+ hScale = (float) widthSize / (float) mDialWidth;
+ }
+
+ if (heightMode != MeasureSpec.UNSPECIFIED && heightSize < mDialHeight) {
+ vScale = (float )heightSize / (float) mDialHeight;
+ }
+
+ float scale = Math.min(hScale, vScale);
+
+ setMeasuredDimension(resolveSizeAndState((int) (mDialWidth * scale), widthMeasureSpec, 0),
+ resolveSizeAndState((int) (mDialHeight * scale), heightMeasureSpec, 0));
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ mChanged = true;
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ boolean changed = mChanged;
+ if (changed) {
+ mChanged = false;
+ }
+
+ int availableWidth = getWidth();
+ int availableHeight = getHeight();
+
+ int x = availableWidth / 2;
+ int y = availableHeight / 2;
+
+ final Drawable dial = mDial;
+ int w = dial.getIntrinsicWidth();
+ int h = dial.getIntrinsicHeight();
+
+ boolean scaled = false;
+
+ if (availableWidth < w || availableHeight < h) {
+ scaled = true;
+ float scale = Math.min((float) availableWidth / (float) w,
+ (float) availableHeight / (float) h);
+ canvas.save();
+ canvas.scale(scale, scale, x, y);
+ }
+
+ if (changed) {
+ dial.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
+ }
+ dial.draw(canvas);
+
+ canvas.save();
+ canvas.rotate(mHour / 12.0f * 360.0f, x, y);
+ final Drawable hourHand = mHourHand;
+ if (changed) {
+ w = hourHand.getIntrinsicWidth();
+ h = hourHand.getIntrinsicHeight();
+ hourHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
+ }
+ hourHand.draw(canvas);
+ canvas.restore();
+
+ canvas.save();
+ canvas.rotate(mMinutes / 60.0f * 360.0f, x, y);
+
+ final Drawable minuteHand = mMinuteHand;
+ if (changed) {
+ w = minuteHand.getIntrinsicWidth();
+ h = minuteHand.getIntrinsicHeight();
+ minuteHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
+ }
+ minuteHand.draw(canvas);
+ canvas.restore();
+
+ canvas.save();
+ canvas.rotate(mSeconds / 60.0f * 360.0f, x, y);
+
+ final Drawable secondHand = mSecondHand;
+ if (changed) {
+ w = secondHand.getIntrinsicWidth();
+ h = secondHand.getIntrinsicHeight();
+ secondHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
+ }
+ secondHand.draw(canvas);
+ canvas.restore();
+
+ if (scaled) {
+ canvas.restore();
+ }
+ }
+
+ private void onTimeChanged() {
+ mCalendar.setToNow();
+
+ int hour = mCalendar.hour;
+ int minute = mCalendar.minute;
+ int second = mCalendar.second;
+ // long millis = System.currentTimeMillis() % 1000;
+
+ mSeconds = second;//(float) ((second * 1000 + millis) / 166.666);
+ mMinutes = minute + second / 60.0f;
+ mHour = hour + mMinutes / 60.0f;
+ mChanged = true;
+
+ updateContentDescription(mCalendar);
+ }
+
+ private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) {
+ String tz = intent.getStringExtra("time-zone");
+ mCalendar = new Time(TimeZone.getTimeZone(tz).getID());
+ }
+ onTimeChanged();
+ invalidate();
+ }
+ };
+
+ private final Runnable mClockTick = new Runnable () {
+
+ @Override
+ public void run() {
+ onTimeChanged();
+ invalidate();
+ AnalogClock.this.postDelayed(mClockTick, 1000);
+ }
+ };
+
+ private void updateContentDescription(Time time) {
+ final int flags = DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR;
+ String contentDescription = DateUtils.formatDateTime(mContext,
+ time.toMillis(false), flags);
+ setContentDescription(contentDescription);
+ }
+}
+
diff --git a/src/com/android/deskclock/CircleTimerView.java b/src/com/android/deskclock/CircleTimerView.java
new file mode 100644
index 000000000..cb89d0d73
--- /dev/null
+++ b/src/com/android/deskclock/CircleTimerView.java
@@ -0,0 +1,243 @@
+package com.android.deskclock;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Typeface;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AttributeSet;
+import android.view.View;
+
+/**
+ * TODO: Insert description here. (generated by isaackatz)
+ */
+public class CircleTimerView extends View {
+
+
+ private int mRedColor;
+ private int mWhiteColor;
+ private long mIntervalTime = 0;
+ private long mIntervalStartTime = -1;
+ private long mMarkerTime = -1;
+ private long mCurrentIntervalTime = 0;
+ private long mAccumulatedTime = 0;
+ private boolean mPaused = false;
+ private static float mStrokeSize = 4;
+ private final Paint mPaint = new Paint();
+ private final RectF mArcRect = new RectF();
+ private Resources mResources;
+
+ // Class has 2 modes:
+ // Timer mode - counting down. in this mode the animation is counter-clockwise and stops at 0
+ // Stop watch mode - counting up - in this mode the animation is clockwise and will keep the
+ // animation until stopped.
+ private boolean mTimerMode = false; // default is stop watch view
+
+ Runnable mAnimationThread = new Runnable() {
+
+ @Override
+ public void run() {
+ mCurrentIntervalTime =
+ System.currentTimeMillis() - mIntervalStartTime + mAccumulatedTime;
+ invalidate();
+ postDelayed(mAnimationThread, 20);
+ }
+
+ };
+
+ public CircleTimerView(Context context) {
+ this(context, null);
+ }
+
+ public CircleTimerView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context);
+ }
+
+ public void setIntervalTime(long t) {
+ mIntervalTime = t;
+ }
+
+ public void setMarkerTime(long t) {
+ mMarkerTime = mCurrentIntervalTime;
+ }
+
+ public void reset() {
+ mIntervalStartTime = -1;
+ mMarkerTime = -1;
+ invalidate();
+ }
+ public void startIntervalAnimation() {
+ mIntervalStartTime = System.currentTimeMillis();
+ this.post(mAnimationThread);
+ mPaused = false;
+ }
+ public void stopIntervalAnimation() {
+ this.removeCallbacks(mAnimationThread);
+ mIntervalStartTime = -1;
+ mAccumulatedTime = 0;
+ }
+
+ public boolean isAnimating() {
+ return (mIntervalStartTime != -1);
+ }
+
+ public void pauseIntervalAnimation() {
+ this.removeCallbacks(mAnimationThread);
+ mAccumulatedTime += System.currentTimeMillis() - mIntervalStartTime;
+ mPaused = true;
+ }
+
+ public void setPassedTime(long time) {
+ mAccumulatedTime = time;
+ }
+
+
+
+ private void init(Context c) {
+
+ mResources = c.getResources();
+
+ mPaint.setAntiAlias(true);
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setStrokeWidth(mStrokeSize);
+
+ mWhiteColor = mResources.getColor(R.color.clock_white);
+ mRedColor = mResources.getColor(R.color.clock_red);
+ }
+
+ public void setTimerMode(boolean mode) {
+ mTimerMode = mode;
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ int xCenter = getWidth() / 2 + 1;
+ int yCenter = getHeight() / 2;
+
+ mPaint.setStrokeWidth(mStrokeSize);
+ float radius = Math.min(xCenter, yCenter) - mStrokeSize;
+
+ if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ xCenter = (int) (radius + mStrokeSize);
+ }
+
+ mPaint.setColor(mWhiteColor);
+ canvas.drawCircle (xCenter, yCenter, radius, mPaint);
+
+ mPaint.setColor(mRedColor);
+ if (mIntervalStartTime != -1) {
+ mArcRect.top = yCenter - radius;
+ mArcRect.bottom = yCenter + radius;
+ mArcRect.left = xCenter - radius;
+ mArcRect.right = xCenter + radius;
+ float percent = (float)mCurrentIntervalTime / (float)mIntervalTime;
+ // prevent timer from doing more than one full circle
+ percent = (percent > 1 && mTimerMode) ? 1 : percent;
+
+ if (mTimerMode){
+ canvas.drawArc (mArcRect, 270, - percent * 360 , false, mPaint);
+ } else {
+ canvas.drawArc (mArcRect, 270, + percent * 360 , false, mPaint);
+ }
+ mPaint.setStrokeWidth(mStrokeSize + 10);
+ if (mTimerMode){
+ canvas.drawArc (mArcRect, 265 - percent * 360, 10 , false, mPaint);
+ } else {
+ canvas.drawArc (mArcRect, 265 + percent * 360, 10 , false, mPaint);
+ }
+ }
+ if (mMarkerTime != -1) {
+ mPaint.setStrokeWidth(mStrokeSize + 30);
+ mPaint.setColor(mWhiteColor);
+ float angle = (float)(mMarkerTime % mIntervalTime) / (float)mIntervalTime * 360;
+ canvas.drawArc (mArcRect, 270 + angle, 1 , false, mPaint);
+ }
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ Parcelable superState = super.onSaveInstanceState();
+ SavedState ss = new SavedState(superState);
+
+ ss.mIntervalTime = this.mIntervalTime;
+ ss.mIntervalStartTime = this.mIntervalStartTime;
+ ss.mCurrentIntervalTime = this.mCurrentIntervalTime;
+ ss.mAccumulatedTime = this.mAccumulatedTime;
+ ss.mPaused = this.mPaused;
+ ss.mTimerMode = this.mTimerMode;
+
+ removeCallbacks(mAnimationThread);
+ return ss;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ if(!(state instanceof SavedState)) {
+ super.onRestoreInstanceState(state);
+ return;
+ }
+
+ SavedState ss = (SavedState)state;
+ super.onRestoreInstanceState(ss.getSuperState());
+
+ this.mIntervalTime = ss.mIntervalTime;
+ this.mIntervalStartTime = ss.mIntervalStartTime;
+ this.mCurrentIntervalTime = ss.mCurrentIntervalTime;
+ this.mAccumulatedTime = ss.mAccumulatedTime;
+ this.mPaused = ss.mPaused;
+ this.mTimerMode = ss.mTimerMode;
+ if (mIntervalStartTime != -1 && !mPaused) {
+ this.post(mAnimationThread);
+ }
+ }
+
+ static class SavedState extends BaseSavedState {
+ public boolean mPaused = false;
+ public long mIntervalTime = 0;
+ public long mIntervalStartTime = -1;
+ public long mCurrentIntervalTime = 0;
+ public long mAccumulatedTime = 0;
+ public boolean mTimerMode;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ this.mIntervalTime = in.readLong();
+ this.mIntervalStartTime = in.readLong();
+ this.mCurrentIntervalTime = in.readLong();
+ this.mAccumulatedTime = in.readLong();
+ this.mPaused = (in.readInt() == 1);
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeLong(this.mIntervalTime);
+ out.writeLong(this.mIntervalStartTime);
+ out.writeLong(this.mCurrentIntervalTime);
+ out.writeLong(this.mAccumulatedTime);
+ out.writeInt(this.mPaused?1:0);
+ }
+
+ //required field that makes Parcelables from a Parcel
+ public static final Parcelable.Creator<SavedState> CREATOR =
+ new Parcelable.Creator<SavedState>() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+}
diff --git a/src/com/android/deskclock/ClockFragment.java b/src/com/android/deskclock/ClockFragment.java
new file mode 100644
index 000000000..b11cd1f80
--- /dev/null
+++ b/src/com/android/deskclock/ClockFragment.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2012 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.android.deskclock;
+
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
+import android.widget.TextView;
+
+import java.util.Calendar;
+
+
+/**
+ * TODO: Insert description here. (generated by isaackatz)
+ */
+public class ClockFragment extends DeskClockFragment {
+
+ private static final String BUTTONS_HIDDEN_KEY = "buttons_hidden";
+
+ private final static String DATE_FORMAT = "EEEE, MMMM d";
+
+ View mButtons;
+ TextView mNextAlarm;
+ private TextView mDateDisplay;
+ boolean mButtonsHidden = false;
+ View mDigitalClock, mAnalogClock;
+
+ public ClockFragment() {
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle icicle) {
+ // Inflate the layout for this fragment
+ View v = inflater.inflate(R.layout.clock_fragment, container, false);
+ mButtons = v.findViewById(R.id.clock_buttons);
+ mNextAlarm = (TextView)v.findViewById(R.id.nextAlarm);
+ mDateDisplay = (TextView) v.findViewById(R.id.date);
+ mDigitalClock = v.findViewById(R.id.digital_clock);
+ mAnalogClock = v.findViewById(R.id.analog_clock);
+ if (icicle != null) {
+ mButtonsHidden = icicle.getBoolean(BUTTONS_HIDDEN_KEY, false);
+ }
+ refreshAlarm();
+ return v;
+ }
+
+ @Override
+ public void onResume () {
+ super.onResume();
+ refreshAlarm();
+ // updateDate(); // No date at this point
+ mButtons.setAlpha(mButtonsHidden ? 0 : 1);
+ setClockStyle();
+
+
+ }
+
+
+ @Override
+ public void onSaveInstanceState (Bundle outState) {
+ outState.putBoolean(BUTTONS_HIDDEN_KEY, mButtonsHidden);
+ super.onSaveInstanceState(outState);
+ }
+
+ private void setClockStyle() {
+ SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
+ String style = sharedPref.getString(SettingsActivity.KEY_CLOCK_STYLE, "analog");
+ if (style.equals("analog")) {
+ mDigitalClock.setVisibility(View.GONE);
+ mAnalogClock.setVisibility(View.VISIBLE);
+ } else if (style.equals("digital")) {
+ mDigitalClock.setVisibility(View.VISIBLE);
+ mAnalogClock.setVisibility(View.GONE);
+ }
+ }
+
+ private void refreshAlarm() {
+ if (mNextAlarm == null) return;
+
+ mNextAlarm.setVisibility(View.GONE);
+/* No next alarm at this point
+ String nextAlarm = Settings.System.getString(mContext.getContentResolver(),
+ Settings.System.NEXT_ALARM_FORMATTED);
+ if (!TextUtils.isEmpty(nextAlarm)) {
+ mNextAlarm.setText(getString(R.string.control_set_alarm_with_existing, nextAlarm));
+ mNextAlarm.setVisibility(View.VISIBLE);
+ } else {
+ mNextAlarm.setVisibility(View.INVISIBLE);
+ }*/
+ }
+
+ private void updateDate() {
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeInMillis(System.currentTimeMillis());
+
+ CharSequence newDate = DateFormat.format(DATE_FORMAT, cal);
+ mDateDisplay.setVisibility(View.VISIBLE);
+ mDateDisplay.setText(newDate);
+ }
+
+ public void showButtons(boolean show) {
+ if (mButtons == null) {
+ return;
+ }
+ if (show && mButtonsHidden) {
+ mButtons.startAnimation(
+ AnimationUtils.loadAnimation(mContext, R.anim.unhide));
+ mButtonsHidden = false;
+ } else if (!show && !mButtonsHidden) {
+ mButtons.startAnimation(
+ AnimationUtils.loadAnimation(mContext, R.anim.hide));
+ mButtonsHidden = true;
+ }
+ }
+}
diff --git a/src/com/android/deskclock/DeskClock.java b/src/com/android/deskclock/DeskClock.java
index 8ab39ae47..8414b2f13 100644
--- a/src/com/android/deskclock/DeskClock.java
+++ b/src/com/android/deskclock/DeskClock.java
@@ -16,39 +16,28 @@
package com.android.deskclock;
-import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
-
+import android.app.ActionBar;
+import android.app.ActionBar.Tab;
import android.app.Activity;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.app.UiModeManager;
-import android.content.BroadcastReceiver;
+import android.app.Fragment;
+import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Configuration;
-import android.os.BatteryManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.text.format.DateFormat;
-import android.util.DisplayMetrics;
+import android.support.v13.app.FragmentStatePagerAdapter;
+import android.support.v4.view.ViewPager;
import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.WindowManager;
import android.view.animation.AnimationUtils;
-import android.widget.TextView;
+import android.widget.PopupMenu;
+import android.widget.Toast;
+
+import com.android.deskclock.timer.TimerFragment;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Random;
+import java.util.ArrayList;
/**
* DeskClock clock view for desk docks.
@@ -59,26 +48,35 @@ public class DeskClock extends Activity {
private static final String LOG_TAG = "DeskClock";
// Alarm action for midnight (so we can update the date display).
- private static final String ACTION_MIDNIGHT = "com.android.deskclock.MIDNIGHT";
- private static final String KEY_DIMMED = "dimmed";
- private static final String KEY_SCREEN_SAVER = "screen_saver";
+ private static final String KEY_SELECTED_TAB = "selected_tab";
+ private static final String KEY_CLOCK_STATE = "clock_state";
+
+ private ActionBar mActionBar;
+ private Tab mTimerTab;
+ private Tab mClockTab;
+ private Tab mStopwatchTab;
- // This controls whether or not we will show a battery display when plugged
- // in.
- private static final boolean USE_BATTERY_DISPLAY = false;
+ ViewPager mViewPager;
+ TabsAdapter mTabsAdapter;
- // Intent to broadcast for dock settings.
- private static final String DOCK_SETTINGS_ACTION = "com.android.settings.DOCK_SETTINGS";
+ private static final int TIMER_TAB_INDEX = 0;
+ private static final int CLOCK_TAB_INDEX = 1;
+ private static final int STOPWATCH_TAB_INDEX = 2;
- // Delay before engaging the burn-in protection mode (green-on-black).
- private final long SCREEN_SAVER_TIMEOUT = 5 * 60 * 1000; // 5 min
+ private int mSelectedTab;
+ private final boolean mDimmed = false;
- // Repositioning delay in screen saver.
- public static final long SCREEN_SAVER_MOVE_DELAY = 60 * 1000; // 1 min
+ private int mClockState = CLOCK_NORMAL;
+ private static final int CLOCK_NORMAL = 0;
+ private static final int CLOCK_LIGHTS_OUT = 1;
+ private static final int CLOCK_DIMMED = 2;
- // Color to use for text & graphics in screen saver mode.
- private int SCREEN_SAVER_COLOR = 0xFF006688;
- private int SCREEN_SAVER_COLOR_DIM = 0xFF001634;
+
+
+ // Delay before hiding the action bar and buttons
+ private static final long LIGHTSOUT_TIMEOUT = 10 * 1000; // 10 seconds
+ // Delay before dimming the screen
+ private static final long DIM_TIMEOUT = 10 * 1000; // 10 seconds
// Opacity of black layer between clock display and wallpaper.
private final float DIM_BEHIND_AMOUNT_NORMAL = 0.4f;
@@ -86,498 +84,353 @@ public class DeskClock extends Activity {
private final int SCREEN_SAVER_TIMEOUT_MSG = 0x2000;
private final int SCREEN_SAVER_MOVE_MSG = 0x2001;
+ private final int DIM_TIMEOUT_MSG = 0x2002;
+ private final int LIGHTSOUT_TIMEOUT_MSG = 0x2003;
+ private final int BACK_TO_NORMAL_MSG = 0x2004;
- // State variables follow.
- private DigitalClock mTime;
- private TextView mDate;
-
- private TextView mNextAlarm = null;
- private TextView mBatteryDisplay;
-
- private boolean mDimmed = false;
- private boolean mScreenSaverMode = false;
-
- private String mDateFormat;
-
- private int mBatteryLevel = -1;
- private boolean mPluggedIn = false;
-
- private boolean mLaunchedFromDock = false;
-
- private Random mRNG;
- private PendingIntent mMidnightIntent;
- private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
+ private final Handler mHandy = new Handler() {
@Override
- public void onReceive(Context context, Intent intent) {
- final String action = intent.getAction();
- if (DEBUG) Log.d(LOG_TAG, "mIntentReceiver.onReceive: action=" + action + ", intent=" + intent);
- if (Intent.ACTION_DATE_CHANGED.equals(action) || ACTION_MIDNIGHT.equals(action)) {
- refreshDate();
- } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
- handleBatteryUpdate(
- intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0),
- intent.getIntExtra(BatteryManager.EXTRA_STATUS, BATTERY_STATUS_UNKNOWN),
- intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0));
- } else if (UiModeManager.ACTION_EXIT_DESK_MODE.equals(action)) {
- if (mLaunchedFromDock) {
- // moveTaskToBack(false);
- finish();
+ public void handleMessage(Message m) {
+ /* if (m.what == LIGHTSOUT_TIMEOUT_MSG) {
+ doLightsOut(true);
+ mClockState = CLOCK_LIGHTS_OUT;
+ // Only dim if clock fragment is visible
+ if (mViewPager.getCurrentItem() == CLOCK_TAB_INDEX) {
+ scheduleDim();
}
- mLaunchedFromDock = false;
- } else if (Intent.ACTION_DOCK_EVENT.equals(action)) {
- if (DEBUG) Log.d(LOG_TAG, "dock event extra "
- + intent.getExtras().getInt(Intent.EXTRA_DOCK_STATE));
- if (mLaunchedFromDock && intent.getExtras().getInt(Intent.EXTRA_DOCK_STATE,
- Intent.EXTRA_DOCK_STATE_UNDOCKED) == Intent.EXTRA_DOCK_STATE_UNDOCKED) {
- finish();
- mLaunchedFromDock = false;
+ } else if (m.what == DIM_TIMEOUT_MSG) {
+ mClockState = CLOCK_DIMMED;
+ doDim(true);
+ } else if (m.what == BACK_TO_NORMAL_MSG){
+ // ignore user interaction and do not go back to normal if a button was clicked
+ DeskClockFragment f =
+ (DeskClockFragment) mTabsAdapter.getFragment(mViewPager.getCurrentItem());
+ if (f != null && f.isButtonClicked()) {
+ return;
}
- }
- }
- };
- private final Handler mHandy = new Handler() {
- @Override
- public void handleMessage(Message m) {
- if (m.what == SCREEN_SAVER_TIMEOUT_MSG) {
- saveScreen();
- } else if (m.what == SCREEN_SAVER_MOVE_MSG) {
- moveScreenSaver();
- }
+ int oldState = mClockState;
+ mClockState = CLOCK_NORMAL;
+
+ switch (oldState) {
+ case CLOCK_LIGHTS_OUT:
+ doLightsOut(false);
+ break;
+ case CLOCK_DIMMED:
+ doLightsOut(false);
+ doDim(true);
+ break;
+ }
+ }*/
}
};
- private View mAlarmButton;
+ @Override
+ public void onNewIntent(Intent newIntent) {
+ super.onNewIntent(newIntent);
+ if (DEBUG) Log.d(LOG_TAG, "onNewIntent with intent: " + newIntent);
- private void moveScreenSaver() {
- moveScreenSaverTo(-1,-1);
+ // update our intent so that we can consult it to determine whether or
+ // not the most recent launch was via a dock event
+ setIntent(newIntent);
}
- private void moveScreenSaverTo(int x, int y) {
- if (!mScreenSaverMode) return;
- final View saver_view = findViewById(R.id.time_date);
- DisplayMetrics metrics = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(metrics);
+ private void initViews() {
- if (x < 0 || y < 0) {
- int myWidth = saver_view.getMeasuredWidth();
- int myHeight = saver_view.getMeasuredHeight();
- x = (int)(mRNG.nextFloat()*(metrics.widthPixels - myWidth));
- y = (int)(mRNG.nextFloat()*(metrics.heightPixels - myHeight));
+ if (mTabsAdapter == null) {
+ mViewPager = new ViewPager(this);
+ mViewPager.setId(R.id.desk_clock_pager);
+ mTabsAdapter = new TabsAdapter(this, mViewPager);
+ createTabs(mSelectedTab);
}
-
- if (DEBUG) Log.d(LOG_TAG, String.format("screen saver: %d: jumping to (%d,%d)",
- System.currentTimeMillis(), x, y));
-
- saver_view.setX(x);
- saver_view.setY(y);
-
- // Synchronize our jumping so that it happens exactly on the second.
- mHandy.sendEmptyMessageDelayed(SCREEN_SAVER_MOVE_MSG,
- SCREEN_SAVER_MOVE_DELAY +
- (1000 - (System.currentTimeMillis() % 1000)));
+ setContentView(mViewPager);
+ mActionBar.setSelectedNavigationItem(mSelectedTab);
}
- private void setWakeLock(boolean hold) {
- if (DEBUG) Log.d(LOG_TAG, (hold ? "hold" : " releas") + "ing wake lock");
- Window win = getWindow();
- WindowManager.LayoutParams winParams = win.getAttributes();
- winParams.flags |= (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
- | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
- | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
- | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
- if (hold)
- winParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
- else
- winParams.flags &= (~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
- win.setAttributes(winParams);
- }
-
- private void scheduleScreenSaver() {
- if (!getResources().getBoolean(R.bool.config_requiresScreenSaver)) {
- return;
+ private void createTabs(int selectedIndex) {
+ mActionBar = getActionBar();
+
+ mActionBar.setDisplayOptions(0);
+ if (mActionBar != null) {
+ mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+ mTimerTab = mActionBar.newTab();
+ mTimerTab.setIcon(R.drawable.timer_tab);
+ mTabsAdapter.addTab(mTimerTab, TimerFragment.class,TIMER_TAB_INDEX);
+ mClockTab = mActionBar.newTab();
+ mClockTab.setIcon(R.drawable.clock_tab);
+ mTabsAdapter.addTab(mClockTab, ClockFragment.class,CLOCK_TAB_INDEX);
+ mStopwatchTab = mActionBar.newTab();
+ mStopwatchTab.setIcon(R.drawable.stopwatch_tab);
+ mTabsAdapter.addTab(mStopwatchTab, StopwatchFragment.class,STOPWATCH_TAB_INDEX);
+ mActionBar.setSelectedNavigationItem(selectedIndex);
}
-
- // reschedule screen saver
- mHandy.removeMessages(SCREEN_SAVER_TIMEOUT_MSG);
- mHandy.sendMessageDelayed(
- Message.obtain(mHandy, SCREEN_SAVER_TIMEOUT_MSG),
- SCREEN_SAVER_TIMEOUT);
}
- /**
- * Restores the screen by quitting the screensaver. This should be called only when
- * {@link #mScreenSaverMode} is true.
- */
- private void restoreScreen() {
- if (!mScreenSaverMode) return;
- if (DEBUG) Log.d(LOG_TAG, "restoreScreen");
- mScreenSaverMode = false;
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ mSelectedTab = CLOCK_TAB_INDEX;
+ if (icicle != null) {
+ mSelectedTab = icicle.getInt(KEY_SELECTED_TAB, CLOCK_TAB_INDEX);
+ mClockState = icicle.getInt(KEY_CLOCK_STATE, CLOCK_NORMAL);
+ }
initViews();
- doDim(false); // restores previous dim mode
-
- scheduleScreenSaver();
- refreshAll();
}
- /**
- * Start the screen-saver mode. This is useful for OLED displays that burn in quickly.
- * This should only be called when {@link #mScreenSaverMode} is false;
- */
- private void saveScreen() {
- if (mScreenSaverMode) return;
- if (DEBUG) Log.d(LOG_TAG, "saveScreen");
-
- // quickly stash away the x/y of the current date
- final View oldTimeDate = findViewById(R.id.time_date);
- int oldLoc[] = new int[2];
- oldLoc[0] = oldLoc[1] = -1;
- if (oldTimeDate != null) { // monkeys tell us this is not always around
- oldTimeDate.getLocationOnScreen(oldLoc);
- }
-
- mScreenSaverMode = true;
- Window win = getWindow();
- WindowManager.LayoutParams winParams = win.getAttributes();
- winParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
- win.setAttributes(winParams);
-
- // give up any internal focus before we switch layouts
- final View focused = getCurrentFocus();
- if (focused != null) focused.clearFocus();
-
- setContentView(R.layout.desk_clock_saver);
-
- mTime = (DigitalClock) findViewById(R.id.time);
- mDate = (TextView) findViewById(R.id.date);
-
- final int color = mDimmed ? SCREEN_SAVER_COLOR_DIM : SCREEN_SAVER_COLOR;
-
- ((AndroidClockTextView)findViewById(R.id.timeDisplay)).setTextColor(color);
- ((AndroidClockTextView)findViewById(R.id.am_pm)).setTextColor(color);
- mDate.setTextColor(color);
-
- mTime.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
-
- mBatteryDisplay = null;
-
- refreshDate();
- refreshAlarm();
+ @Override
+ protected void onResume() {
+ super.onResume();
+ setClockState(false);
+ }
- if (oldLoc[0] >= 0) {
- moveScreenSaverTo(oldLoc[0], oldLoc[1]);
- } else {
- moveScreenSaver();
+ @Override
+ public void onPause() {
+ if (mTabsAdapter != null) {
+ mTabsAdapter.saveGlobalState();
}
+ super.onPause();
}
@Override
- public void onUserInteraction() {
- if (mScreenSaverMode)
- restoreScreen();
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY_SELECTED_TAB, mActionBar.getSelectedNavigationIndex());
+ outState.putInt(KEY_CLOCK_STATE, mClockState);
+ if (mTabsAdapter != null) {
+ mTabsAdapter.onSaveInstanceState(outState);
+ }
}
- // Adapted from KeyguardUpdateMonitor.java
- private void handleBatteryUpdate(int plugged, int status, int level) {
- final boolean pluggedIn = (plugged != 0);
- if (pluggedIn != mPluggedIn) {
- setWakeLock(pluggedIn);
- }
- if (pluggedIn != mPluggedIn || level != mBatteryLevel) {
- mBatteryLevel = level;
- mPluggedIn = pluggedIn;
- refreshBattery();
+ private void setClockState(boolean fade) {
+ doDim(fade);
+ switch(mClockState) {
+ case CLOCK_NORMAL:
+ doLightsOut(false);
+ break;
+ case CLOCK_LIGHTS_OUT:
+ case CLOCK_DIMMED:
+ doLightsOut(true);
+ break;
+ default:
+ break;
}
}
- private void refreshBattery() {
- // UX wants the battery level removed. This makes it not visible but
- // allows it to be easily turned back on if they change their mind.
- if (!USE_BATTERY_DISPLAY)
+ public void clockButtonsOnClick(View v) {
+ if (v == null)
return;
- if (mBatteryDisplay == null) return;
-
- if (mPluggedIn /* || mBatteryLevel < LOW_BATTERY_THRESHOLD */) {
- mBatteryDisplay.setCompoundDrawablesWithIntrinsicBounds(
- 0, 0, android.R.drawable.ic_lock_idle_charging, 0);
- mBatteryDisplay.setText(
- getString(R.string.battery_charging_level, mBatteryLevel));
- mBatteryDisplay.setVisibility(View.VISIBLE);
- } else {
- mBatteryDisplay.setVisibility(View.INVISIBLE);
+ switch (v.getId()) {
+ case R.id.alarms_button:
+ startActivity(new Intent(this, AlarmClock.class));
+ break;
+ case R.id.cities_button:
+ Toast.makeText(this, "Not implemented yet", 2).show();
+ break;
+ case R.id.menu_button:
+ showMenu(v);
+ break;
+ default:
+ break;
}
}
- private void refreshDate() {
- final Date now = new Date();
- if (DEBUG) Log.d(LOG_TAG, "refreshing date..." + now);
- mDate.setText(DateFormat.format(mDateFormat, now));
+ private void showMenu(View v) {
+ PopupMenu menu = new PopupMenu(this, v);
+ menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener () {
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_item_settings:
+ startActivity(new Intent(DeskClock.this, SettingsActivity.class));
+ return true;
+ case R.id.menu_item_help:
+ startActivity(new Intent(DeskClock.this, HelpActivity.class));
+ return true;
+ default:
+ break;
+ }
+ return true;
+ }
+ });
+ menu.inflate(R.menu.desk_clock_menu);
+ menu.show();
}
- private void refreshAlarm() {
- if (mNextAlarm == null) return;
+ private void scheduleLightsOut() {
+ mHandy.removeMessages(LIGHTSOUT_TIMEOUT_MSG);
+ mHandy.sendMessageDelayed(Message.obtain(mHandy, LIGHTSOUT_TIMEOUT_MSG), LIGHTSOUT_TIMEOUT);
+ }
- String nextAlarm = Settings.System.getString(getContentResolver(),
- Settings.System.NEXT_ALARM_FORMATTED);
- if (!TextUtils.isEmpty(nextAlarm)) {
- mNextAlarm.setText(getString(R.string.control_set_alarm_with_existing, nextAlarm));
- mNextAlarm.setVisibility(View.VISIBLE);
- } else if (mAlarmButton != null) {
- mNextAlarm.setVisibility(View.INVISIBLE);
+ public void doLightsOut(boolean state) {
+
+ if (state) {
+ mViewPager.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
+ mActionBar.hide();
} else {
- mNextAlarm.setText(R.string.control_set_alarm);
- mNextAlarm.setVisibility(View.VISIBLE);
+ mViewPager.setSystemUiVisibility(View.STATUS_BAR_VISIBLE);
+ mActionBar.show();
}
- }
- private void refreshAll() {
- refreshDate();
- refreshAlarm();
- refreshBattery();
+ // in clock view show/hide the buttons at the bottom
+ if (mViewPager.getCurrentItem() == CLOCK_TAB_INDEX) {
+ Fragment f = mTabsAdapter.getFragment(CLOCK_TAB_INDEX);
+ if (f != null) {
+ ((ClockFragment)f).showButtons(!state);
+ }
+ }
+ if (!state) {
+ // Make sure dim will not start before lights out
+ mHandy.removeMessages(DIM_TIMEOUT_MSG);
+ scheduleLightsOut();
+ }
}
private void doDim(boolean fade) {
- View tintView = findViewById(R.id.window_tint);
- if (tintView == null) return;
-
- mTime.setSystemUiVisibility(mDimmed ? View.SYSTEM_UI_FLAG_LOW_PROFILE
- : View.SYSTEM_UI_FLAG_VISIBLE);
-
- Window win = getWindow();
- WindowManager.LayoutParams winParams = win.getAttributes();
-
- winParams.flags |= (WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
- winParams.flags |= (WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
-
- // dim the wallpaper somewhat (how much is determined below)
- winParams.flags |= (WindowManager.LayoutParams.FLAG_DIM_BEHIND);
-
- if (mDimmed) {
- winParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
- winParams.dimAmount = DIM_BEHIND_AMOUNT_DIMMED;
- winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
-
- // show the window tint
- tintView.startAnimation(AnimationUtils.loadAnimation(this,
- fade ? R.anim.dim
- : R.anim.dim_instant));
+ if (mClockState == CLOCK_DIMMED) {
+ mViewPager.startAnimation(
+ AnimationUtils.loadAnimation(this, fade ? R.anim.dim : R.anim.dim_instant));
} else {
- winParams.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
- winParams.dimAmount = DIM_BEHIND_AMOUNT_NORMAL;
- winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
-
- // hide the window tint
- tintView.startAnimation(AnimationUtils.loadAnimation(this,
- fade ? R.anim.undim
- : R.anim.undim_instant));
+ mViewPager.startAnimation(
+ AnimationUtils.loadAnimation(this, fade ? R.anim.undim : R.anim.undim_instant));
}
-
- win.setAttributes(winParams);
}
- @Override
- public void onNewIntent(Intent newIntent) {
- super.onNewIntent(newIntent);
- if (DEBUG) Log.d(LOG_TAG, "onNewIntent with intent: " + newIntent);
-
- // update our intent so that we can consult it to determine whether or
- // not the most recent launch was via a dock event
- setIntent(newIntent);
+ private void scheduleDim() {
+ mHandy.removeMessages(DIM_TIMEOUT_MSG);
+ mHandy.sendMessageDelayed(Message.obtain(mHandy, DIM_TIMEOUT_MSG), DIM_TIMEOUT);
}
@Override
- public void onStart() {
- super.onStart();
-
- SCREEN_SAVER_COLOR = getResources().getColor(R.color.screen_saver_color);
- SCREEN_SAVER_COLOR_DIM = getResources().getColor(R.color.screen_saver_dim_color);
-
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_DATE_CHANGED);
- filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- filter.addAction(Intent.ACTION_DOCK_EVENT);
- filter.addAction(UiModeManager.ACTION_EXIT_DESK_MODE);
- filter.addAction(ACTION_MIDNIGHT);
- registerReceiver(mIntentReceiver, filter);
- }
-
- @Override
- public void onStop() {
- super.onStop();
-
- unregisterReceiver(mIntentReceiver);
+ public void onUserInteraction() {
+ super.onUserInteraction();
+ mHandy.removeMessages(BACK_TO_NORMAL_MSG);
+ mHandy.sendMessage(Message.obtain(mHandy, BACK_TO_NORMAL_MSG));
}
- @Override
- public void onResume() {
- super.onResume();
- if (DEBUG) Log.d(LOG_TAG, "onResume with intent: " + getIntent());
-
- // reload the date format in case the user has changed settings
- // recently
- mDateFormat = getString(R.string.full_wday_month_day_no_year);
-
- // Elaborate mechanism to find out when the day rolls over
- Calendar today = Calendar.getInstance();
- today.set(Calendar.HOUR_OF_DAY, 0);
- today.set(Calendar.MINUTE, 0);
- today.set(Calendar.SECOND, 0);
- today.add(Calendar.DATE, 1);
- long alarmTimeUTC = today.getTimeInMillis();
-
- mMidnightIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_MIDNIGHT), 0);
- AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
- am.setRepeating(AlarmManager.RTC, alarmTimeUTC, AlarmManager.INTERVAL_DAY, mMidnightIntent);
- if (DEBUG) Log.d(LOG_TAG, "set repeating midnight event at UTC: "
- + alarmTimeUTC + " ("
- + (alarmTimeUTC - System.currentTimeMillis())
- + " ms from now) repeating every "
- + AlarmManager.INTERVAL_DAY + " with intent: " + mMidnightIntent);
-
- // Adjust the display to reflect the currently chosen dim mode.
- doDim(false);
- if (!mScreenSaverMode) {
- restoreScreen(); // disable screen saver
- } else {
- // we have to set it to false because savescreen returns early if
- // it's true
- mScreenSaverMode = false;
- saveScreen();
- }
- refreshAll();
- setWakeLock(mPluggedIn);
- scheduleScreenSaver();
-
- final boolean launchedFromDock
- = getIntent().hasCategory(Intent.CATEGORY_DESK_DOCK);
- mLaunchedFromDock = launchedFromDock;
- }
+ /***
+ * Adapter for wrapping together the ActionBar's tab with the ViewPager
+ */
- @Override
- public void onPause() {
- if (DEBUG) Log.d(LOG_TAG, "onPause");
+ private class TabsAdapter extends FragmentStatePagerAdapter
+ implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
- // Turn off the screen saver and cancel any pending timeouts.
- // (But don't un-dim.)
- mHandy.removeMessages(SCREEN_SAVER_TIMEOUT_MSG);
+ private static final String KEY_TAB_POSITION = "tab_position";
- AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
- am.cancel(mMidnightIntent);
+ final class TabInfo {
+ private final Class<?> clss;
+ private final Bundle args;
- super.onPause();
- }
+ TabInfo(Class<?> _class, int position) {
+ clss = _class;
+ args = new Bundle();
+ args.putInt(KEY_TAB_POSITION, position);
+ }
- private void initViews() {
- // give up any internal focus before we switch layouts
- final View focused = getCurrentFocus();
- if (focused != null) focused.clearFocus();
+ public int getPosition() {
+ return args.getInt(KEY_TAB_POSITION, 0);
+ }
+ }
- setContentView(R.layout.desk_clock);
+ private final ArrayList<TabInfo> mTabs = new ArrayList <TabInfo>();
+ private final DeskClockFragment [] mFragments = new DeskClockFragment[3];
+ ActionBar mMainActionBar;
+ Context mContext;
+ ViewPager mPager;
+
+ public TabsAdapter(Activity activity, ViewPager pager) {
+ super(activity.getFragmentManager());
+ mContext = activity;
+ mMainActionBar = activity.getActionBar();
+ mPager = pager;
+ mPager.setAdapter(this);
+ mPager.setOnPageChangeListener(this);
+ }
- mTime = (DigitalClock) findViewById(R.id.time);
- mDate = (TextView) findViewById(R.id.date);
- mBatteryDisplay = (TextView) findViewById(R.id.battery);
+ @Override
+ public Fragment getItem(int position) {
+ TabInfo info = mTabs.get(position);
+ DeskClockFragment f = (DeskClockFragment) Fragment.instantiate(
+ mContext, info.clss.getName(), info.args);
+ f.setContext(mContext);
+ mFragments [position] = f;
+ return f;
+ }
- mTime.setSystemUiVisibility(View.STATUS_BAR_VISIBLE);
- mTime.getRootView().requestFocus();
+ public Fragment getFragment(int position) {
+ return mFragments [position];
+ }
- final View.OnClickListener alarmClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mDimmed) {
- mDimmed = false;
- doDim(true);
- }
- startActivity(new Intent(DeskClock.this, AlarmClock.class));
- }
- };
+ @Override
+ public int getCount() {
+ return mTabs.size();
+ }
- mNextAlarm = (TextView) findViewById(R.id.nextAlarm);
- mNextAlarm.setOnClickListener(alarmClickListener);
+ public void addTab(ActionBar.Tab tab, Class<?> clss, int position) {
+ TabInfo info = new TabInfo(clss, position);
+ tab.setTag(info);
+ tab.setTabListener(this);
+ mTabs.add(info);
+ mMainActionBar.addTab(tab);
+ notifyDataSetChanged();
+ }
- mAlarmButton = findViewById(R.id.alarm_button);
- View alarmControl = mAlarmButton != null ? mAlarmButton : findViewById(R.id.nextAlarm);
- alarmControl.setOnClickListener(alarmClickListener);
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ // Do nothing
+ }
- View touchView = findViewById(R.id.window_touch);
- touchView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // If the screen saver is on let onUserInteraction handle it
- if (!mScreenSaverMode) {
- mDimmed = !mDimmed;
- doDim(true);
- }
- }
- });
- touchView.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- saveScreen();
- return true;
- }
- });
- }
+ @Override
+ public void onPageSelected(int position) {
+ mMainActionBar.setSelectedNavigationItem(position);
+ onUserInteraction();
+ }
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (mScreenSaverMode) {
- moveScreenSaver();
- } else {
- initViews();
- doDim(false);
- refreshAll();
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ // Do nothing
}
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_item_dock_settings:
- startActivity(new Intent(DOCK_SETTINGS_ACTION));
- return true;
- default:
- return false;
+ @Override
+ public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
+ // Do nothing
}
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.desk_clock_menu, menu);
- return true;
- }
+ @Override
+ public void onTabSelected(Tab tab, FragmentTransaction ft) {
+ TabInfo info = (TabInfo)tab.getTag();
+ mPager.setCurrentItem(info.getPosition());
+ onUserInteraction();
+ }
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- // Only show the "Dock settings" menu item if the device supports it.
- boolean isDockSupported =
- (getPackageManager().resolveActivity(new Intent(DOCK_SETTINGS_ACTION), 0) != null);
- menu.findItem(R.id.menu_item_dock_settings).setVisible(isDockSupported);
- return super.onPrepareOptionsMenu(menu);
- }
+ @Override
+ public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
+ // Do nothing
- @Override
- protected void onCreate(Bundle icicle) {
- super.onCreate(icicle);
+ }
- mRNG = new Random();
- if (icicle != null) {
- mDimmed = icicle.getBoolean(KEY_DIMMED, false);
- mScreenSaverMode = icicle.getBoolean(KEY_SCREEN_SAVER, false);
+ /***
+ *
+ * @param outState - can be null since it may be called from Activity's onPause
+ */
+ protected void onSaveInstanceState(Bundle outState) {
+ for (int i = 0; i < mFragments.length; i++) {
+ if (mFragments[i] != null) {
+ mFragments[i].onSaveInstanceState(outState);
+ }
+ }
}
- initViews();
- }
+ protected void saveGlobalState() {
+ for (int i = 0; i < mFragments.length; i++) {
+ if (mFragments[i] != null) {
+ mFragments[i].saveGlobalState();
+ }
+ }
+ }
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- outState.putBoolean(KEY_DIMMED, mDimmed);
- outState.putBoolean(KEY_SCREEN_SAVER, mScreenSaverMode);
}
}
diff --git a/src/com/android/deskclock/DeskClockFragment.java b/src/com/android/deskclock/DeskClockFragment.java
new file mode 100644
index 000000000..aa48743b6
--- /dev/null
+++ b/src/com/android/deskclock/DeskClockFragment.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2012 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.android.deskclock;
+
+import android.app.Fragment;
+import android.content.Context;
+
+public class DeskClockFragment extends Fragment {
+ protected Context mContext;
+ private boolean mButtonClicked = false;
+
+ public void setContext(Context c) {
+ mContext = c;
+ }
+
+ protected void buttonClicked(boolean state) {
+ mButtonClicked = state;
+ }
+
+ public boolean isButtonClicked() {
+ boolean res = mButtonClicked;
+ mButtonClicked = false;
+ return res;
+ }
+
+ public void saveGlobalState() {
+
+ }
+
+}
diff --git a/src/com/android/deskclock/DeskClockFragmentOld.java b/src/com/android/deskclock/DeskClockFragmentOld.java
new file mode 100644
index 000000000..1d0ce3727
--- /dev/null
+++ b/src/com/android/deskclock/DeskClockFragmentOld.java
@@ -0,0 +1,560 @@
+/*
+ * Copyright (C) 2009 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.android.deskclock;
+
+import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
+
+import android.app.ActionBar;
+import android.app.ActionBar.Tab;
+import android.app.AlarmManager;
+import android.app.Fragment;
+import android.app.PendingIntent;
+import android.app.UiModeManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Configuration;
+import android.os.BatteryManager;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.Settings;
+import android.support.v4.view.ViewPager;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.view.animation.AnimationUtils;
+import android.widget.TextView;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Random;
+
+/**
+ * DeskClock clock view for desk docks.
+ */
+public class DeskClockFragmentOld extends Fragment {
+
+/* private static final boolean DEBUG = false;
+
+ private static final String LOG_TAG = "DeskClock";
+
+ // Alarm action for midnight (so we can update the date display).
+ private static final String ACTION_MIDNIGHT = "com.android.deskclock.MIDNIGHT";
+ private static final String KEY_DIMMED = "dimmed";
+ private static final String KEY_SCREEN_SAVER = "screen_saver";
+
+ // This controls whether or not we will show a battery display when plugged
+ // in.
+ private static final boolean USE_BATTERY_DISPLAY = false;
+
+ // Delay before engaging the burn-in protection mode (green-on-black).
+ private final long SCREEN_SAVER_TIMEOUT = 5 * 60 * 1000; // 5 min
+
+ // Repositioning delay in screen saver.
+ public static final long SCREEN_SAVER_MOVE_DELAY = 60 * 1000; // 1 min
+
+ // Delay before dimming the screen
+ private static final long DIM_TIMEOUT = 10 * 1000; // 10 seconds
+
+ // Color to use for text & graphics in screen saver mode.
+ private int SCREEN_SAVER_COLOR = 0xFF006688;
+ private int SCREEN_SAVER_COLOR_DIM = 0xFF001634;
+
+ // Opacity of black layer between clock display and wallpaper.
+ private final float DIM_BEHIND_AMOUNT_NORMAL = 0.4f;
+ private final float DIM_BEHIND_AMOUNT_DIMMED = 0.8f; // higher contrast when display dimmed
+
+ private final int SCREEN_SAVER_TIMEOUT_MSG = 0x2000;
+ private final int SCREEN_SAVER_MOVE_MSG = 0x2001;
+ private final int DIM_TIMEOUT_MSG = 0x2002;
+
+ // State variables follow.
+ private DigitalClock mTime;
+ private TextView mDate;
+
+ private TextView mNextAlarm = null;
+ private TextView mBatteryDisplay;
+
+ private boolean mDimmed = false;
+ private boolean mScreenSaverMode = false;
+
+ private String mDateFormat;
+
+ private int mBatteryLevel = -1;
+ private boolean mPluggedIn = false;
+
+ private boolean mLaunchedFromDock = false;
+
+ private Random mRNG;
+
+ private PendingIntent mMidnightIntent;
+
+ private final Handler mHandy = new Handler() {
+ @Override
+ public void handleMessage(Message m) {
+ if (m.what == SCREEN_SAVER_TIMEOUT_MSG) {
+ saveScreen();
+ } else if (m.what == SCREEN_SAVER_MOVE_MSG) {
+ moveScreenSaver();
+ } else if (m.what == DIM_TIMEOUT_MSG) {
+ mDimmed = !mDimmed;
+ doDim(true);
+ }
+ }
+ };
+
+ private View mAlarmButton;
+
+ private void moveScreenSaver() {
+ moveScreenSaverTo(-1,-1);
+ }
+ private void moveScreenSaverTo(int x, int y) {
+ if (!mScreenSaverMode) return;
+
+ final View saver_view = findViewById(R.id.time_date);
+
+ DisplayMetrics metrics = new DisplayMetrics();
+ getWindowManager().getDefaultDisplay().getMetrics(metrics);
+
+ if (x < 0 || y < 0) {
+ int myWidth = saver_view.getMeasuredWidth();
+ int myHeight = saver_view.getMeasuredHeight();
+ x = (int)(mRNG.nextFloat()*(metrics.widthPixels - myWidth));
+ y = (int)(mRNG.nextFloat()*(metrics.heightPixels - myHeight));
+ }
+
+ if (DEBUG) Log.d(LOG_TAG, String.format("screen saver: %d: jumping to (%d,%d)",
+ System.currentTimeMillis(), x, y));
+
+ saver_view.setX(x);
+ saver_view.setY(y);
+
+ // Synchronize our jumping so that it happens exactly on the second.
+ mHandy.sendEmptyMessageDelayed(SCREEN_SAVER_MOVE_MSG,
+ SCREEN_SAVER_MOVE_DELAY +
+ (1000 - (System.currentTimeMillis() % 1000)));
+ }
+
+ private void setWakeLock(boolean hold) {
+ if (DEBUG) Log.d(LOG_TAG, (hold ? "hold" : " releas") + "ing wake lock");
+ Window win = getWindow();
+ WindowManager.LayoutParams winParams = win.getAttributes();
+ winParams.flags |= (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
+ | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+ if (hold)
+ winParams.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ else
+ winParams.flags &= (~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ win.setAttributes(winParams);
+ }
+
+ private void scheduleScreenSaver() {
+ if (!getResources().getBoolean(R.bool.config_requiresScreenSaver)) {
+ return;
+ }
+
+ // reschedule screen saver
+ mHandy.removeMessages(SCREEN_SAVER_TIMEOUT_MSG);
+ mHandy.sendMessageDelayed(
+ Message.obtain(mHandy, SCREEN_SAVER_TIMEOUT_MSG),
+ SCREEN_SAVER_TIMEOUT);
+ }
+
+ private void scheduleDim() {
+ mHandy.removeMessages(DIM_TIMEOUT_MSG);
+ mHandy.sendMessageDelayed(
+ Message.obtain(mHandy, DIM_TIMEOUT_MSG),
+ DIM_TIMEOUT);
+ }
+
+ /**
+ * Restores the screen by quitting the screensaver. This should be called only when
+ * {@link #mScreenSaverMode} is true.
+ *//*
+ private void restoreScreen() {
+ if (!mScreenSaverMode) return;
+ if (DEBUG) Log.d(LOG_TAG, "restoreScreen");
+ mScreenSaverMode = false;
+
+ initViews();
+ // When quitting the screen saver, un-dim the screen.
+ mDimmed = false;
+ doDim(true);
+
+ scheduleScreenSaver();
+ refreshAll();
+ }
+
+ /**
+ * Start the screen-saver mode. This is useful for OLED displays that burn in quickly.
+ * This should only be called when {@link #mScreenSaverMode} is false;
+ *//*
+ private void saveScreen() {
+ if (mScreenSaverMode) return;
+ if (DEBUG) Log.d(LOG_TAG, "saveScreen");
+
+ // quickly stash away the x/y of the current date
+ final View oldTimeDate = findViewById(R.id.time_date);
+ int oldLoc[] = new int[2];
+ oldLoc[0] = oldLoc[1] = -1;
+ if (oldTimeDate != null) { // monkeys tell us this is not always around
+ oldTimeDate.getLocationOnScreen(oldLoc);
+ }
+
+ mScreenSaverMode = true;
+ Window win = getWindow();
+ WindowManager.LayoutParams winParams = win.getAttributes();
+ winParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
+ win.setAttributes(winParams);
+
+ // give up any internal focus before we switch layouts
+ final View focused = getCurrentFocus();
+ if (focused != null) focused.clearFocus();
+
+ setContentView(R.layout.desk_clock_saver);
+
+ mTime = (DigitalClock) findViewById(R.id.time);
+ mDate = (TextView) findViewById(R.id.date);
+
+ final int color = mDimmed ? SCREEN_SAVER_COLOR_DIM : SCREEN_SAVER_COLOR;
+
+ ((AndroidClockTextView)findViewById(R.id.timeDisplay)).setTextColor(color);
+ ((AndroidClockTextView)findViewById(R.id.am_pm)).setTextColor(color);
+ mDate.setTextColor(color);
+
+ mTime.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
+
+ mBatteryDisplay = null;
+
+ refreshDate();
+ refreshAlarm();
+
+ if (oldLoc[0] >= 0) {
+ moveScreenSaverTo(oldLoc[0], oldLoc[1]);
+ } else {
+ moveScreenSaver();
+ }
+ }
+
+ @Override
+ public void onUserInteraction() {
+ if (mScreenSaverMode) {
+ restoreScreen();
+ } else {
+ if (mDimmed) {
+ mDimmed = !mDimmed;
+ doDim(true);
+ }
+ scheduleDim();
+ }
+ }
+
+ // Adapted from KeyguardUpdateMonitor.java
+ private void handleBatteryUpdate(int plugged, int status, int level) {
+ final boolean pluggedIn = (plugged != 0);
+ if (pluggedIn != mPluggedIn) {
+ setWakeLock(pluggedIn);
+ }
+ if (pluggedIn != mPluggedIn || level != mBatteryLevel) {
+ mBatteryLevel = level;
+ mPluggedIn = pluggedIn;
+ refreshBattery();
+ }
+ }
+
+ private void refreshBattery() {
+ // UX wants the battery level removed. This makes it not visible but
+ // allows it to be easily turned back on if they change their mind.
+ if (!USE_BATTERY_DISPLAY)
+ return;
+ if (mBatteryDisplay == null) return;
+
+ if (mPluggedIn || mBatteryLevel < LOW_BATTERY_THRESHOLD) {
+ mBatteryDisplay.setCompoundDrawablesWithIntrinsicBounds(
+ 0, 0, android.R.drawable.ic_lock_idle_charging, 0);
+ mBatteryDisplay.setText(
+ getString(R.string.battery_charging_level, mBatteryLevel));
+ mBatteryDisplay.setVisibility(View.VISIBLE);
+ } else {
+ mBatteryDisplay.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ private void refreshDate() {
+ final Date now = new Date();
+ if (DEBUG) Log.d(LOG_TAG, "refreshing date..." + now);
+ mDate.setText(DateFormat.format(mDateFormat, now));
+ }
+
+ private void refreshAlarm() {
+ if (mNextAlarm == null) return;
+
+ String nextAlarm = Settings.System.getString(getContentResolver(),
+ Settings.System.NEXT_ALARM_FORMATTED);
+ if (!TextUtils.isEmpty(nextAlarm)) {
+ mNextAlarm.setText(getString(R.string.control_set_alarm_with_existing, nextAlarm));
+ mNextAlarm.setVisibility(View.VISIBLE);
+ } else if (mAlarmButton != null) {
+ mNextAlarm.setVisibility(View.INVISIBLE);
+ } else {
+ mNextAlarm.setText(R.string.control_set_alarm);
+ mNextAlarm.setVisibility(View.VISIBLE);
+ }
+ }
+
+ private void refreshAll() {
+ refreshDate();
+ refreshAlarm();
+ refreshBattery();
+ }
+
+ private void doDim(boolean fade) {
+ View tintView = findViewById(R.id.window_tint);
+ if (tintView == null) return;
+
+ mTime.setSystemUiVisibility(mDimmed ? View.SYSTEM_UI_FLAG_LOW_PROFILE
+ : View.SYSTEM_UI_FLAG_VISIBLE);
+
+ Window win = getWindow();
+ WindowManager.LayoutParams winParams = win.getAttributes();
+
+ // dim the wallpaper somewhat (how much is determined below)
+ winParams.flags |= (WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+
+ if (mDimmed) {
+ winParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
+ winParams.dimAmount = DIM_BEHIND_AMOUNT_DIMMED;
+ winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
+
+ // show the window tint
+ tintView.startAnimation(AnimationUtils.loadAnimation(this,
+ fade ? R.anim.dim
+ : R.anim.dim_instant));
+ mActionBar.hide();
+ } else {
+ winParams.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
+ winParams.dimAmount = DIM_BEHIND_AMOUNT_NORMAL;
+ winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
+
+ // hide the window tint
+ tintView.startAnimation(AnimationUtils.loadAnimation(this,
+ fade ? R.anim.undim
+ : R.anim.undim_instant));
+ mActionBar.show();
+ scheduleDim();
+ }
+ win.setAttributes(winParams);
+ }
+
+ @Override
+ public void onNewIntent(Intent newIntent) {
+ super.onNewIntent(newIntent);
+ if (DEBUG) Log.d(LOG_TAG, "onNewIntent with intent: " + newIntent);
+
+ // update our intent so that we can consult it to determine whether or
+ // not the most recent launch was via a dock event
+ setIntent(newIntent);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ SCREEN_SAVER_COLOR = getResources().getColor(R.color.screen_saver_color);
+ SCREEN_SAVER_COLOR_DIM = getResources().getColor(R.color.screen_saver_dim_color);
+
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_DATE_CHANGED);
+ filter.addAction(Intent.ACTION_BATTERY_CHANGED);
+ filter.addAction(Intent.ACTION_DOCK_EVENT);
+ filter.addAction(UiModeManager.ACTION_EXIT_DESK_MODE);
+ filter.addAction(ACTION_MIDNIGHT);
+ registerReceiver(mIntentReceiver, filter);
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+
+ unregisterReceiver(mIntentReceiver);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (DEBUG) Log.d(LOG_TAG, "onResume with intent: " + getIntent());
+
+ // reload the date format in case the user has changed settings
+ // recently
+ mDateFormat = getString(R.string.full_wday_month_day_no_year);
+
+ // Elaborate mechanism to find out when the day rolls over
+ Calendar today = Calendar.getInstance();
+ today.set(Calendar.HOUR_OF_DAY, 0);
+ today.set(Calendar.MINUTE, 0);
+ today.set(Calendar.SECOND, 0);
+ today.add(Calendar.DATE, 1);
+ long alarmTimeUTC = today.getTimeInMillis();
+
+ mMidnightIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_MIDNIGHT), 0);
+ AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
+ am.setRepeating(AlarmManager.RTC, alarmTimeUTC, AlarmManager.INTERVAL_DAY, mMidnightIntent);
+ if (DEBUG) Log.d(LOG_TAG, "set repeating midnight event at UTC: "
+ + alarmTimeUTC + " ("
+ + (alarmTimeUTC - System.currentTimeMillis())
+ + " ms from now) repeating every "
+ + AlarmManager.INTERVAL_DAY + " with intent: " + mMidnightIntent);
+
+ // Adjust the display to reflect the currently chosen dim mode.
+ doDim(false);
+ if (!mScreenSaverMode) {
+ restoreScreen(); // disable screen saver
+ } else {
+ // we have to set it to false because savescreen returns early if
+ // it's true
+ mScreenSaverMode = false;
+ saveScreen();
+ }
+ refreshAll();
+ setWakeLock(mPluggedIn);
+ scheduleDim();
+ scheduleScreenSaver();
+
+ final boolean launchedFromDock
+ = getIntent().hasCategory(Intent.CATEGORY_DESK_DOCK);
+ mLaunchedFromDock = launchedFromDock;
+ }
+
+ @Override
+ public void onPause() {
+ if (DEBUG) Log.d(LOG_TAG, "onPause");
+
+ // Turn off the screen saver and cancel any pending timeouts.
+ // (But don't un-dim.)
+ mHandy.removeMessages(SCREEN_SAVER_TIMEOUT_MSG);
+ mHandy.removeMessages(DIM_TIMEOUT_MSG);
+
+ AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
+ am.cancel(mMidnightIntent);
+
+ super.onPause();
+ }
+
+ private void initViews() {
+ // give up any internal focus before we switch layouts
+ final View focused = getCurrentFocus();
+ if (focused != null) focused.clearFocus();
+
+ setContentView(R.layout.desk_clock);
+
+ mTime = (DigitalClock) findViewById(R.id.time);
+ mDate = (TextView) findViewById(R.id.date);
+ mBatteryDisplay = (TextView) findViewById(R.id.battery);
+
+ mTime.setSystemUiVisibility(View.STATUS_BAR_VISIBLE);
+ mTime.getRootView().requestFocus();
+
+ final View.OnClickListener alarmClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mDimmed) {
+ mDimmed = false;
+ doDim(true);
+ }
+ startActivity(new Intent(DeskClockFragment.this, AlarmClock.class));
+ }
+ };
+
+ mNextAlarm = (TextView) findViewById(R.id.nextAlarm);
+ mNextAlarm.setOnClickListener(alarmClickListener);
+
+ mAlarmButton = findViewById(R.id.alarm_button);
+ View alarmControl = mAlarmButton != null ? mAlarmButton : findViewById(R.id.nextAlarm);
+ alarmControl.setOnClickListener(alarmClickListener);
+
+ View touchView = findViewById(R.id.window_touch);
+ // TODO: have UI decide if we need the long press - until decision this is removed
+ // since it is not in the wireframe
+ /* touchView.setOnLongClickListener(new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ saveScreen();
+ return true;
+ }
+ });
+ }*/
+/*
+ private void createTabs(int selectedIndex) {
+ mActionBar = getActionBar();
+
+ mActionBar.setDisplayOptions(0);
+ if (mActionBar != null) {
+ mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+ mTimerTab = mActionBar.newTab();
+ mTimerTab.setText(getString(R.string.menu_timer));
+ mTimerTab.setTabListener(this);
+ mActionBar.addTab(mTimerTab);
+ mClockTab = mActionBar.newTab();
+ mClockTab.setText(getString(R.string.menu_clock));
+ mClockTab.setTabListener(this);
+ mActionBar.addTab(mClockTab);
+ mStopwatchTab = mActionBar.newTab();
+ mStopwatchTab.setText(getString(R.string.menu_stopwatch));
+ mStopwatchTab.setTabListener(this);
+ mActionBar.addTab(mStopwatchTab);
+ mActionBar.setSelectedNavigationItem(selectedIndex);
+ }
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ if (mScreenSaverMode) {
+ moveScreenSaver();
+ } else {
+ initViews();
+ doDim(false);
+ refreshAll();
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ mRNG = new Random();
+ if (icicle != null) {
+ mDimmed = icicle.getBoolean(KEY_DIMMED, false);
+ mScreenSaverMode = icicle.getBoolean(KEY_SCREEN_SAVER, false);
+ }
+ initViews();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ outState.putBoolean(KEY_DIMMED, mDimmed);
+ outState.putBoolean(KEY_SCREEN_SAVER, mScreenSaverMode);
+ }*/
+}
diff --git a/src/com/android/deskclock/DigitalClock.java b/src/com/android/deskclock/DigitalClock.java
index 9c58872c7..f6ec35836 100644
--- a/src/com/android/deskclock/DigitalClock.java
+++ b/src/com/android/deskclock/DigitalClock.java
@@ -21,12 +21,14 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
+import android.graphics.Typeface;
import android.os.Handler;
import android.provider.Settings;
import android.text.format.DateFormat;
import android.util.AttributeSet;
import android.view.View;
-import android.widget.RelativeLayout;
+import android.widget.LinearLayout;
+import android.widget.TextView;
import java.text.DateFormatSymbols;
import java.util.Calendar;
@@ -34,17 +36,21 @@ import java.util.Calendar;
/**
* Displays the time
*/
-public class DigitalClock extends RelativeLayout {
+public class DigitalClock extends LinearLayout {
- private final static String M12 = "h:mm";
+ private final static String HOURS_24 = "kk";
+ private final static String HOURS = "hh";
+ private final static String MINUTES = ":mm";
private Calendar mCalendar;
- private String mFormat;
- private AndroidClockTextView mTimeDisplay;
+ private String mHoursFormat;
+ private TextView mTimeDisplayHours, mTimeDisplayMinutes;
private AmPm mAmPm;
private ContentObserver mFormatChangeObserver;
private boolean mLive = true;
private boolean mAttached;
+ private final Typeface mRobotoThin;
+
/* called by system on minute ticks */
private final Handler mHandler = new Handler();
@@ -65,11 +71,11 @@ public class DigitalClock extends RelativeLayout {
};
static class AmPm {
- private AndroidClockTextView mAmPm;
- private String mAmString, mPmString;
+ private final TextView mAmPm;
+ private final String mAmString, mPmString;
AmPm(View parent) {
- mAmPm = (AndroidClockTextView) parent.findViewById(R.id.am_pm);
+ mAmPm = (TextView) parent.findViewById(R.id.am_pm);
String[] ampm = new DateFormatSymbols().getAmPmStrings();
mAmString = ampm[0];
@@ -102,13 +108,16 @@ public class DigitalClock extends RelativeLayout {
public DigitalClock(Context context, AttributeSet attrs) {
super(context, attrs);
+ mRobotoThin = Typeface.createFromAsset(context.getAssets(),"fonts/Roboto-Thin.ttf");
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- mTimeDisplay = (AndroidClockTextView) findViewById(R.id.timeDisplay);
+ mTimeDisplayHours = (TextView)findViewById(R.id.timeDisplayHours);
+ mTimeDisplayMinutes = (TextView)findViewById(R.id.timeDisplayMinutes);
+ mTimeDisplayMinutes.setTypeface(mRobotoThin);
mAmPm = new AmPm(this);
mCalendar = Calendar.getInstance();
@@ -166,14 +175,16 @@ public class DigitalClock extends RelativeLayout {
mCalendar.setTimeInMillis(System.currentTimeMillis());
}
- CharSequence newTime = DateFormat.format(mFormat, mCalendar);
- mTimeDisplay.setText(newTime);
+ CharSequence newTime = DateFormat.format(mHoursFormat, mCalendar);
+ mTimeDisplayHours.setText(newTime);
+ newTime = DateFormat.format(MINUTES, mCalendar);
+ mTimeDisplayMinutes.setText(newTime);
mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);
}
private void setDateFormat() {
- mFormat = Alarms.get24HourMode(getContext()) ? Alarms.M24 : M12;
- mAmPm.setShowAmPm(mFormat == M12);
+ mHoursFormat = Alarms.get24HourMode(getContext()) ? HOURS_24 : HOURS;
+ mAmPm.setShowAmPm(!Alarms.get24HourMode(getContext()));
}
void setLive(boolean live) {
diff --git a/src/com/android/deskclock/HelpActivity.java b/src/com/android/deskclock/HelpActivity.java
new file mode 100644
index 000000000..11e9c9f97
--- /dev/null
+++ b/src/com/android/deskclock/HelpActivity.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2009 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.android.deskclock;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Settings for the Alarm Clock.
+ */
+public class HelpActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.help);
+ }
+}
diff --git a/src/com/android/deskclock/OldDigitalClock.java b/src/com/android/deskclock/OldDigitalClock.java
new file mode 100644
index 000000000..4249fc1f1
--- /dev/null
+++ b/src/com/android/deskclock/OldDigitalClock.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2008 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.android.deskclock;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.ContentObserver;
+import android.os.Handler;
+import android.provider.Settings;
+import android.text.format.DateFormat;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.RelativeLayout;
+
+import java.text.DateFormatSymbols;
+import java.util.Calendar;
+
+/**
+ * Displays the time
+ */
+public class OldDigitalClock extends RelativeLayout {
+
+ private final static String M12 = "h:mm";
+
+ private Calendar mCalendar;
+ private String mFormat;
+ private AndroidClockTextView mTimeDisplay;
+ private AmPm mAmPm;
+ private ContentObserver mFormatChangeObserver;
+ private boolean mLive = true;
+ private boolean mAttached;
+
+ /* called by system on minute ticks */
+ private final Handler mHandler = new Handler();
+ private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (mLive && intent.getAction().equals(
+ Intent.ACTION_TIMEZONE_CHANGED)) {
+ mCalendar = Calendar.getInstance();
+ }
+ // Post a runnable to avoid blocking the broadcast.
+ mHandler.post(new Runnable() {
+ public void run() {
+ updateTime();
+ }
+ });
+ }
+ };
+
+ static class AmPm {
+ private final AndroidClockTextView mAmPm;
+ private final String mAmString, mPmString;
+
+ AmPm(View parent) {
+ mAmPm = (AndroidClockTextView) parent.findViewById(R.id.am_pm);
+
+ String[] ampm = new DateFormatSymbols().getAmPmStrings();
+ mAmString = ampm[0];
+ mPmString = ampm[1];
+ }
+
+ void setShowAmPm(boolean show) {
+ mAmPm.setVisibility(show ? View.VISIBLE : View.INVISIBLE);
+ }
+
+ void setIsMorning(boolean isMorning) {
+ mAmPm.setText(isMorning ? mAmString : mPmString);
+ }
+ }
+
+ private class FormatChangeObserver extends ContentObserver {
+ public FormatChangeObserver() {
+ super(new Handler());
+ }
+ @Override
+ public void onChange(boolean selfChange) {
+ setDateFormat();
+ updateTime();
+ }
+ }
+
+ public OldDigitalClock(Context context) {
+ this(context, null);
+ }
+
+ public OldDigitalClock(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ mTimeDisplay = (AndroidClockTextView) findViewById(R.id.timeDisplay);
+ mAmPm = new AmPm(this);
+ mCalendar = Calendar.getInstance();
+
+ setDateFormat();
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+
+ if (Log.LOGV) Log.v("onAttachedToWindow " + this);
+
+ if (mAttached) return;
+ mAttached = true;
+
+ if (mLive) {
+ /* monitor time ticks, time changed, timezone */
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_TIME_TICK);
+ filter.addAction(Intent.ACTION_TIME_CHANGED);
+ filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
+ getContext().registerReceiver(mIntentReceiver, filter);
+ }
+
+ /* monitor 12/24-hour display preference */
+ mFormatChangeObserver = new FormatChangeObserver();
+ getContext().getContentResolver().registerContentObserver(
+ Settings.System.CONTENT_URI, true, mFormatChangeObserver);
+
+ updateTime();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+
+ if (!mAttached) return;
+ mAttached = false;
+
+ if (mLive) {
+ getContext().unregisterReceiver(mIntentReceiver);
+ }
+ getContext().getContentResolver().unregisterContentObserver(
+ mFormatChangeObserver);
+ }
+
+
+ void updateTime(Calendar c) {
+ mCalendar = c;
+ updateTime();
+ }
+
+ private void updateTime() {
+ if (mLive) {
+ mCalendar.setTimeInMillis(System.currentTimeMillis());
+ }
+
+ CharSequence newTime = DateFormat.format(mFormat, mCalendar);
+ mTimeDisplay.setText(newTime);
+ mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);
+ }
+
+ private void setDateFormat() {
+ mFormat = Alarms.get24HourMode(getContext()) ? Alarms.M24 : M12;
+ mAmPm.setShowAmPm(mFormat == M12);
+ }
+
+ void setLive(boolean live) {
+ mLive = live;
+ }
+}
diff --git a/src/com/android/deskclock/Screensaver.java b/src/com/android/deskclock/Screensaver.java
index ac7f455b0..e9aef7d39 100644
--- a/src/com/android/deskclock/Screensaver.java
+++ b/src/com/android/deskclock/Screensaver.java
@@ -30,7 +30,7 @@ import android.graphics.PorterDuff;
import android.os.BatteryManager;
import android.os.Handler;
import android.provider.Settings;
-import android.service.dreams.Dream;
+//import android.service.dreams.Dream;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
@@ -39,7 +39,7 @@ import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.widget.TextView;
-public class Screensaver extends Dream {
+public class Screensaver { //extends Dream {
static final boolean DEBUG = false;
static final String TAG = "DeskClock/Screensaver";
@@ -62,7 +62,7 @@ public class Screensaver extends Dream {
}
};
- private Handler mHandler = new Handler();
+ private final Handler mHandler = new Handler();
private boolean mPlugged = false;
private final BroadcastReceiver mPowerIntentReceiver = new BroadcastReceiver() {
@@ -76,15 +76,15 @@ public class Screensaver extends Dream {
if (DEBUG) Log.v(TAG, plugged ? "plugged in" : "unplugged");
mPlugged = plugged;
if (mPlugged) {
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ // getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else {
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ // getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
}
}
};
-
+/*
private final Runnable mMoveSaverRunnable = new Runnable() {
@Override
public void run() {
@@ -169,11 +169,11 @@ public class Screensaver extends Dream {
mHandler.postDelayed(this, delay);
}
};
-
+*/
public Screensaver() {
if (DEBUG) Log.d(TAG, "Screensaver allocated");
}
-
+/*
@Override
public void onCreate() {
if (DEBUG) Log.d(TAG, "Screensaver created");
@@ -182,9 +182,9 @@ public class Screensaver extends Dream {
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
- // Hack: we want this to be *mostly* non-interactive, but still allow the user to click
- // on the alarms button. The Dream class doesn't make this super easy right now, so
- // we want to skip over Dream.dispatchTouchEvent() (which would finish() the saver
+ // Hack: we want this to be *mostly* non-interactive, but still allow the user to click
+ // on the alarms button. The Dream class doesn't make this super easy right now, so
+ // we want to skip over Dream.dispatchTouchEvent() (which would finish() the saver
// immediately in non-interactive mode) and handle touches ourself.
return getWindow().superDispatchTouchEvent(event);
}
@@ -296,5 +296,5 @@ public class Screensaver extends Dream {
}
}
-
+*/
}
diff --git a/src/com/android/deskclock/SettingsActivity.java b/src/com/android/deskclock/SettingsActivity.java
index 795005e22..bb62fc320 100644
--- a/src/com/android/deskclock/SettingsActivity.java
+++ b/src/com/android/deskclock/SettingsActivity.java
@@ -16,18 +16,17 @@
package com.android.deskclock;
-import android.content.SharedPreferences;
+import android.content.Intent;
import android.media.AudioManager;
-import android.media.RingtoneManager;
-import android.net.Uri;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
-import android.preference.RingtonePreference;
import android.provider.Settings;
+import android.view.Menu;
+import android.view.MenuItem;
/**
* Settings for the Alarm Clock.
@@ -38,30 +37,35 @@ public class SettingsActivity extends PreferenceActivity
private static final int ALARM_STREAM_TYPE_BIT =
1 << AudioManager.STREAM_ALARM;
- private static final String KEY_ALARM_IN_SILENT_MODE =
+ static final String KEY_ALARM_IN_SILENT_MODE =
"alarm_in_silent_mode";
static final String KEY_ALARM_SNOOZE =
"snooze_duration";
static final String KEY_VOLUME_BEHAVIOR =
"volume_button_setting";
- static final String KEY_DEFAULT_RINGTONE =
- "default_ringtone";
static final String KEY_AUTO_SILENCE =
"auto_silence";
-
+ static final String KEY_CLOCK_STYLE =
+ "clock_style";
+ static final String KEY_HOME_TZ =
+ "home_time_zone";
+ static final String KEY_AUTO_HOME_CLOCK =
+ "automatic_home_clock";
+ static final String KEY_VOLUME_BUTTONS =
+ "volume_button_setting";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
- final AlarmPreference ringtone =
+ /* final AlarmPreference ringtone =
(AlarmPreference) findPreference(KEY_DEFAULT_RINGTONE);
Uri alert = RingtoneManager.getActualDefaultRingtoneUri(this,
RingtoneManager.TYPE_ALARM);
if (alert != null) {
ringtone.setAlert(alert);
}
- ringtone.setChangeDefault();
+ ringtone.setChangeDefault();*/
}
@Override
@@ -71,6 +75,25 @@ public class SettingsActivity extends PreferenceActivity
}
@Override
+ public boolean onOptionsItemSelected (MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_item_help:
+ startActivity(new Intent(this, HelpActivity.class));
+ return true;
+ default:
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+
+ @Override
+ public boolean onCreateOptionsMenu (Menu menu) {
+ getMenuInflater().inflate(R.menu.settings_menu, menu);
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
if (KEY_ALARM_IN_SILENT_MODE.equals(preference.getKey())) {
@@ -95,15 +118,28 @@ public class SettingsActivity extends PreferenceActivity
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
+ @Override
public boolean onPreferenceChange(Preference pref, Object newValue) {
- if (KEY_ALARM_SNOOZE.equals(pref.getKey())) {
+ if (KEY_AUTO_SILENCE.equals(pref.getKey())) {
+ final ListPreference listPref = (ListPreference) pref;
+ String delay = (String) newValue;
+ updateAutoSnoozeSummary(listPref, delay);
+ } else if (KEY_CLOCK_STYLE.equals(pref.getKey())) {
final ListPreference listPref = (ListPreference) pref;
final int idx = listPref.findIndexOfValue((String) newValue);
listPref.setSummary(listPref.getEntries()[idx]);
- } else if (KEY_AUTO_SILENCE.equals(pref.getKey())) {
+ } else if (KEY_HOME_TZ.equals(pref.getKey())) {
final ListPreference listPref = (ListPreference) pref;
- String delay = (String) newValue;
- updateAutoSnoozeSummary(listPref, delay);
+ final int idx = listPref.findIndexOfValue((String) newValue);
+ listPref.setSummary(listPref.getEntries()[idx]);
+ } else if (KEY_AUTO_HOME_CLOCK.equals(pref.getKey())) {
+ boolean state =((CheckBoxPreference) pref).isChecked();
+ Preference homeTimeZone = findPreference(KEY_HOME_TZ);
+ homeTimeZone.setEnabled(!state);
+ } else if (KEY_VOLUME_BUTTONS.equals(pref.getKey())) {
+ final ListPreference listPref = (ListPreference) pref;
+ final int idx = listPref.findIndexOfValue((String) newValue);
+ listPref.setSummary(listPref.getEntries()[idx]);
}
return true;
}
@@ -118,24 +154,34 @@ public class SettingsActivity extends PreferenceActivity
}
}
-
private void refresh() {
- final CheckBoxPreference alarmInSilentModePref =
- (CheckBoxPreference) findPreference(KEY_ALARM_IN_SILENT_MODE);
- final int silentModeStreams =
- Settings.System.getInt(getContentResolver(),
- Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
- alarmInSilentModePref.setChecked(
- (silentModeStreams & ALARM_STREAM_TYPE_BIT) == 0);
-
- ListPreference listPref =
- (ListPreference) findPreference(KEY_ALARM_SNOOZE);
+ ListPreference listPref = (ListPreference) findPreference(KEY_AUTO_SILENCE);
+ String delay = listPref.getValue();
+ updateAutoSnoozeSummary(listPref, delay);
+ listPref.setOnPreferenceChangeListener(this);
+
+ listPref = (ListPreference) findPreference(KEY_CLOCK_STYLE);
listPref.setSummary(listPref.getEntry());
listPref.setOnPreferenceChangeListener(this);
- listPref = (ListPreference) findPreference(KEY_AUTO_SILENCE);
- String delay = listPref.getValue();
- updateAutoSnoozeSummary(listPref, delay);
+ listPref = (ListPreference) findPreference(KEY_HOME_TZ);
+ listPref.setSummary(listPref.getEntry());
listPref.setOnPreferenceChangeListener(this);
+
+ Preference pref = findPreference(KEY_AUTO_HOME_CLOCK);
+ boolean state =((CheckBoxPreference) pref).isChecked();
+ pref.setOnPreferenceChangeListener(this);
+
+ listPref = (ListPreference)findPreference(KEY_HOME_TZ);
+ listPref.setEnabled(state);
+ listPref.setSummary(listPref.getEntry());
+
+ listPref = (ListPreference) findPreference(KEY_VOLUME_BUTTONS);
+ listPref.setSummary(listPref.getEntry());
+ listPref.setOnPreferenceChangeListener(this);
+
+ SnoozeLengthDialog snoozePref = (SnoozeLengthDialog) findPreference(KEY_ALARM_SNOOZE);
+ snoozePref.setSummary();
}
+
}
diff --git a/src/com/android/deskclock/SnoozeLengthDialog.java b/src/com/android/deskclock/SnoozeLengthDialog.java
new file mode 100644
index 000000000..8fd564f04
--- /dev/null
+++ b/src/com/android/deskclock/SnoozeLengthDialog.java
@@ -0,0 +1,105 @@
+package com.android.deskclock;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.NumberPicker;
+import android.widget.TextView;
+
+/**
+ * A dialog preference that shows a number picker for selecting snooze length
+ */
+public class SnoozeLengthDialog extends DialogPreference {
+ private NumberPicker mNumberPickerView;
+ private TextView mNumberPickerMinutesView;
+ private final Context mContext;
+ private int mSnoozeMinutes;
+
+ private static final String DEFAULT_SNOOZE_TIME = "10";
+
+
+ public SnoozeLengthDialog(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mContext = context;
+ setDialogLayoutResource(R.layout.snooze_length_picker);
+ setTitle(R.string.snooze_duration_title);
+ }
+
+ @Override
+ protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+ super.onPrepareDialogBuilder(builder);
+ builder.setTitle(getContext().getString(R.string.snooze_duration_title))
+ .setCancelable(true);
+ }
+
+ @Override
+ protected void onBindDialogView(View view) {
+ super.onBindDialogView(view);
+ mNumberPickerMinutesView = (TextView) view.findViewById(R.id.title);
+ mNumberPickerView = (NumberPicker) view.findViewById(R.id.minutes_picker);
+ mNumberPickerView.setMinValue(1);
+ mNumberPickerView.setMaxValue(30);
+ mNumberPickerView.setValue(mSnoozeMinutes);
+ updateDays();
+ mNumberPickerView.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
+ @Override
+ public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
+ updateDays();
+ }
+ });
+ }
+
+ @Override
+ protected void onSetInitialValue (boolean restorePersistedValue, Object defaultValue) {
+ String val;
+ if (restorePersistedValue) {
+ val = getPersistedString(DEFAULT_SNOOZE_TIME);
+ if (val != null) {
+ mSnoozeMinutes = Integer.parseInt(val);
+ }
+ } else {
+ val = (String) defaultValue;
+ if (val != null) {
+ mSnoozeMinutes = Integer.parseInt(val);
+ }
+ persistString(val);
+ }
+ }
+
+ @Override
+ protected Object onGetDefaultValue(TypedArray a, int index) {
+ return a.getString(index);
+ }
+
+ private void updateDays() {
+ mNumberPickerMinutesView.setText(String.format(mContext.getResources()
+ .getQuantityText(R.plurals.snooze_picker_label, mNumberPickerView.getValue())
+ .toString()));
+ }
+ @Override
+ protected void onDialogClosed(boolean positiveResult) {
+ if (positiveResult) {
+ mNumberPickerView.clearFocus();
+ mSnoozeMinutes = mNumberPickerView.getValue();
+ persistString(Integer.toString(mSnoozeMinutes));
+ setSummary();
+ }
+ }
+
+ public void setSummary() {
+ setSummary(String.format(mContext.getResources()
+ .getQuantityText(R.plurals.snooze_duration, mSnoozeMinutes).toString(),
+ mSnoozeMinutes));
+ }
+
+ public int getCurrentValue() {
+ return mSnoozeMinutes;
+ }
+}
+
+
+
diff --git a/src/com/android/deskclock/StopwatchFragment.java b/src/com/android/deskclock/StopwatchFragment.java
new file mode 100644
index 000000000..42b9859cb
--- /dev/null
+++ b/src/com/android/deskclock/StopwatchFragment.java
@@ -0,0 +1,470 @@
+package com.android.deskclock;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.android.deskclock.timer.TimerView;
+
+import java.util.ArrayList;
+
+
+/**
+ * TODO: Insert description here. (generated by isaackatz)
+ */
+public class StopwatchFragment extends DeskClockFragment {
+
+ // Stopwatch states
+ private static final int STOPWATCH_RESET = 0;
+ private static final int STOPWATCH_RUNNING = 1;
+ private static final int STOPWATCH_STOPPED = 2;
+
+ private static final int MAX_LAPS = 99;
+
+ int mState = STOPWATCH_RESET;
+
+
+ // Stopwatch views that are accessed by the activity
+ Button mLeftButton, mRightButton;
+ CircleTimerView mTime;
+ TimerView mTimeText;
+ View mLapsTitle;
+ ListView mLapsList;
+ Button mShareButton;
+ View mButtonSeperator;
+
+ // Used for calculating the time from the start taking into account the pause times
+ long mStartTime = 0;
+ long mAccumulatedTime = 0;
+
+ // Lap information
+ class Lap {
+ Lap () {
+ mLapTime = 0;
+ mTotalTime = 0;
+ }
+
+ Lap (long time, long total) {
+ mLapTime = time;
+ mTotalTime = total;
+ }
+ public long mLapTime;
+ public long mTotalTime;
+ }
+
+ // Adapter for the ListView that shows the lap times.
+ class LapsListAdapter extends BaseAdapter {
+
+ Context mContext;
+ ArrayList<Lap> mLaps = new ArrayList<Lap>();
+ private final LayoutInflater mInflater;
+
+ public LapsListAdapter(Context context) {
+ mContext = context;
+ mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (mLaps.size() == 0 || position >= mLaps.size()) {
+ return null;
+ }
+ View lapInfo;
+ if (convertView != null) {
+ lapInfo = convertView;
+ } else {
+ lapInfo = mInflater.inflate(R.layout.lap_view, parent, false);
+ }
+ TextView count = (TextView)lapInfo.findViewById(R.id.lap_number);
+ TextView lapTime = (TextView)lapInfo.findViewById(R.id.lap_time);
+ TextView toalTime = (TextView)lapInfo.findViewById(R.id.lap_total);
+ lapTime.setText(getTimeText(mLaps.get(position).mLapTime));
+ toalTime.setText(getTimeText(mLaps.get(position).mTotalTime));
+ count.setText(getString(R.string.sw_current_lap_number, mLaps.size() - position));
+ return lapInfo;
+
+ }
+
+ @Override
+ public int getCount() {
+ return mLaps.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ if (mLaps.size() == 0 || position >= mLaps.size()) {
+ return null;
+ }
+ return mLaps.get(position);
+ }
+
+ public void addLap(Lap l) {
+ mLaps.add(0, l);
+ notifyDataSetChanged();
+ }
+
+ public void clearLaps() {
+ mLaps.clear();
+ notifyDataSetChanged();
+ }
+
+ // Helper function used to get the lap data to be stored in the activitys's bundle
+ public long [] getLapTimes() {
+ int size = mLaps.size();
+ if (size == 0) {
+ return null;
+ }
+ long [] laps = new long[size];
+ for (int i = 0; i < size; i ++) {
+ laps[i] = mLaps.get(i).mLapTime;
+ }
+ return laps;
+ }
+
+ // Helper function to restore adapter's data from the activity's bundle
+ public void setLapTimes(long [] laps) {
+ if (laps == null || laps.length == 0) {
+ return;
+ }
+
+ int size = laps.length;
+ mLaps.clear();
+ for (int i = 0; i < size; i ++) {
+ mLaps.add(new Lap (laps[i], 0));
+ }
+ long totalTime = 0;
+ for (int i = size -1; i >= 0; i --) {
+ totalTime += laps[i];
+ mLaps.get(i).mTotalTime = totalTime;
+ }
+ notifyDataSetChanged();
+ }
+ }
+
+ // Keys for data stored in the activity's bundle
+ private static final String START_TIME_KEY = "start_time";
+ private static final String ACCUM_TIME_KEY = "accum_time";
+ private static final String STATE_KEY = "state";
+ private static final String LAPS_KEY = "laps";
+
+ LapsListAdapter mLapsAdapter;
+
+ public StopwatchFragment() {
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View v = inflater.inflate(R.layout.stopwatch_fragment, container, false);
+ mLeftButton = (Button)v.findViewById(R.id.stopwatch_left_button);
+ mLeftButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ buttonClicked(true);
+ switch (mState) {
+ case STOPWATCH_RUNNING:
+ // Save lap time
+ addLapTime(System.currentTimeMillis()/10);
+ showLaps();
+ setButtons(STOPWATCH_RUNNING);
+ break;
+ case STOPWATCH_STOPPED:
+ // do reset
+ mAccumulatedTime = 0;
+ mLapsAdapter.clearLaps();
+ showLaps();
+ mTime.stopIntervalAnimation();
+ mTime.reset();
+ mTimeText.setTime(mAccumulatedTime);
+ mTimeText.blinkTimeStr(false);
+ setButtons(STOPWATCH_RESET);
+ mState = STOPWATCH_RESET;
+ break;
+ default:
+ Log.wtf("Illegal state " + mState
+ + " while pressing the left stopwatch button");
+ break;
+ }
+ }
+ });
+
+
+ mRightButton = (Button)v.findViewById(R.id.stopwatch_right_button);
+ mRightButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ buttonClicked(true);
+ switch (mState) {
+ case STOPWATCH_RUNNING:
+ // do stop
+ stopUpdateThread();
+ mTime.pauseIntervalAnimation();
+ long curTime = System.currentTimeMillis()/10;
+ mAccumulatedTime += (curTime - mStartTime);
+ mTimeText.setTime(mAccumulatedTime);
+ mTimeText.blinkTimeStr(true);
+ updateCurrentLap(curTime, mAccumulatedTime);
+ setButtons(STOPWATCH_STOPPED);
+ mState = STOPWATCH_STOPPED;
+ break;
+ case STOPWATCH_RESET:
+ case STOPWATCH_STOPPED:
+ // do start
+ mStartTime = System.currentTimeMillis()/10;
+ startUpdateThread();
+ mTimeText.blinkTimeStr(false);
+ if (mTime.isAnimating()) {
+ mTime.startIntervalAnimation();
+ }
+ setButtons(STOPWATCH_RUNNING);
+ mState = STOPWATCH_RUNNING;
+ break;
+ default:
+ Log.wtf("Illegal state " + mState
+ + " while pressing the right stopwatch button");
+ break;
+ }
+ }
+ });
+ mShareButton = (Button)v.findViewById(R.id.stopwatch_share_button);
+ mButtonSeperator = v.findViewById(R.id.stopwatch_button_seperator);
+
+ mShareButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(android.content.Intent.ACTION_SEND);
+ intent.setType("text/plain");
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+ // Add data to the intent, the receiving app will decide what to
+ // do with it.
+ intent.putExtra(Intent.EXTRA_SUBJECT, mContext.getResources().getString(R.string.sw_share_title));
+ intent.putExtra(Intent.EXTRA_TEXT, buildShareResults());
+ startActivity(Intent.createChooser(intent, null));
+ }
+ });
+
+ mTime = (CircleTimerView)v.findViewById(R.id.stopwatch_time);
+ mTimeText = (TimerView)v.findViewById(R.id.stopwatch_time_text);
+ mLapsTitle = v.findViewById(R.id.laps_title);
+ mLapsList = (ListView)v.findViewById(R.id.laps_list);
+ mLapsList.setDividerHeight(0);
+ mLapsAdapter = new LapsListAdapter(getActivity());
+ if (mLapsList != null) {
+ mLapsList.setAdapter(mLapsAdapter);
+ }
+
+ if (savedInstanceState != null) {
+ mState = savedInstanceState.getInt(STATE_KEY, STOPWATCH_RESET);
+ mStartTime = savedInstanceState.getLong(START_TIME_KEY, 0);
+ mAccumulatedTime = savedInstanceState.getLong(ACCUM_TIME_KEY, 0);
+ mLapsAdapter.setLapTimes(savedInstanceState.getLongArray(LAPS_KEY));
+ }
+ return v;
+ }
+
+ @Override
+ public void onResume() {
+ setButtons(mState);
+ mTimeText.setTime(mAccumulatedTime);
+ if (mState == STOPWATCH_RUNNING) {
+ startUpdateThread();
+ }
+ showLaps();
+ super.onResume();
+ }
+
+ @Override
+ public void onPause() {
+ if (mState == STOPWATCH_RUNNING) {
+ stopUpdateThread();
+ }
+ super.onPause();
+ }
+
+ @Override
+ public void onSaveInstanceState (Bundle outState) {
+ outState.putInt(STATE_KEY, mState);
+ outState.putLong(START_TIME_KEY, mStartTime);
+ outState.putLong(ACCUM_TIME_KEY, mAccumulatedTime);
+ if (mLapsAdapter != null) {
+ long [] laps = mLapsAdapter.getLapTimes();
+ if (laps != null) {
+ outState.putLongArray(LAPS_KEY, laps);
+ }
+ }
+ super.onSaveInstanceState(outState);
+ }
+
+ private void showShareButton(boolean show) {
+ if (mShareButton != null) {
+ mShareButton.setVisibility(show ? View.VISIBLE : View.GONE);
+ mButtonSeperator.setVisibility(show ? View.VISIBLE : View.GONE);
+ mShareButton.setEnabled(show);
+ }
+ }
+
+ /***
+ * Update the buttons on the stopwatch according to the watch's state
+ */
+ private void setButtons(int state) {
+ switch (state) {
+ case STOPWATCH_RESET:
+ setButton(mLeftButton, R.string.sw_lap_button, false, View.INVISIBLE);
+ setButton(mRightButton, R.string.sw_start_button, true, View.VISIBLE);
+ showShareButton(false);
+ break;
+ case STOPWATCH_RUNNING:
+ setButton(mLeftButton, R.string.sw_lap_button, !reachedMaxLaps(), View.VISIBLE);
+ setButton(mRightButton, R.string.sw_stop_button, true, View.VISIBLE);
+ showShareButton(false);
+ break;
+ case STOPWATCH_STOPPED:
+ setButton(mLeftButton, R.string.sw_reset_button, true, View.VISIBLE);
+ setButton(mRightButton, R.string.sw_start_button, true, View.VISIBLE);
+ showShareButton(true);
+ break;
+ default:
+ break;
+ }
+ }
+ private boolean reachedMaxLaps() {
+ return mLapsAdapter.getCount() >= MAX_LAPS;
+ }
+
+ /***
+ * Set a single button with the string and states provided.
+ * @param b - Button view to update
+ * @param text - Text in button
+ * @param enabled - enable/disables the button
+ * @param visibility - Show/hide the button
+ */
+ private void setButton (Button b, int text, boolean enabled, int visibility) {
+ b.setText(text);
+ b.setVisibility(visibility);
+ b.setEnabled(enabled);
+ }
+
+ /***
+ * Sets the string of the time running on the stopwatch up to hundred of a second accuracy
+ * @param time - in hundreds of a second since the stopwatch started
+ */
+ private String getTimeText(long time) {
+ if (time < 0) {
+ time = 0;
+ }
+ long hundreds, seconds, minutes, hours;
+ seconds = time / 100;
+ hundreds = (time - seconds * 100);
+ minutes = seconds / 60;
+ seconds = seconds - minutes * 60;
+ hours = minutes / 60;
+ minutes = minutes - hours * 60;
+ if (hours > 99) {
+ hours = 0;
+ }
+ // TODO: must build to account for localization
+ String timeStr;
+ if (hours >= 10) {
+ timeStr = String.format("%02dh %02dm %02ds .%02d", hours, minutes,
+ seconds, hundreds);
+ } else if (hours > 0) {
+ timeStr = String.format("%01dh %02dm %02ds .%02d", hours, minutes,
+ seconds, hundreds);
+ } else if (minutes >= 10) {
+ timeStr = String.format("%02dm %02ds .%02d", minutes, seconds,
+ hundreds);
+ } else {
+ timeStr = String.format("%02dm %02ds .%02d", minutes, seconds,
+ hundreds);
+ }
+ return timeStr;
+ }
+
+ /***
+ *
+ * @param time - in hundredths of a second
+ */
+ private void addLapTime(long time) {
+ int size = mLapsAdapter.getCount();
+ long curTime = time - mStartTime + mAccumulatedTime;
+ if (size == 0) {
+ // Always show the ending lap and a new one
+ mLapsAdapter.addLap(new Lap(curTime, curTime));
+ mLapsAdapter.addLap(new Lap(0, curTime));
+ mTime.setIntervalTime(curTime * 10);
+ } else {
+ long lapTime = curTime - ((Lap) mLapsAdapter.getItem(1)).mTotalTime;
+ ((Lap)mLapsAdapter.getItem(0)).mLapTime = lapTime;
+ ((Lap)mLapsAdapter.getItem(0)).mTotalTime = curTime;
+ mLapsAdapter.addLap(new Lap(0, 0));
+ mTime.setMarkerTime(lapTime * 10);
+ // mTime.setIntervalTime(lapTime * 10);
+ }
+ mLapsAdapter.notifyDataSetChanged();
+ // Start lap animation starting from the second lap
+ mTime.stopIntervalAnimation();
+ if (!reachedMaxLaps()) {
+ mTime.startIntervalAnimation();
+ }
+ }
+
+ private void updateCurrentLap(long curTime, long totalTime) {
+ if (mLapsAdapter.getCount() > 0) {
+ Lap curLap = (Lap)mLapsAdapter.getItem(0);
+ curLap.mLapTime = totalTime - ((Lap)mLapsAdapter.getItem(1)).mTotalTime;
+ curLap.mTotalTime = totalTime;
+ mLapsAdapter.notifyDataSetChanged();
+ }
+ }
+
+ private void showLaps() {
+ if (mLapsAdapter.getCount() > 0) {
+ mLapsList.setVisibility(View.VISIBLE);
+ mLapsTitle.setVisibility(View.VISIBLE);
+ } else {
+ mLapsList.setVisibility(View.INVISIBLE);
+ mLapsTitle.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ private void startUpdateThread() {
+ mTime.post(mTimeUpdateThread);
+ }
+
+ private void stopUpdateThread() {
+ mTime.removeCallbacks(mTimeUpdateThread);
+ }
+
+ Runnable mTimeUpdateThread = new Runnable() {
+ @Override
+ public void run() {
+ long curTime = System.currentTimeMillis()/10;
+ long totalTime = mAccumulatedTime + (curTime - mStartTime);
+ if (mTime != null) {
+ mTimeText.setTime(totalTime);
+ }
+ if (mLapsAdapter.getCount() > 0) {
+ updateCurrentLap(curTime, totalTime);
+ }
+ mTime.postDelayed(mTimeUpdateThread, 10);
+ }
+ };
+
+ private String buildShareResults() {
+ return getString(R.string.sw_share_main, mTimeText.getTimeString());
+ }
+
+}
diff --git a/src/com/android/deskclock/TimerFragment.java b/src/com/android/deskclock/TimerFragment.java
new file mode 100644
index 000000000..468db4f4c
--- /dev/null
+++ b/src/com/android/deskclock/TimerFragment.java
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2012 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.android.deskclock;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.android.deskclock.timer.TimerObj;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+
+
+public class TimerFragment extends DeskClockFragment implements OnClickListener {
+
+
+ private int mTimersNum;
+ ListView mTimersList;
+ View mNewTimerPage;
+ View mTimersListPage;
+ Button mClear, mStart, mAddTimer;
+ TimerSetupView mTimerSetup;
+ TimersListAdapter mAdapter;
+ boolean mTicking = false;
+
+ public TimerFragment() {
+ }
+
+ class ClickAction {
+ public static final int ACTION_STOP = 1;
+ public static final int ACTION_PLUS_ONE = 2;
+ public static final int ACTION_DELETE = 3;
+
+ public int mAction;
+ public TimerObj mTimer;
+
+ public ClickAction(int action, TimerObj t) {
+ mAction = action;
+ mTimer = t;
+ }
+ }
+
+ class TimersListAdapter extends BaseAdapter {
+
+ ArrayList<TimerObj> mTimers = new ArrayList<TimerObj> ();
+ private final LayoutInflater mInflater;
+ Context mContext;
+
+ public TimersListAdapter(Context context) {
+ mContext = context;
+ mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ @Override
+ public int getCount() {
+ return mTimers.size();
+ }
+
+ @Override
+ public Object getItem(int p) {
+ return mTimers.get(p);
+ }
+
+ @Override
+ public long getItemId(int p) {
+ if (p >= 0 && p < mTimers.size()) {
+ return mTimers.get(p).mTimerId;
+ }
+ return 0;
+ }
+
+ public void deleteTimer(int id) {
+ for (int i = 0; i < mTimers.size(); i++) {
+ TimerObj t = mTimers.get(i);
+ if (t.mTimerId == id) {
+ ((TimerListItem)t.mView).stop();
+ mTimers.remove(i);
+ notifyDataSetChanged();
+ return;
+ }
+ }
+ }
+
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ TimerListItem v;
+
+ // if (convertView != null) {
+ // v = (TimerListItem) convertView;
+ // } else {
+ v = new TimerListItem (mContext);
+ // }
+
+ TimerObj o = (TimerObj)getItem(position);
+ o.mView = v;
+ v.start(o.mOriginalLength);
+ v.setTime(o.mTimeLeft / 10);
+ o.mState = TimerObj.STATE_RUNNING;
+ Button delete = (Button)v.findViewById(R.id.timer_delete);
+ delete.setOnClickListener(TimerFragment.this);
+ delete.setTag(new ClickAction(ClickAction.ACTION_DELETE, o));
+ Button plusOne = (Button)v. findViewById(R.id.timer_plus_one);
+ plusOne.setOnClickListener(TimerFragment.this);
+ plusOne.setTag(new ClickAction(ClickAction.ACTION_PLUS_ONE, o));
+ Button stop = (Button)v. findViewById(R.id.timer_stop);
+ stop.setOnClickListener(TimerFragment.this);
+ stop.setTag(new ClickAction(ClickAction.ACTION_STOP, o));
+ return v;
+ }
+
+ public void addTimer(TimerObj t) {
+ mTimers.add(0, t);
+ notifyDataSetChanged();
+ }
+
+ }
+
+ private final Runnable mClockTick = new Runnable() {
+ @Override
+ public void run() {
+ long now = System.currentTimeMillis();
+ for (int i = 0; i < mAdapter.getCount(); i ++) {
+ TimerObj t = (TimerObj) mAdapter.getItem(i);
+ t.mTimeLeft = t.mOriginalLength - (now - t.mStartTime);
+ ((TimerListItem)(t.mView)).setTime(t.mTimeLeft/10);
+ }
+ mTimersList.postDelayed(mClockTick, 1000 - (System.currentTimeMillis() % 1000));
+ }
+ };
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ View v = inflater.inflate(R.layout.timer_fragment, container, false);
+ mTimersList = (ListView)v.findViewById(R.id.timers_list);
+ mAdapter = new TimersListAdapter(mContext);
+ mTimersList.setAdapter(mAdapter);
+ mNewTimerPage = v.findViewById(R.id.new_timer_page);
+ mTimersListPage = v.findViewById(R.id.timers_list_page);
+ mTimerSetup = (TimerSetupView)v.findViewById(R.id.timer_setup);
+ mClear = (Button)v.findViewById(R.id.timer_clear);
+ mClear.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTimerSetup.reset();
+ }
+
+ });
+ mStart = (Button)v.findViewById(R.id.timer_start);
+ mStart.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int timerLength = mTimerSetup.getTime();
+ if (timerLength == 0) {
+ return;
+ }
+ TimerObj t = new TimerObj(mTimerSetup.getTime() * 1000);
+ mAdapter.addTimer(t);
+ gotoTimersView();
+ }
+
+ });
+ mAddTimer = (Button)v.findViewById(R.id.timer_add_timer);
+ mAddTimer.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTimerSetup.reset();
+ gotoSetupView();
+ }
+
+ });
+ return v;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ setPage();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ public void onSaveInstanceState (Bundle outState) {
+ super.onSaveInstanceState(outState);
+ }
+
+ public void setPage() {
+ if (mTimersNum != 0) {
+ gotoTimersView();
+ } else {
+ gotoSetupView();
+ }
+ }
+ private void gotoSetupView() {
+ mNewTimerPage.setVisibility(View.VISIBLE);
+ mTimersListPage.setVisibility(View.GONE);
+ stopClockTicks();
+ }
+ private void gotoTimersView() {
+ mNewTimerPage.setVisibility(View.GONE);
+ mTimersListPage.setVisibility(View.VISIBLE);
+ startClockTicks();
+ }
+
+ @Override
+ public void onClick(View v) {
+ ClickAction tag = (ClickAction)v.getTag();
+ switch (tag.mAction) {
+ case ClickAction.ACTION_DELETE:
+ mAdapter.deleteTimer(tag.mTimer.mTimerId);
+ if (mAdapter.getCount() == 0) {
+ mTimerSetup.reset();
+ gotoSetupView();
+ }
+ break;
+ case ClickAction.ACTION_PLUS_ONE:
+ tag.mTimer.mOriginalLength += 60000; //60 seconds in millis
+ ((TimerListItem)(tag.mTimer.mView)).setLength(tag.mTimer.mOriginalLength);
+ tag.mTimer.mView.invalidate();
+ break;
+ case ClickAction.ACTION_STOP:
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void startClockTicks() {
+ mTimersList.postDelayed(mClockTick, 1000 - (System.currentTimeMillis() % 1000));
+ mTicking = true;
+ }
+ private void stopClockTicks() {
+ if (mTicking) {
+ mTimersList.removeCallbacks(mClockTick);
+ mTicking = false;
+ }
+ }
+}
diff --git a/src/com/android/deskclock/TimerListItem.java b/src/com/android/deskclock/TimerListItem.java
new file mode 100644
index 000000000..1b9de3c29
--- /dev/null
+++ b/src/com/android/deskclock/TimerListItem.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2008 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.android.deskclock;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.LinearLayout;
+
+
+public class TimerListItem extends LinearLayout {
+
+ TimerView mTimerText;
+ CircleTimerView mCircleView;
+ Button mDelete, mPlusOne, mStop;
+
+ long mTimerLength;
+
+ public TimerListItem(Context context) {
+ this(context, null);
+ }
+
+ public TimerListItem(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ LayoutInflater layoutInflater =
+ (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ layoutInflater.inflate(R.layout.timer_list_item, this);
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mTimerText = (TimerView)findViewById(R.id.timer_time_text);
+ mCircleView = (CircleTimerView)findViewById(R.id.timer_time);
+ mCircleView.setTimerMode(true);
+ }
+
+ public void start(long timerLength) {
+ mTimerLength = timerLength;
+
+ if (mCircleView == null) {
+ mCircleView = (CircleTimerView)findViewById(R.id.timer_time);
+ mCircleView.setTimerMode(true);
+ }
+ mCircleView.setIntervalTime(mTimerLength);
+ mCircleView.startIntervalAnimation();
+ }
+
+ public void stop() {
+ mCircleView.stopIntervalAnimation();
+ }
+
+ public void setLength(long timerLength) {
+ mTimerLength = timerLength;
+ mCircleView.setIntervalTime(mTimerLength);
+ mTimerText.invalidate();
+ }
+
+ public void setTime(long time) {
+ if (time <= 0) {
+ time = 0;
+ mCircleView.stopIntervalAnimation();
+ }
+ if (mTimerText == null) {
+ mTimerText = (TimerView)findViewById(R.id.timer_time_text);
+ }
+ mTimerText.setTime(time);
+ }
+}
diff --git a/src/com/android/deskclock/TimerSetupView.java b/src/com/android/deskclock/TimerSetupView.java
new file mode 100644
index 000000000..65593010e
--- /dev/null
+++ b/src/com/android/deskclock/TimerSetupView.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2008 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.android.deskclock;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+
+
+public class TimerSetupView extends LinearLayout implements Button.OnClickListener{
+
+ private static final int INPUT_SIZE = 5;
+
+ private final Button mNumbers [] = new Button [10];
+ private final int mInput [] = new int [INPUT_SIZE];
+ private int mInputPointer = -1;
+ private String mLabels [];
+ private Button mLeft, mRight;
+ private ImageButton mDelete;
+ private TimerView mEnteredTime;
+ private final Context mContext;
+
+ public TimerSetupView(Context context) {
+ this(context, null);
+ }
+
+ public TimerSetupView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mContext = context;
+ LayoutInflater layoutInflater =
+ (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ layoutInflater.inflate(R.layout.time_setup_view, this);
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mLabels = mContext.getResources().getStringArray(R.array.key_pad_numbers);
+
+
+ View v1 = findViewById(R.id.first);
+ View v2 = findViewById(R.id.second);
+ View v3 = findViewById(R.id.third);
+ View v4 = findViewById(R.id.fourth);
+ mEnteredTime = (TimerView)findViewById(R.id.timer_time_text);
+ mDelete = (ImageButton)findViewById(R.id.delete);
+ mDelete.setOnClickListener(this);
+
+ mNumbers[1] = (Button)v1.findViewById(R.id.key_left);
+ mNumbers[2] = (Button)v1.findViewById(R.id.key_middle);
+ mNumbers[3] = (Button)v1.findViewById(R.id.key_right);
+
+ mNumbers[4] = (Button)v2.findViewById(R.id.key_left);
+ mNumbers[5] = (Button)v2.findViewById(R.id.key_middle);
+ mNumbers[6] = (Button)v2.findViewById(R.id.key_right);
+
+ mNumbers[7] = (Button)v3.findViewById(R.id.key_left);
+ mNumbers[8] = (Button)v3.findViewById(R.id.key_middle);
+ mNumbers[9] = (Button)v3.findViewById(R.id.key_right);
+
+ mLeft = (Button)v4.findViewById(R.id.key_left);
+ mNumbers[0] = (Button)v4.findViewById(R.id.key_middle);
+ mRight = (Button)v4.findViewById(R.id.key_right);
+
+ for (int i = 0; i < 10; i++) {
+ mNumbers[i].setOnClickListener(this);
+ mNumbers [i].setText(mLabels[i]);
+ mNumbers [i].setTag(R.id.numbers_key,new Integer(i));
+ }
+ updateTime();
+ }
+
+
+ @Override
+ public void onClick(View v) {
+
+ Integer val = (Integer) v.getTag(R.id.numbers_key);
+ // A number was pressed
+ if (val != null) {
+ // pressing "0" as the first digit does nothing
+ if (mInputPointer == -1 && val == 0) {
+ return;
+ }
+ if (mInputPointer < INPUT_SIZE - 1) {
+ for (int i = mInputPointer; i >= 0; i--) {
+ mInput[i+1] = mInput[i];
+ }
+ mInputPointer++;
+ mInput [0] = val;
+ updateTime();
+ }
+ return;
+ }
+
+ // other keys
+ if (v == mDelete) {
+ if (mInputPointer >= 0) {
+ for (int i = 0; i < mInputPointer; i++) {
+ mInput[i] = mInput[i + 1];
+ }
+ mInput[mInputPointer] = 0;
+ mInputPointer--;
+ updateTime();
+ }
+ }
+ }
+
+ private void updateTime() {
+ mEnteredTime.setTime(mLabels[mInput[4]], mLabels[mInput[3]] + mLabels[mInput[2]],
+ mLabels[mInput[1]]+ mLabels[mInput[0]], null);
+ }
+
+ public void reset() {
+ for (int i = 0; i < INPUT_SIZE; i ++) {
+ mInput[i] = 0;
+ }
+ mInputPointer = -1;
+ updateTime();
+ }
+
+ public int getTime() {
+ return mInput[4] * 3600 + mInput[3] * 600 + mInput[2] * 60 + mInput[1] * 10 + mInput[0];
+ }
+}
diff --git a/src/com/android/deskclock/TimerView.java b/src/com/android/deskclock/TimerView.java
new file mode 100644
index 000000000..2670088cb
--- /dev/null
+++ b/src/com/android/deskclock/TimerView.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2008 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.android.deskclock;
+
+import android.content.Context;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+
+public class TimerView extends LinearLayout {
+ TextView mHours, mMinutes, mSeconds, mHunderdths;
+ TextView mHoursLabel, mMinutesLabel, mSecondsLabel;
+ boolean mShowTimeStr = true;
+ Typeface mRobotoThin;
+
+ Runnable mBlinkThread = new Runnable() {
+ @Override
+ public void run() {
+ mShowTimeStr = !mShowTimeStr;
+ TimerView.this.setVisibility(mShowTimeStr ? View.VISIBLE : View.INVISIBLE);
+ postDelayed(mBlinkThread, 1000);
+ }
+
+ };
+
+
+ public TimerView(Context context) {
+ this(context, null);
+ }
+
+ public TimerView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ mRobotoThin = Typeface.createFromAsset(context.getAssets(),"fonts/Roboto-Thin.ttf");
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ mHours = (TextView)findViewById(R.id.hours);
+ mMinutes = (TextView)findViewById(R.id.minutes);
+ mSeconds = (TextView)findViewById(R.id.seconds);
+ mSeconds.setTypeface(mRobotoThin);
+ mHunderdths = (TextView)findViewById(R.id.hundreds_seconds);
+ mHoursLabel = (TextView)findViewById(R.id.hours_label);
+ }
+
+ public void setTime(long time) {
+ if (time < 0) {
+ time = 0;
+ }
+ long hundreds, seconds, minutes, hours;
+ seconds = time / 100;
+ hundreds = (time - seconds * 100);
+ minutes = seconds / 60;
+ seconds = seconds - minutes * 60;
+ hours = minutes / 60;
+ minutes = minutes - hours * 60;
+ if (hours > 99) {
+ hours = 0;
+ }
+ // TODO: must build to account for localization
+ if (hours >= 10) {
+ mHours.setText(String.format("%02d",hours));
+ mHours.setVisibility(View.VISIBLE);
+ mHoursLabel.setVisibility(View.VISIBLE);
+ } else if (hours > 0) {
+ mHours.setText(String.format("%01d",hours));
+ mHours.setVisibility(View.VISIBLE);
+ mHoursLabel.setVisibility(View.VISIBLE);
+ } else {
+ mHours.setVisibility(View.GONE);
+ mHoursLabel.setVisibility(View.GONE);
+ }
+
+ if (minutes >= 10) {
+ mMinutes.setText(String.format("%02d",minutes));
+ } else {
+ mMinutes.setText(String.format("%01d",minutes));
+ }
+
+ mSeconds.setText(String.format("%02d",seconds));
+ mHunderdths.setText(String.format("%02d",hundreds));
+ }
+
+ public void setTime(String hours, String minutes, String seconds, String hundreds) {
+ if (hours != null) {
+ mHours.setText(hours);
+ } else {
+ mHours.setText("0");
+ }
+ if (minutes != null) {
+ mMinutes.setText(minutes);
+ } else {
+ mMinutes.setText("00");
+ }
+ if (seconds != null) {
+ mSeconds.setText(seconds);
+ } else {
+ mSeconds.setText("00");
+ }
+ if (hundreds != null) {
+ mHunderdths.setText(hundreds);
+ mHunderdths.setVisibility(View.VISIBLE);
+ } else {
+ mHunderdths.setVisibility(View.GONE);
+ }
+ }
+
+ public void blinkTimeStr(boolean blink) {
+ if (blink) {
+ postDelayed(mBlinkThread, 1000);
+ } else {
+ removeCallbacks(mBlinkThread);
+ mShowTimeStr = true;
+ this.setVisibility(View.VISIBLE);
+ }
+ }
+
+ public String getTimeString() {
+ return String.format("%s:%s:%s.%s",mHours.getText(), mMinutes.getText(), mSeconds.getText(),
+ mHunderdths.getText());
+ }
+
+}
diff --git a/src/com/android/deskclock/timer/TimerFragment.java b/src/com/android/deskclock/timer/TimerFragment.java
new file mode 100644
index 000000000..26f9813c3
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerFragment.java
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2012 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.android.deskclock.timer;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+import android.widget.ListView;
+
+import com.android.deskclock.DeskClockFragment;
+import com.android.deskclock.R;
+
+import java.util.ArrayList;
+
+
+public class TimerFragment extends DeskClockFragment implements OnClickListener {
+
+
+ private ListView mTimersList;
+ private View mNewTimerPage;
+ private View mTimersListPage;
+ private Button mClear, mStart, mAddTimer;
+ private TimerSetupView mTimerSetup;
+ private TimersListAdapter mAdapter;
+ private boolean mTicking = false;
+
+ public TimerFragment() {
+ }
+
+ class ClickAction {
+ public static final int ACTION_STOP = 1;
+ public static final int ACTION_PLUS_ONE = 2;
+ public static final int ACTION_DELETE = 3;
+
+ public int mAction;
+ public TimerObj mTimer;
+
+ public ClickAction(int action, TimerObj t) {
+ mAction = action;
+ mTimer = t;
+ }
+ }
+
+ class TimersListAdapter extends BaseAdapter {
+
+ ArrayList<TimerObj> mTimers = new ArrayList<TimerObj> ();
+ private final LayoutInflater mInflater;
+ Context mContext;
+
+ public TimersListAdapter(Context context) {
+ mContext = context;
+ mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+
+ @Override
+ public int getCount() {
+ return mTimers.size();
+ }
+
+ @Override
+ public Object getItem(int p) {
+ return mTimers.get(p);
+ }
+
+ @Override
+ public long getItemId(int p) {
+ if (p >= 0 && p < mTimers.size()) {
+ return mTimers.get(p).mTimerId;
+ }
+ return 0;
+ }
+
+ public void deleteTimer(int id) {
+ for (int i = 0; i < mTimers.size(); i++) {
+ TimerObj t = mTimers.get(i);
+ if (t.mTimerId == id) {
+ ((TimerListItem)t.mView).stop();
+ t.deleteFromSharedPref(PreferenceManager.getDefaultSharedPreferences(mContext));
+ mTimers.remove(i);
+ notifyDataSetChanged();
+ return;
+ }
+ }
+ }
+
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ TimerListItem v;
+
+ // if (convertView != null) {
+ // v = (TimerListItem) convertView;
+ // } else {
+ v = new TimerListItem (mContext);
+ // }
+
+ TimerObj o = (TimerObj)getItem(position);
+ o.mView = v;
+ long timeLeft = o.updateTimeLeft();
+ v.set(o.mOriginalLength, timeLeft);
+ v.setTime(timeLeft / 10);
+ v.start();
+ v.setTime(timeLeft / 10);
+ Button delete = (Button)v.findViewById(R.id.timer_delete);
+ delete.setOnClickListener(TimerFragment.this);
+ delete.setTag(new ClickAction(ClickAction.ACTION_DELETE, o));
+ Button plusOne = (Button)v. findViewById(R.id.timer_plus_one);
+ plusOne.setOnClickListener(TimerFragment.this);
+ plusOne.setTag(new ClickAction(ClickAction.ACTION_PLUS_ONE, o));
+ Button stop = (Button)v. findViewById(R.id.timer_stop);
+ stop.setOnClickListener(TimerFragment.this);
+ stop.setTag(new ClickAction(ClickAction.ACTION_STOP, o));
+ TimerFragment.this.setTimerButtons(o);
+ return v;
+ }
+
+ public void addTimer(TimerObj t) {
+ mTimers.add(0, t);
+ notifyDataSetChanged();
+ }
+
+ public void onSaveInstanceState(Bundle outState) {
+ TimerObj.putTimersInSharedPrefs(
+ PreferenceManager.getDefaultSharedPreferences(mContext), mTimers);
+ }
+
+ public void onRestoreInstanceState(Bundle outState) {
+ TimerObj.getTimersFromSharedPrefs(
+ PreferenceManager.getDefaultSharedPreferences(mContext), mTimers);
+ notifyDataSetChanged();
+ }
+
+ public void saveGlobalState() {
+ TimerObj.putTimersInSharedPrefs(
+ PreferenceManager.getDefaultSharedPreferences(mContext), mTimers);
+ }
+ }
+
+ private final Runnable mClockTick = new Runnable() {
+ @Override
+ public void run() {
+ for (int i = 0; i < mAdapter.getCount(); i ++) {
+ TimerObj t = (TimerObj) mAdapter.getItem(i);
+ if (t.mState == TimerObj.STATE_RUNNING || t.mState == TimerObj.STATE_TIMESUP) {
+ long timeLeft = t.updateTimeLeft();
+ if ((TimerListItem)(t.mView) != null) {
+ ((TimerListItem)(t.mView)).setTime(timeLeft/10);
+ } else {
+ Log.v("timer fragment","----------------------------------------- timer view is null");
+ }
+ }
+ if (t.mTimeLeft <= 0 && t.mState != TimerObj.STATE_DONE
+ && t.mState != TimerObj.STATE_RESTART) {
+ t.mState = TimerObj.STATE_TIMESUP;
+ TimerFragment.this.setTimerButtons(t);
+ }
+
+ }
+ mTimersList.postDelayed(mClockTick, 1000 - (System.currentTimeMillis() % 1000));
+ }
+ };
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ mContext = getActivity();
+ View v = inflater.inflate(R.layout.timer_fragment, container, false);
+ mTimersList = (ListView)v.findViewById(R.id.timers_list);
+ mAdapter = new TimersListAdapter(mContext);
+ mAdapter.onRestoreInstanceState(savedInstanceState);
+ mTimersList.setAdapter(mAdapter);
+ mNewTimerPage = v.findViewById(R.id.new_timer_page);
+ mTimersListPage = v.findViewById(R.id.timers_list_page);
+ mTimerSetup = (TimerSetupView)v.findViewById(R.id.timer_setup);
+ mClear = (Button)v.findViewById(R.id.timer_clear);
+ mClear.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTimerSetup.reset();
+ }
+
+ });
+ mStart = (Button)v.findViewById(R.id.timer_start);
+ mStart.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int timerLength = mTimerSetup.getTime();
+ if (timerLength == 0) {
+ return;
+ }
+ TimerObj t = new TimerObj(mTimerSetup.getTime() * 1000);
+ t.mState = TimerObj.STATE_RUNNING;
+ mAdapter.addTimer(t);
+ gotoTimersView();
+ }
+
+ });
+ mAddTimer = (Button)v.findViewById(R.id.timer_add_timer);
+ mAddTimer.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mTimerSetup.reset();
+ gotoSetupView();
+ }
+
+ });
+ return v;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ setPage();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ }
+
+ @Override
+ public void onSaveInstanceState (Bundle outState) {
+ super.onSaveInstanceState(outState);
+ if (mAdapter != null) {
+ mAdapter.onSaveInstanceState (outState);
+ }
+ }
+
+ @Override
+ public void saveGlobalState () {
+ super.saveGlobalState();
+ if (mAdapter != null) {
+ mAdapter.saveGlobalState ();
+ }
+ }
+
+ public void setPage() {
+ if (mAdapter.getCount() != 0) {
+ gotoTimersView();
+ } else {
+ gotoSetupView();
+ }
+ }
+ private void gotoSetupView() {
+ mNewTimerPage.setVisibility(View.VISIBLE);
+ mTimersListPage.setVisibility(View.GONE);
+ stopClockTicks();
+ }
+ private void gotoTimersView() {
+ mNewTimerPage.setVisibility(View.GONE);
+ mTimersListPage.setVisibility(View.VISIBLE);
+ startClockTicks();
+ }
+
+ @Override
+ public void onClick(View v) {
+ ClickAction tag = (ClickAction)v.getTag();
+ switch (tag.mAction) {
+ case ClickAction.ACTION_DELETE:
+ mAdapter.deleteTimer(tag.mTimer.mTimerId);
+ if (mAdapter.getCount() == 0) {
+ mTimerSetup.reset();
+ gotoSetupView();
+ }
+ break;
+ case ClickAction.ACTION_PLUS_ONE:
+ onPlusOneButtonPressed(tag.mTimer);
+ setTimerButtons(tag.mTimer);
+ break;
+ case ClickAction.ACTION_STOP:
+ onStopButtonPressed(tag.mTimer);
+ setTimerButtons(tag.mTimer);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void onPlusOneButtonPressed(TimerObj t) {
+ switch(t.mState) {
+ case TimerObj.STATE_RUNNING:
+ t.mStartTime += 60000; //60 seconds in millis
+ break;
+ case TimerObj.STATE_STOPPED:
+ case TimerObj.STATE_TIMESUP:
+ case TimerObj.STATE_DONE:
+ t.mState = TimerObj.STATE_RESTART;
+ t.mTimeLeft = t.mOriginalLength;
+ ((TimerListItem)t.mView).setTime(t.mTimeLeft / 10);
+ break;
+ default:
+ break;
+ }
+ }
+
+
+
+
+ private void onStopButtonPressed(TimerObj t) {
+ switch(t.mState) {
+ case TimerObj.STATE_RUNNING:
+ // Stop timer and save the remaining time of the timer
+ t.mState = TimerObj.STATE_STOPPED;
+ ((TimerListItem) t.mView).pause();
+ t.updateTimeLeft();
+ break;
+ case TimerObj.STATE_STOPPED:
+ // Reset the remaining time and continue timer
+ t.mState = TimerObj.STATE_RUNNING;
+ t.mStartTime = System.currentTimeMillis() - (t.mOriginalLength - t.mTimeLeft);
+ ((TimerListItem) t.mView).start();
+ break;
+ case TimerObj.STATE_TIMESUP:
+ t.mState = TimerObj.STATE_DONE;
+ break;
+ case TimerObj.STATE_DONE:
+ break;
+ case TimerObj.STATE_RESTART:
+ t.mState = TimerObj.STATE_RUNNING;
+ t.mStartTime = System.currentTimeMillis() - (t.mOriginalLength - t.mTimeLeft);
+ ((TimerListItem) t.mView).start();
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void setTimerButtons(TimerObj t) {
+ Context a = getActivity();
+ if (a == null) {
+ return;
+ }
+ Button plusOne = (Button) t.mView.findViewById(R.id.timer_plus_one);
+ Button stop = (Button) t.mView.findViewById(R.id.timer_stop);
+ Resources r = a.getResources();
+ switch (t.mState) {
+ case TimerObj.STATE_RUNNING:
+ plusOne.setVisibility(View.VISIBLE);
+ plusOne.setText(r.getString(R.string.timer_plus_one));
+ stop.setVisibility(View.VISIBLE);
+ stop.setText(r.getString(R.string.timer_stop));
+ break;
+ case TimerObj.STATE_STOPPED:
+ plusOne.setVisibility(View.VISIBLE);
+ plusOne.setText(r.getString(R.string.timer_reset));
+ stop.setVisibility(View.VISIBLE);
+ stop.setText(r.getString(R.string.timer_start));
+ break;
+ case TimerObj.STATE_TIMESUP:
+ plusOne.setVisibility(View.VISIBLE);
+ plusOne.setText(r.getString(R.string.timer_reset));
+ stop.setVisibility(View.VISIBLE);
+ stop.setText(r.getString(R.string.timer_stop));
+ break;
+ case TimerObj.STATE_DONE:
+ plusOne.setVisibility(View.VISIBLE);
+ plusOne.setText(r.getString(R.string.timer_reset));
+ stop.setVisibility(View.INVISIBLE);
+ break;
+ case TimerObj.STATE_RESTART:
+ plusOne.setVisibility(View.INVISIBLE);
+ stop.setVisibility(View.VISIBLE);
+ stop.setText(r.getString(R.string.timer_start));
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void startClockTicks() {
+ mTimersList.postDelayed(mClockTick, 1000 - (System.currentTimeMillis() % 1000));
+ mTicking = true;
+ }
+ private void stopClockTicks() {
+ if (mTicking) {
+ mTimersList.removeCallbacks(mClockTick);
+ mTicking = false;
+ }
+ }
+}
diff --git a/src/com/android/deskclock/timer/TimerListItem.java b/src/com/android/deskclock/timer/TimerListItem.java
new file mode 100644
index 000000000..ce1d8cd13
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerListItem.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2008 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.android.deskclock.timer;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.Button;
+import android.widget.LinearLayout;
+
+import com.android.deskclock.CircleTimerView;
+import com.android.deskclock.R;
+
+
+public class TimerListItem extends LinearLayout {
+
+ TimerView mTimerText;
+ CircleTimerView mCircleView;
+ Button mDelete, mPlusOne, mStop;
+
+ long mTimerLength;
+
+ public TimerListItem(Context context) {
+ this(context, null);
+ }
+
+ public TimerListItem(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ LayoutInflater layoutInflater =
+ (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ layoutInflater.inflate(R.layout.timer_list_item, this);
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mTimerText = (TimerView)findViewById(R.id.timer_time_text);
+ mCircleView = (CircleTimerView)findViewById(R.id.timer_time);
+ mCircleView.setTimerMode(true);
+ }
+
+ public void set(long timerLength, long timeLeft) {
+ if (mCircleView == null) {
+ mCircleView = (CircleTimerView)findViewById(R.id.timer_time);
+ mCircleView.setTimerMode(true);
+ }
+ mTimerLength = timerLength;
+ mCircleView.setIntervalTime(mTimerLength);
+ mCircleView.setPassedTime(timerLength - timeLeft);
+ }
+
+ public void start() {
+ mCircleView.startIntervalAnimation();
+ }
+
+ public void pause() {
+ mCircleView.pauseIntervalAnimation();
+ }
+
+ public void stop() {
+ mCircleView.stopIntervalAnimation();
+ }
+
+ public void setLength(long timerLength) {
+ mTimerLength = timerLength;
+ mCircleView.setIntervalTime(mTimerLength);
+ mTimerText.invalidate();
+ }
+
+ public void setTime(long time) {
+ if (time <= 0) {
+ time = 0;
+ mCircleView.stopIntervalAnimation();
+ }
+ if (mTimerText == null) {
+ mTimerText = (TimerView)findViewById(R.id.timer_time_text);
+ }
+ mTimerText.setTime(time);
+ }
+}
diff --git a/src/com/android/deskclock/timer/TimerObj.java b/src/com/android/deskclock/timer/TimerObj.java
new file mode 100644
index 000000000..0139d1489
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerObj.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2012 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.android.deskclock.timer;
+
+import android.content.SharedPreferences;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+import android.view.View;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
+public class TimerObj implements Parcelable {
+
+ private static final String TAG = "TimerObj";
+
+ public int mTimerId; // Unique id
+ public long mStartTime; // With mTimeLeft , used to calculate the correct time
+ public long mTimeLeft; // in the timer.
+ public long mOriginalLength;
+ public View mView;
+ public int mState;
+
+ public static final int STATE_RUNNING = 1;
+ public static final int STATE_STOPPED = 2;
+ public static final int STATE_TIMESUP = 3;
+ public static final int STATE_DONE = 4;
+ public static final int STATE_RESTART = 5;
+
+ private static final String PREF_TIMER_ID = "timer_id_";
+ private static final String PREF_START_TIME = "timer_start_time_";
+ private static final String PREF_TIME_LEFT = "timer_time_left_";
+ private static final String PREF_ORIGINAL_TIME = "timer_original_timet_";
+ private static final String PREF_STATE = "timer_state_";
+
+ private static final String PREF_TIMERS_LIST = "timers_list";
+
+
+
+ // Private actions processed by the receiver
+ public static final String START_TIMER = "start_timer";
+ public static final String CANCEL_TIMER = "cancel_timer";
+ public static final String TIMES_UP = "times_up";
+ public static final String TIMER_RESET = "timer_reset";
+
+ public static final String TIMER_INTENT_EXTRA = "timer.intent.extra";
+
+ public static final Parcelable.Creator<TimerObj> CREATOR = new Parcelable.Creator<TimerObj>() {
+ @Override
+ public TimerObj createFromParcel(Parcel p) {
+ return new TimerObj(p);
+ }
+
+ @Override
+ public TimerObj[] newArray(int size) {
+ return new TimerObj[size];
+ }
+ };
+
+ public void writeToSharedPref(SharedPreferences prefs) {
+ SharedPreferences.Editor editor = prefs.edit();
+ String key = PREF_TIMER_ID + Integer.toString(mTimerId);
+ String id = Integer.toString(mTimerId);
+ editor.putInt (key, mTimerId);
+ key = PREF_START_TIME + id;
+ editor.putLong (key, mStartTime);
+ key = PREF_TIME_LEFT + id;
+ editor.putLong (key, mTimeLeft);
+ key = PREF_ORIGINAL_TIME + id;
+ editor.putLong (key, mOriginalLength);
+ key = PREF_STATE + id;
+ editor.putInt (key, mState);
+ Set <String> timersList = prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>());
+ timersList.add(id);
+ editor.putStringSet(PREF_TIMERS_LIST, timersList);
+ editor.apply();
+ }
+
+
+ public void readFromSharedPref(SharedPreferences prefs) {
+ String id = Integer.toString(mTimerId);
+ String key = PREF_START_TIME + id;
+ mStartTime = prefs.getLong(key, 0);
+ key = PREF_TIME_LEFT + id;
+ mTimeLeft = prefs.getLong(key, 0);
+ key = PREF_ORIGINAL_TIME + id;
+ mOriginalLength = prefs.getLong(key, 0);
+ key = PREF_STATE + id;
+ mState = prefs.getInt(key, 0);
+ }
+
+ public void deleteFromSharedPref(SharedPreferences prefs) {
+ SharedPreferences.Editor editor = prefs.edit();
+ String key = PREF_TIMER_ID + Integer.toString(mTimerId);
+ String id = Integer.toString(mTimerId);
+ editor.remove (key);
+ key = PREF_START_TIME + id;
+ editor.remove (key);
+ key = PREF_TIME_LEFT + id;
+ editor.remove (key);
+ key = PREF_ORIGINAL_TIME + id;
+ editor.remove (key);
+ key = PREF_STATE + id;
+ editor.remove (key);
+ Set <String> timersList = prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>());
+ timersList.remove(id);
+ editor.putStringSet(PREF_TIMERS_LIST, timersList);
+ editor.commit();
+ //dumpTimersFromSharedPrefs(prefs);
+ }
+
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mTimerId);
+ dest.writeLong(mStartTime);
+ dest.writeLong(mTimeLeft);
+ dest.writeLong(mOriginalLength);
+ }
+
+ public TimerObj(Parcel p) {
+ mTimerId = p.readInt();
+ mStartTime = p.readLong();
+ mTimeLeft = p.readLong();
+ mOriginalLength = p.readLong();
+ }
+
+ public TimerObj() {
+ init(0);
+ }
+
+ public TimerObj(long timerLength) {
+ init(timerLength);
+ }
+
+ private void init (long length) {
+ mTimerId = (int) System.currentTimeMillis();
+ mStartTime = System.currentTimeMillis();
+ mTimeLeft = mOriginalLength = length;
+ }
+
+ public long updateTimeLeft() {
+ mTimeLeft = mOriginalLength - (System.currentTimeMillis() - mStartTime);
+ return mTimeLeft;
+ }
+
+ public static void getTimersFromSharedPrefs(
+ SharedPreferences prefs, ArrayList<TimerObj> timers) {
+ Object[] timerStrings =
+ prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>()).toArray();
+ if (timerStrings.length > 0) {
+ for (int i = 0; i < timerStrings.length; i++) {
+ TimerObj t = new TimerObj();
+ t.mTimerId = Integer.parseInt((String)timerStrings[i]);
+ t.readFromSharedPref(prefs);
+ timers.add(t);
+ }
+ }
+ }
+
+ public static void putTimersInSharedPrefs(
+ SharedPreferences prefs, ArrayList<TimerObj> timers) {
+ if (timers.size() > 0) {
+ for (int i = 0; i < timers.size(); i++) {
+ TimerObj t = timers.get(i);
+ timers.get(i).writeToSharedPref(prefs);
+ }
+ }
+ }
+
+ public static void dumpTimersFromSharedPrefs(
+ SharedPreferences prefs) {
+ Object[] timerStrings =
+ prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>()).toArray();
+ Log.v(TAG,"--------------------- timers list in shared prefs");
+ if (timerStrings.length > 0) {
+ for (int i = 0; i < timerStrings.length; i++) {
+ int id = Integer.parseInt((String)timerStrings[i]);
+ Log.v(TAG,"---------------------timer " + (i + 1) + ": id - " + id);
+ }
+ }
+ }
+
+
+}
diff --git a/src/com/android/deskclock/timer/TimerReceiver.java b/src/com/android/deskclock/timer/TimerReceiver.java
new file mode 100644
index 000000000..e205f035d
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerReceiver.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2012 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.android.deskclock.timer;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.util.Log;
+
+public class TimerReceiver extends BroadcastReceiver {
+ private static final String TAG = "TimerReceiver";
+
+ @Override
+ public void onReceive(final Context context, final Intent intent) {
+
+ TimerObj timer;
+ Log.d(TAG, " got intent");
+
+ if (intent.hasExtra(TimerObj.TIMER_INTENT_EXTRA)) {
+ // Get the alarm out of the Intent
+ timer = intent.getParcelableExtra(TimerObj.TIMER_INTENT_EXTRA);
+ } else {
+ // No data to work with, do nothing
+ Log.d(TAG, " got intent without Timer data");
+ return;
+ }
+
+ NotificationManager nm =
+ (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
+
+ if (TimerObj.START_TIMER.equals(intent.getAction())) {
+ // Start intent is send by the timer activity, show timer notification and set an alarm
+ Log.d(TAG," got start intent");
+ PendingIntent i = createTimerActivityIntent(context, timer);
+ nm.notify(timer.mTimerId, buildTimerNotification(context, timer, false, i));
+
+ } else if (TimerObj.CANCEL_TIMER.equals(intent.getAction())) {
+ // Cancel intent can be sent by either the app or from the notification
+ // Remove notification, cancel alarm and tell timer app the timer was canceled,
+ //
+ Log.d(TAG ," got cancel intent");
+ nm.cancel(timer.mTimerId);
+
+ } else if (TimerObj.TIMES_UP.equals(intent.getAction())) {
+ // Times up comes as an alarm notification, update the notification, timer activity and
+ // play the alarm ring tone.
+ Log.d(TAG," got timesup intent");
+
+
+ } else if (TimerObj.TIMER_RESET.equals(intent.getAction())) {
+ // Reset can come with the times up notification is swiped or from the activity
+ // Remove the notification, stop playing the alarm, tell timer activity to reset
+ }
+ }
+
+
+ private static PendingIntent createTimerActivityIntent(Context context, TimerObj t) {
+ Intent clickIntent = new Intent();
+ // clickIntent.setClass(context, TimerActivity.class);
+ clickIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ clickIntent.putExtra(TimerObj.TIMER_INTENT_EXTRA, t);
+ return PendingIntent.getActivity(context, 0, clickIntent,
+ PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);
+ }
+
+ private static Notification buildTimerNotification(
+ Context context, TimerObj t, Boolean onGoing, PendingIntent contentIntent) {
+ Notification.Builder builder = new Notification.Builder(context);
+ builder.setContentIntent(contentIntent);
+ builder.setContentTitle("Timer");
+ builder.setContentText("Now or Never");
+// builder.setDeleteIntent(null); // what to do when the notification is cleared
+ builder.setOngoing(onGoing);
+// builder.setSound(null);
+ builder.setWhen(System.currentTimeMillis());
+ builder.setTicker("Timer is here");
+ // builder.setSmallIcon(R.drawable.ic_clock_alarm_on);
+ // builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_clock_alarm_on));
+
+ return builder.build();
+
+ }
+} \ No newline at end of file
diff --git a/src/com/android/deskclock/timer/TimerSetupView.java b/src/com/android/deskclock/timer/TimerSetupView.java
new file mode 100644
index 000000000..49e243d1e
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerSetupView.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2008 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.android.deskclock.timer;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.LinearLayout;
+
+import com.android.deskclock.R;
+
+
+public class TimerSetupView extends LinearLayout implements Button.OnClickListener{
+
+ private static final int INPUT_SIZE = 5;
+
+ private final Button mNumbers [] = new Button [10];
+ private final int mInput [] = new int [INPUT_SIZE];
+ private int mInputPointer = -1;
+ private String mLabels [];
+ private Button mLeft, mRight;
+ private ImageButton mDelete;
+ private TimerView mEnteredTime;
+ private final Context mContext;
+
+ public TimerSetupView(Context context) {
+ this(context, null);
+ }
+
+ public TimerSetupView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mContext = context;
+ LayoutInflater layoutInflater =
+ (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ layoutInflater.inflate(R.layout.time_setup_view, this);
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ mLabels = mContext.getResources().getStringArray(R.array.key_pad_numbers);
+
+
+ View v1 = findViewById(R.id.first);
+ View v2 = findViewById(R.id.second);
+ View v3 = findViewById(R.id.third);
+ View v4 = findViewById(R.id.fourth);
+ mEnteredTime = (TimerView)findViewById(R.id.timer_time_text);
+ mDelete = (ImageButton)findViewById(R.id.delete);
+ mDelete.setOnClickListener(this);
+
+ mNumbers[1] = (Button)v1.findViewById(R.id.key_left);
+ mNumbers[2] = (Button)v1.findViewById(R.id.key_middle);
+ mNumbers[3] = (Button)v1.findViewById(R.id.key_right);
+
+ mNumbers[4] = (Button)v2.findViewById(R.id.key_left);
+ mNumbers[5] = (Button)v2.findViewById(R.id.key_middle);
+ mNumbers[6] = (Button)v2.findViewById(R.id.key_right);
+
+ mNumbers[7] = (Button)v3.findViewById(R.id.key_left);
+ mNumbers[8] = (Button)v3.findViewById(R.id.key_middle);
+ mNumbers[9] = (Button)v3.findViewById(R.id.key_right);
+
+ mLeft = (Button)v4.findViewById(R.id.key_left);
+ mNumbers[0] = (Button)v4.findViewById(R.id.key_middle);
+ mRight = (Button)v4.findViewById(R.id.key_right);
+
+ for (int i = 0; i < 10; i++) {
+ mNumbers[i].setOnClickListener(this);
+ mNumbers [i].setText(mLabels[i]);
+ mNumbers [i].setTag(R.id.numbers_key,new Integer(i));
+ }
+ updateTime();
+ }
+
+
+ @Override
+ public void onClick(View v) {
+
+ Integer val = (Integer) v.getTag(R.id.numbers_key);
+ // A number was pressed
+ if (val != null) {
+ // pressing "0" as the first digit does nothing
+ if (mInputPointer == -1 && val == 0) {
+ return;
+ }
+ if (mInputPointer < INPUT_SIZE - 1) {
+ for (int i = mInputPointer; i >= 0; i--) {
+ mInput[i+1] = mInput[i];
+ }
+ mInputPointer++;
+ mInput [0] = val;
+ updateTime();
+ }
+ return;
+ }
+
+ // other keys
+ if (v == mDelete) {
+ if (mInputPointer >= 0) {
+ for (int i = 0; i < mInputPointer; i++) {
+ mInput[i] = mInput[i + 1];
+ }
+ mInput[mInputPointer] = 0;
+ mInputPointer--;
+ updateTime();
+ }
+ }
+ }
+
+ private void updateTime() {
+ mEnteredTime.setTime(mLabels[mInput[4]], mLabels[mInput[3]] + mLabels[mInput[2]],
+ mLabels[mInput[1]]+ mLabels[mInput[0]], null);
+ }
+
+ public void reset() {
+ for (int i = 0; i < INPUT_SIZE; i ++) {
+ mInput[i] = 0;
+ }
+ mInputPointer = -1;
+ updateTime();
+ }
+
+ public int getTime() {
+ return mInput[4] * 3600 + mInput[3] * 600 + mInput[2] * 60 + mInput[1] * 10 + mInput[0];
+ }
+}
diff --git a/src/com/android/deskclock/timer/TimerView.java b/src/com/android/deskclock/timer/TimerView.java
new file mode 100644
index 000000000..de4a5000e
--- /dev/null
+++ b/src/com/android/deskclock/timer/TimerView.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2008 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.android.deskclock.timer;
+
+import android.content.Context;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.deskclock.R;
+
+
+public class TimerView extends LinearLayout {
+ TextView mHours, mMinutes, mSeconds, mHunderdths;
+ TextView mHoursLabel, mMinutesLabel, mSecondsLabel;
+ boolean mShowTimeStr = true;
+ Typeface mRobotoThin;
+
+ Runnable mBlinkThread = new Runnable() {
+ @Override
+ public void run() {
+ mShowTimeStr = !mShowTimeStr;
+ TimerView.this.setVisibility(mShowTimeStr ? View.VISIBLE : View.INVISIBLE);
+ postDelayed(mBlinkThread, 1000);
+ }
+
+ };
+
+
+ public TimerView(Context context) {
+ this(context, null);
+ }
+
+ public TimerView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ mRobotoThin = Typeface.createFromAsset(context.getAssets(),"fonts/Roboto-Thin.ttf");
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ mHours = (TextView)findViewById(R.id.hours);
+ mMinutes = (TextView)findViewById(R.id.minutes);
+ mSeconds = (TextView)findViewById(R.id.seconds);
+ mSeconds.setTypeface(mRobotoThin);
+ mHunderdths = (TextView)findViewById(R.id.hundreds_seconds);
+ mHoursLabel = (TextView)findViewById(R.id.hours_label);
+ }
+
+ public void setTime(long time) {
+ if (time < 0) {
+ time = 0;
+ }
+ long hundreds, seconds, minutes, hours;
+ seconds = time / 100;
+ hundreds = (time - seconds * 100);
+ minutes = seconds / 60;
+ seconds = seconds - minutes * 60;
+ hours = minutes / 60;
+ minutes = minutes - hours * 60;
+ if (hours > 99) {
+ hours = 0;
+ }
+ // TODO: must build to account for localization
+ if (hours >= 10) {
+ mHours.setText(String.format("%02d",hours));
+ mHours.setVisibility(View.VISIBLE);
+ mHoursLabel.setVisibility(View.VISIBLE);
+ } else if (hours > 0) {
+ mHours.setText(String.format("%01d",hours));
+ mHours.setVisibility(View.VISIBLE);
+ mHoursLabel.setVisibility(View.VISIBLE);
+ } else {
+ mHours.setVisibility(View.GONE);
+ mHoursLabel.setVisibility(View.GONE);
+ }
+
+ if (minutes >= 10) {
+ mMinutes.setText(String.format("%02d",minutes));
+ } else {
+ mMinutes.setText(String.format("%01d",minutes));
+ }
+
+ mSeconds.setText(String.format("%02d",seconds));
+ mHunderdths.setText(String.format("%02d",hundreds));
+ }
+
+ public void setTime(String hours, String minutes, String seconds, String hundreds) {
+ if (hours != null) {
+ mHours.setText(hours);
+ } else {
+ mHours.setText("0");
+ }
+ if (minutes != null) {
+ mMinutes.setText(minutes);
+ } else {
+ mMinutes.setText("00");
+ }
+ if (seconds != null) {
+ mSeconds.setText(seconds);
+ } else {
+ mSeconds.setText("00");
+ }
+ if (hundreds != null) {
+ mHunderdths.setText(hundreds);
+ mHunderdths.setVisibility(View.VISIBLE);
+ } else {
+ mHunderdths.setVisibility(View.GONE);
+ }
+ }
+
+ public void blinkTimeStr(boolean blink) {
+ if (blink) {
+ postDelayed(mBlinkThread, 1000);
+ } else {
+ removeCallbacks(mBlinkThread);
+ mShowTimeStr = true;
+ this.setVisibility(View.VISIBLE);
+ }
+ }
+
+ public String getTimeString() {
+ return String.format("%s:%s:%s.%s",mHours.getText(), mMinutes.getText(), mSeconds.getText(),
+ mHunderdths.getText());
+ }
+
+}